CLI Matrix client — Rust
{"upload_size":52428800}
{"upload_size": 52428800}
[2m2026-03-20T05:03:57.678994Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.679092Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.679142Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.679323Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.679374Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.706746Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:57.706829Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Content-repository-config chosen.
[2m2026-03-20T05:03:57.706856Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting content repository config
(empty)
52428800
52428800
[2m2026-03-20T05:03:57.525854Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.525951Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.525992Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.526047Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.526086Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.553453Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:57.553529Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Content-repository-config chosen.
[2m2026-03-20T05:03:57.553555Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting content repository config
(empty)
{"device_id":"BAVGAIMKAB","display_name":"alice-deviceB-py","last_seen_ip":"","last_seen_ts":""}
{"device_id":"ISVVKWHXOM","display_name":"alice-deviceB-rs","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:03:48"}
{"device_id":"MRQOCPQKPU","display_name":"","last_seen_ip":"","last_seen_ts":""}
{"device_id":"NWVIECNUEK","display_name":"alice-deviceA-py","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:02:05"}
{"device_id":"RQRGWNGEJV","display_name":"alice-deviceA-rs","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:03:47"}
{"device_id":"TWPIOUBGAD","display_name":"","last_seen_ip":"","last_seen_ts":""}
(empty)
[2m2026-03-20T05:03:55.014055Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:55.014155Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:55.014307Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:55.014374Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:55.014415Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:55.036904Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:55.036978Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Devices chosen.
2026-03-20 05:02:50,210: ERROR: matrix-commander: E215: Error during room, set, get actions. Continuing despite error. Exception: can only concatenate str (not "NoneType") to str 2026-03-20 05:02:50,217: INFO: matrix-commander: 1 error and 0 warnings occurred.
BAVGAIMKAB alice-deviceB-py ISVVKWHXOM alice-deviceB-rs 127.0.0.1 2026-03-20 05:03:48 MRQOCPQKPU NWVIECNUEK alice-deviceA-py 127.0.0.1 2026-03-20 05:02:05 RQRGWNGEJV alice-deviceA-rs 127.0.0.1 2026-03-20 05:03:47 TWPIOUBGAD
(empty)
[2m2026-03-20T05:03:54.860394Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:54.860480Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:54.860520Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:54.860574Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:54.860618Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:54.883077Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:54.883149Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Devices chosen.
2026-03-20 05:02:47,805: ERROR: matrix-commander: E215: Error during room, set, get actions. Continuing despite error. Exception: can only concatenate str (not "NoneType") to str 2026-03-20 05:02:47,812: INFO: matrix-commander: 1 error and 0 warnings occurred.
{"homeserver_url":"http://localhost:8008","identity_server_url":null}
{"homeserver_url": "http://localhost:8008", "identity_server_url": null}
[2m2026-03-20T05:03:57.408579Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.408673Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.408714Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.408764Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.408801Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.435656Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:57.435731Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Discovery-info chosen.
[2m2026-03-20T05:03:57.435756Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting discovery info
(empty)
http://localhost:8008 None
http://localhost:8008 None
[2m2026-03-20T05:03:57.263162Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.263376Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.263419Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.263475Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.263516Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.288393Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:57.288470Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Discovery-info chosen.
[2m2026-03-20T05:03:57.288891Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting discovery info
(empty)
{"displayname":"Alice Test","user":"@alice:localhost"}
{"displayname": "Alice Test", "user": "@alice:localhost"}
[2m2026-03-20T05:03:56.539175Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.539375Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.539417Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.539473Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.539513Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.562788Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:56.562864Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-display-name chosen.
(empty)
@alice:localhost Alice Test
@alice:localhost Alice Test
[2m2026-03-20T05:03:56.380818Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.380906Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.380945Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.381002Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.381042Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.405952Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:56.406368Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-display-name chosen.
(empty)
{"displayname":"Alice Test","avatar_url":null,"avatar_http":null,"other_info":{}}
{"displayname": "Alice Test", "avatar_url": null, "other_info": {}, "avatar_http": null}
[2m2026-03-20T05:03:56.804955Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.805051Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.805091Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.805160Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.805325Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.832345Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:56.832422Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-profile chosen.
(empty)
Alice Test None None
Alice Test None None
[2m2026-03-20T05:03:56.643175Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.643382Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.643426Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.643480Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.643523Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.666345Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:56.666423Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-profile chosen.
(empty)
{"room_id":"!ROOM:localhost","own_user_id":"@alice:localhost","federate":true,"room_version":"10","room_type":"","guest_access":"can_join","join_rule":"invite","history_visibility":"shared","canonical_alias":"#test-room:localhost","topic":null,"name":null,"parents":{"set":"set()"},"children":{"set":"set()"},"users":{"@alice:localhost":{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null,"power_level":100,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null},"@bob:localhost":{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null,"power_level":0,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null}},"invited_users":{},"names":{"Alice Test":["@alice:localhost"],"bob":["@bob:localhost"]},"encrypted":false,"power_levels":{"defaults":{"ban":50,"invite":0,"kick":50,"redact":50,"state_default":50,"events_default":0,"users_default":0,"notifications":{"room":50}},"users":{"@alice:localhost":100},"events":{"m.room.avatar":50,"m.room.canonical_alias":50,"m.room.encryption":100,"m.room.history_visibility":100,"m.room.name":50,"m.room.power_levels":100,"m.room.server_acl":100,"m.room.tombstone":100}},"typing_users":[],"read_receipts":{},"threaded_read_receipts":{},"summary":{"invited_member_count":null,"joined_member_count":null,"heroes":null},"room_avatar_url":null,"fully_read_marker":null,"tags":{},"unread_notifications":2,"unread_highlights":0,"members_synced":false,"replacement_room":null,"display_name":"#test-room:localhost"}
{"room_id": "!ROOM:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2502, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 44740, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": null, "tags": {}, "unread_notifications": 1, "unread_highlights": 0, "members_synced": false, "replacement_room": null, "display_name": "#test-room:localhost"}
[2m2026-03-20T05:03:56.199646Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.199755Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.199797Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.199855Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.199894Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.223876Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:56.286979Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:56.287059Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-room-info chosen.
(empty)
!ROOM:localhost #test-room:localhost #test-room:localhost None False
!ROOM:localhost #test-room:localhost #test-room:localhost None False
[2m2026-03-20T05:03:56.006706Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.006793Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.006833Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.006885Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.006929Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.035044Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:56.126294Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:56.126780Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-room-info chosen.
(empty)
{"room_id":"!ROOM:localhost","members":[{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null},{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null}]}
{"members": [{"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null}, {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null}], "room_id": "!ROOM:localhost"}
[2m2026-03-20T05:03:55.809988Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:55.810081Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:55.810120Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:55.810172Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:55.810320Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:55.835904Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:55.917780Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:55.917899Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-members chosen.
(empty)
!ROOM:localhost
@alice:localhost Alice Test
@bob:localhost bob
!ROOM:localhost
@alice:localhost Alice Test
@bob:localhost bob
[2m2026-03-20T05:03:55.596736Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:55.596830Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:55.596870Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:55.596922Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:55.596963Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:55.623537Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:55.690833Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:55.691300Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-members chosen.
(empty)
{"rooms":["!ROOM:localhost","!ROOM:localhost","!ROOM:localhost"]}
{"rooms": ["!ROOM:localhost"]}
[2m2026-03-20T05:03:55.420068Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:55.420155Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:55.420192Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:55.420392Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:55.420437Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:55.447855Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:55.525146Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:55.525300Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-rooms chosen.
(empty)
!ROOM:localhost !ROOM:localhost !ROOM:localhost
!ROOM:localhost
[2m2026-03-20T05:03:55.157015Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:55.157103Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:55.157156Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:55.157346Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:55.157388Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:55.182996Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:55.346173Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:55.346772Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-rooms chosen.
(empty)
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!ROOM:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!ROOM:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!ROOM:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!ROOM:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!ROOM:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!ROOM:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!ROOM:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!ROOM:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!ROOM:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
[2m2026-03-20T05:03:59.444010Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:59.444104Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:59.444366Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:59.444443Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:59.444485Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:59.475098Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync due to --listen
[2m2026-03-20T05:03:59.475342Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Listen Tail chosen.
[2m2026-03-20T05:03:59.475383Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m mclient::listen_tail(): listen_self false, roomnames ["!JKdkeGjRQsKxAqCNIB:localhost"]
[2m2026-03-20T05:03:59.475411Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m Ready and getting messages from server ...
(empty)
Message received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:51 | hello from bob Message received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob notice Message received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob emote
Message received for room #test-room:localhost [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:19 | bob notice Message received for room #test-room:localhost [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:17 | hello from bob Message received for room #test-room:localhost [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:14 | Received room-member event: sender: @bob:localhost, operation: join
[2m2026-03-20T05:03:59.244759Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:59.244858Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:59.244899Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:59.244957Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:59.244997Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:59.271597Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync due to --listen
[2m2026-03-20T05:03:59.272040Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Listen Tail chosen.
[2m2026-03-20T05:03:59.272620Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m mclient::listen_tail(): listen_self false, roomnames ["!JKdkeGjRQsKxAqCNIB:localhost"]
[2m2026-03-20T05:03:59.273539Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m Ready and getting messages from server ...
(empty)
{"flows":["m.login.password","m.login.application_service"]}
{"flows": ["m.login.password", "m.login.application_service"]}
[2m2026-03-20T05:03:57.117937Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.118034Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.118077Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.118129Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.118172Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.139587Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:57.139669Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Login-info chosen.
[2m2026-03-20T05:03:57.139697Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting login info
(empty)
m.login.password m.login.application_service
m.login.password m.login.application_service
[2m2026-03-20T05:03:56.964311Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:56.964409Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:56.964450Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:56.964503Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:56.964547Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:56.986736Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:56.987050Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Login-info chosen.
[2m2026-03-20T05:03:56.987417Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting login info
(empty)
{"content_uri":"mxc://localhost/QpFwtVCZWwEYrjOjfHKnSUtT","decryption_dict":null}
(empty)
[2m2026-03-20T05:03:59.060175Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:59.060362Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:59.060402Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:59.060457Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:59.060494Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:59.082060Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:59.082146Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Media upload chosen.
usage: matrix-commander [--usage] [-h] [--manual] [--readme] [-d]
[--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL [DEBUG|INFO|WARNING|ERROR|CRITICAL ...]]
[--verbose] [--login PASSWORD|SSO] [--verify [EMOJI]]
[--logout ME|ALL] [-c CREDENTIALS_FILE]
[-s STORE_DIRECTORY] [-r ROOM [ROOM ...]]
[--room-default DEFAULT_ROOM]
[--room-create ROOM_ALIAS [ROOM_ALIAS ...]]
[--room-dm-create USER [USER ...]]
[--room-dm-create-allow-duplicates]
[--room-join ROOM [ROOM ...]]
[--room-leave ROOM [ROOM ...]]
[--room-forget ROOM [ROOM ...]]
[--room-invite ROOM [ROOM ...]]
[--room-ban ROOM [ROOM ...]]
[--room-unban ROOM [ROOM ...]]
[--room-kick ROOM [ROOM ...]] [-u USER [USER ...]]
[--user-login USER] [--name ROOM_NAME [ROOM_NAME ...]]
[--topic ROOM_TOPIC [ROOM_TOPIC ...]]
[--alias ROOM_ALIAS [ROOM_ALIAS ...]]
[-m TEXT [TEXT ...]] [-i IMAGE_FILE [IMAGE_FILE ...]]
[-a AUDIO_FILE [AUDIO_FILE ...]] [-f FILE [FILE ...]]
[-e MATRIX_JSON_OBJECT [MATRIX_JSON_OBJECT ...]] [-w]
[-z] [-k] [-j] [-p SEPARATOR] [--config CONFIG_FILE]
[--proxy PROXY] [-n] [--encrypted]
[-l [NEVER|ONCE|FOREVER|TAIL|ALL]] [-t [NUMBER]] [-y]
[--print-event-id]
[--download-media [DOWNLOAD_DIRECTORY]]
[--download-media-name SOURCE|CLEAN|EVENTID|TIME]
[--os-notify] [--set-device-name DEVICE_NAME]
[--set-display-name DISPLAY_NAME] [--get-display-name]
[--set-presence ONLINE|OFFLINE|UNAVAILABLE]
[--get-presence] [--upload FILE [FILE ...]]
[--download MXC_URI [MXC_URI ...]]
[--delete-mxc MXC_URI [MXC_URI ...]]
[--delete-mxc-before TIMESTAMP [TIMESTAMP ...]]
[--joined-rooms] [--joined-members ROOM [ROOM ...]]
[--joined-dm-rooms USER [USER ...]]
[--mxc-to-http MXC_URI [MXC_URI ...]] [--devices]
[--discovery-info] [--login-info]
[--content-repository-config]
[--rest REST_METHOD DATA URL [REST_METHOD DATA URL ...]]
[--set-avatar AVATAR_MXC_URI]
[--get-avatar [USER ...]] [--get-profile [USER ...]]
[--get-room-info [ROOM ...]] [--get-client-info]
[--has-permission ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc [ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc ...]]
[--import-keys FILE PASSPHRASE FILE PASSPHRASE]
[--export-keys FILE PASSPHRASE FILE PASSPHRASE]
[--room-set-alias ROOM_ALIAS ROOM [ROOM_ALIAS ROOM ...]]
[--room-resolve-alias ROOM_ALIAS [ROOM_ALIAS ...]]
[--room-delete-alias ROOM_ALIAS [ROOM_ALIAS ...]]
[--get-openid-token [USER ...]]
[--room-get-visibility [ROOM ...]]
[--room-get-state [ROOM ...]]
[--delete-device DEVICE [DEVICE ...]]
[--room-redact ROOM_ID EVENT_ID REASON [ROOM_ID EVENT_ID REASON ...]]
[--whoami] [--no-ssl]
[--ssl-certificate SSL_CERTIFICATE_FILE]
[--file-name FILE [FILE ...]]
[--key-dict KEY_DICTIONARY [KEY_DICTIONARY ...]]
[--plain] [--separator SEPARATOR]
[--access-token ACCESS_TOKEN] [--password PASSWORD]
[--homeserver HOMESERVER_URL] [--device DEVICE_NAME]
[--sync FULL|OFF] [-o TEXT|JSON|JSON-MAX|JSON-SPEC]
[--room-invites [LIST|JOIN|LIST+JOIN]]
[-v [PRINT|CHECK]]
matrix-commander: error: unrecognized arguments: --media-upload /tmp/mc-py-test/test-upload.txt
mxc://localhost/SsSiWnmRJzqmNmniBQNxahuW None
(empty)
[2m2026-03-20T05:03:58.887738Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:58.887832Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:58.887873Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:58.887929Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:58.887970Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:58.915328Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:58.915455Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Media upload chosen.
usage: matrix-commander [--usage] [-h] [--manual] [--readme] [-d]
[--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL [DEBUG|INFO|WARNING|ERROR|CRITICAL ...]]
[--verbose] [--login PASSWORD|SSO] [--verify [EMOJI]]
[--logout ME|ALL] [-c CREDENTIALS_FILE]
[-s STORE_DIRECTORY] [-r ROOM [ROOM ...]]
[--room-default DEFAULT_ROOM]
[--room-create ROOM_ALIAS [ROOM_ALIAS ...]]
[--room-dm-create USER [USER ...]]
[--room-dm-create-allow-duplicates]
[--room-join ROOM [ROOM ...]]
[--room-leave ROOM [ROOM ...]]
[--room-forget ROOM [ROOM ...]]
[--room-invite ROOM [ROOM ...]]
[--room-ban ROOM [ROOM ...]]
[--room-unban ROOM [ROOM ...]]
[--room-kick ROOM [ROOM ...]] [-u USER [USER ...]]
[--user-login USER] [--name ROOM_NAME [ROOM_NAME ...]]
[--topic ROOM_TOPIC [ROOM_TOPIC ...]]
[--alias ROOM_ALIAS [ROOM_ALIAS ...]]
[-m TEXT [TEXT ...]] [-i IMAGE_FILE [IMAGE_FILE ...]]
[-a AUDIO_FILE [AUDIO_FILE ...]] [-f FILE [FILE ...]]
[-e MATRIX_JSON_OBJECT [MATRIX_JSON_OBJECT ...]] [-w]
[-z] [-k] [-j] [-p SEPARATOR] [--config CONFIG_FILE]
[--proxy PROXY] [-n] [--encrypted]
[-l [NEVER|ONCE|FOREVER|TAIL|ALL]] [-t [NUMBER]] [-y]
[--print-event-id]
[--download-media [DOWNLOAD_DIRECTORY]]
[--download-media-name SOURCE|CLEAN|EVENTID|TIME]
[--os-notify] [--set-device-name DEVICE_NAME]
[--set-display-name DISPLAY_NAME] [--get-display-name]
[--set-presence ONLINE|OFFLINE|UNAVAILABLE]
[--get-presence] [--upload FILE [FILE ...]]
[--download MXC_URI [MXC_URI ...]]
[--delete-mxc MXC_URI [MXC_URI ...]]
[--delete-mxc-before TIMESTAMP [TIMESTAMP ...]]
[--joined-rooms] [--joined-members ROOM [ROOM ...]]
[--joined-dm-rooms USER [USER ...]]
[--mxc-to-http MXC_URI [MXC_URI ...]] [--devices]
[--discovery-info] [--login-info]
[--content-repository-config]
[--rest REST_METHOD DATA URL [REST_METHOD DATA URL ...]]
[--set-avatar AVATAR_MXC_URI]
[--get-avatar [USER ...]] [--get-profile [USER ...]]
[--get-room-info [ROOM ...]] [--get-client-info]
[--has-permission ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc [ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc ...]]
[--import-keys FILE PASSPHRASE FILE PASSPHRASE]
[--export-keys FILE PASSPHRASE FILE PASSPHRASE]
[--room-set-alias ROOM_ALIAS ROOM [ROOM_ALIAS ROOM ...]]
[--room-resolve-alias ROOM_ALIAS [ROOM_ALIAS ...]]
[--room-delete-alias ROOM_ALIAS [ROOM_ALIAS ...]]
[--get-openid-token [USER ...]]
[--room-get-visibility [ROOM ...]]
[--room-get-state [ROOM ...]]
[--delete-device DEVICE [DEVICE ...]]
[--room-redact ROOM_ID EVENT_ID REASON [ROOM_ID EVENT_ID REASON ...]]
[--whoami] [--no-ssl]
[--ssl-certificate SSL_CERTIFICATE_FILE]
[--file-name FILE [FILE ...]]
[--key-dict KEY_DICTIONARY [KEY_DICTIONARY ...]]
[--plain] [--separator SEPARATOR]
[--access-token ACCESS_TOKEN] [--password PASSWORD]
[--homeserver HOMESERVER_URL] [--device DEVICE_NAME]
[--sync FULL|OFF] [-o TEXT|JSON|JSON-MAX|JSON-SPEC]
[--room-invites [LIST|JOIN|LIST+JOIN]]
[-v [PRINT|CHECK]]
matrix-commander: error: unrecognized arguments: --media-upload /tmp/mc-py-test/test-upload.txt
$Rk9Kn9ndsEctYhoZr1LTwrTN7mJZ8z4soBpaDDj2csQ !ROOM:localhost print-event-id-test
$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE !ROOM:localhost print-event-id-test
[2m2026-03-20T05:03:54.367081Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:54.367315Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:54.367367Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:54.367420Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:54.367462Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:54.393390Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:54.547612Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:54.547730Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
2026-03-20 05:02:40,926: INFO: matrix-commander: This message was sent: "print-event-id-test" to room "!gyVMIvheyTptUwVFDk:localhost" as event "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE".
{"room_id":"!ROOM:localhost","alias":"test-json-room-rs","alias_full":"#test-json-room:localhost","name":null,"topic":null,"encrypted":false}
{"room_id": "!ROOM:localhost", "alias": "test-json-room-py", "alias_full": "#test-json-room:localhost", "name": null, "topic": null, "encrypted": false}
[2m2026-03-20T05:03:58.488520Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:58.488611Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:58.488651Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:58.488702Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:58.488744Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:58.514830Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:58.585815Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:58.585931Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-create chosen.
[2m2026-03-20T05:03:58.586003Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Creating a private unencrypted room.
2026-03-20 05:03:37,348: INFO: matrix-commander: Created room with room id "!XJaWhuiXJLxuIlkZOf:localhost", short alias "test-json-room-py", full alias "#test-json-room-py:localhost" and encrypted "False".
{"room_id":"!ROOM:localhost","visibility":"private"}
{"room_id": "!ROOM:localhost", "visibility": "private"}
[2m2026-03-20T05:03:57.976508Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.976603Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.976647Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.976697Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.976739Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:58.007331Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:58.061531Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:58.061659Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-get-visibility chosen.
2026-03-20 05:03:30,854: INFO: matrix-commander: Successfully got visibility for room !gyVMIvheyTptUwVFDk:localhost: private.
private !ROOM:localhost
private !ROOM:localhost
[2m2026-03-20T05:03:57.799671Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:57.799771Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:57.799816Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:57.799868Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:57.799909Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:57.824689Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:57.902474Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:57.903046Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-get-visibility chosen.
2026-03-20 05:03:28,993: INFO: matrix-commander: Successfully got visibility for room !gyVMIvheyTptUwVFDk:localhost: private.
{"room_alias":"#test-room:localhost","room_id":"!ROOM:localhost","servers":["localhost"]}
{"room_alias": "#test-room:localhost", "room_id": "!ROOM:localhost", "servers": ["localhost"]}
[2m2026-03-20T05:03:58.300936Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:58.301022Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:58.301063Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:58.301114Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:58.301174Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:58.325122Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:58.404861Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:58.404952Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-resolve-alias chosen.
[2m2026-03-20T05:03:58.416747Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Resolved room alias "#test-room-rs:localhost" successfully.
2026-03-20 05:03:35,074: INFO: matrix-commander: Successfully resolved room alias '#test-room-py:localhost' to !gyVMIvheyTptUwVFDk:localhost.
#test-room:localhost !ROOM:localhost ['localhost']
#test-room:localhost !ROOM:localhost ['localhost']
[2m2026-03-20T05:03:58.135089Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:58.135191Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:58.135341Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:58.135402Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:58.135442Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:58.162846Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:58.218446Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:58.218835Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-resolve-alias chosen.
[2m2026-03-20T05:03:58.227187Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Resolved room alias "#test-room-rs:localhost" successfully.
2026-03-20 05:03:33,019: INFO: matrix-commander: Successfully resolved room alias '#test-room-py:localhost' to !gyVMIvheyTptUwVFDk:localhost.
{"user_id": "@alice:localhost"}
{"user_id": "@alice:localhost"}
[2m2026-03-20T05:03:54.769676Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:54.769775Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:54.769816Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:54.769865Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:54.769907Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:54.792642Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:54.792682Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Whoami chosen.
(empty)
@alice:localhost
@alice:localhost
[2m2026-03-20T05:03:54.674790Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RQRGWNGEJV", room_id: "!JKdkeGjRQsKxAqCNIB:localhost", refresh_token: None }
[2m2026-03-20T05:03:54.674882Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:54.674923Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RQRGWNGEJV" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Domain("localhost")), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:54.674974Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:54.675015Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:54.699921Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:54.700400Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Whoami chosen.
(empty)
{"homeserver": "http://localhost:8008", "device_id": "RQRGWNGEJV", "user_id": "@alice:localhost", "room_id": "!JKdkeGjRQsKxAqCNIB:localhost", "access_token": "syt_YWxpY2U_eblpLGsDgTXeVcelRDqy_4eitLm"}
{"homeserver": "http://localhost:8008", "device_id": "NWVIECNUEK", "user_id": "@alice:localhost", "room_id": "!gyVMIvheyTptUwVFDk:localhost", "access_token": "syt_YWxpY2U_ApyqVEjNsnCBNmctfwhb_0648MI"}
{"homeserver": "http://localhost:8008", "device_id": "RQRGWNGEJV", "user_id": "@alice:localhost", "room_id": "!JKdkeGjRQsKxAqCNIB:localhost", "access_token": "syt_YWxpY2U_eblpLGsDgTXeVcelRDqy_4eitLm"}
{"homeserver": "http://localhost:8008", "device_id": "NWVIECNUEK", "user_id": "@alice:localhost", "room_id": "!gyVMIvheyTptUwVFDk:localhost", "access_token": "syt_YWxpY2U_ApyqVEjNsnCBNmctfwhb_0648MI"}
{"homeserver": "http://localhost:8008", "device_id": "RQRGWNGEJV", "user_id": "@alice:localhost", "room_id": "!JKdkeGjRQsKxAqCNIB:localhost", "access_token": "syt_YWxpY2U_eblpLGsDgTXeVcelRDqy_4eitLm"}
{"homeserver": "http://localhost:8008", "device_id": "NWVIECNUEK", "user_id": "@alice:localhost", "room_id": "!gyVMIvheyTptUwVFDk:localhost", "access_token": "syt_YWxpY2U_ApyqVEjNsnCBNmctfwhb_0648MI"}
{"user_id": "@alice:localhost"}
{"user_id": "@alice:localhost"}
{"device_id":"BAVGAIMKAB","display_name":"alice-deviceB-py","last_seen_ip":"","last_seen_ts":""}
{"device_id":"ISVVKWHXOM","display_name":"alice-deviceB-rs","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:03:48"}
{"device_id":"MRQOCPQKPU","display_name":"","last_seen_ip":"","last_seen_ts":""}
{"device_id":"NWVIECNUEK","display_name":"alice-deviceA-py","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:02:05"}
{"device_id":"RQRGWNGEJV","display_name":"alice-deviceA-rs","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:03:47"}
{"device_id":"TWPIOUBGAD","display_name":"","last_seen_ip":"","last_seen_ts":""}
(empty)
{"rooms":["!JKdkeGjRQsKxAqCNIB:localhost","!XJaWhuiXJLxuIlkZOf:localhost","!gyVMIvheyTptUwVFDk:localhost"]}
{"rooms": ["!gyVMIvheyTptUwVFDk:localhost"]}
{"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","members":[{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null},{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null}]}
{"members": [{"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null}, {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null}], "room_id": "!gyVMIvheyTptUwVFDk:localhost"}
{"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","own_user_id":"@alice:localhost","federate":true,"room_version":"10","room_type":"","guest_access":"can_join","join_rule":"invite","history_visibility":"shared","canonical_alias":"#test-room-rs:localhost","topic":null,"name":null,"parents":{"set":"set()"},"children":{"set":"set()"},"users":{"@alice:localhost":{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null,"power_level":100,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null},"@bob:localhost":{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null,"power_level":0,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null}},"invited_users":{},"names":{"Alice Test":["@alice:localhost"],"bob":["@bob:localhost"]},"encrypted":false,"power_levels":{"defaults":{"ban":50,"invite":0,"kick":50,"redact":50,"state_default":50,"events_default":0,"users_default":0,"notifications":{"room":50}},"users":{"@alice:localhost":100},"events":{"m.room.avatar":50,"m.room.canonical_alias":50,"m.room.encryption":100,"m.room.history_visibility":100,"m.room.name":50,"m.room.power_levels":100,"m.room.server_acl":100,"m.room.tombstone":100}},"typing_users":[],"read_receipts":{},"threaded_read_receipts":{},"summary":{"invited_member_count":null,"joined_member_count":null,"heroes":null},"room_avatar_url":null,"fully_read_marker":null,"tags":{},"unread_notifications":2,"unread_highlights":0,"members_synced":false,"replacement_room":null,"display_name":"#test-room-rs:localhost"}
{"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2502, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 44740, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": null, "tags": {}, "unread_notifications": 1, "unread_highlights": 0, "members_synced": false, "replacement_room": null, "display_name": "#test-room-py:localhost"}
{"displayname":"Alice Test","user":"@alice:localhost"}
{"displayname": "Alice Test", "user": "@alice:localhost"}
{"displayname":"Alice Test","avatar_url":null,"avatar_http":null,"other_info":{}}
{"displayname": "Alice Test", "avatar_url": null, "other_info": {}, "avatar_http": null}
{"flows":["m.login.password","m.login.application_service"]}
{"flows": ["m.login.password", "m.login.application_service"]}
{"homeserver_url":"http://localhost:8008","identity_server_url":null}
{"homeserver_url": "http://localhost:8008", "identity_server_url": null}
{"upload_size":52428800}
{"upload_size": 52428800}
{"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","visibility":"private"}
{"room_id": "!gyVMIvheyTptUwVFDk:localhost", "visibility": "private"}
{"room_alias":"#test-room-rs:localhost","room_id":"!JKdkeGjRQsKxAqCNIB:localhost","servers":["localhost"]}
{"room_alias": "#test-room-py:localhost", "room_id": "!gyVMIvheyTptUwVFDk:localhost", "servers": ["localhost"]}
{"room_id":"!uGpLONdClbyCetJAqJ:localhost","alias":"test-json-room-rs","alias_full":"#test-json-room-rs:localhost","name":null,"topic":null,"encrypted":false}
{"room_id": "!XJaWhuiXJLxuIlkZOf:localhost", "alias": "test-json-room-py", "alias_full": "#test-json-room-py:localhost", "name": null, "topic": null, "encrypted": false}
{"content_uri":"mxc://localhost/QpFwtVCZWwEYrjOjfHKnSUtT","decryption_dict":null}
(empty)
@alice:localhost
@alice:localhost
!JKdkeGjRQsKxAqCNIB:localhost !XJaWhuiXJLxuIlkZOf:localhost !gyVMIvheyTptUwVFDk:localhost
!gyVMIvheyTptUwVFDk:localhost
BAVGAIMKAB alice-deviceB-py ISVVKWHXOM alice-deviceB-rs 127.0.0.1 2026-03-20 05:03:48 MRQOCPQKPU NWVIECNUEK alice-deviceA-py 127.0.0.1 2026-03-20 05:02:05 RQRGWNGEJV alice-deviceA-rs 127.0.0.1 2026-03-20 05:03:47 TWPIOUBGAD
(empty)
$Rk9Kn9ndsEctYhoZr1LTwrTN7mJZ8z4soBpaDDj2csQ !JKdkeGjRQsKxAqCNIB:localhost print-event-id-test
$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE !gyVMIvheyTptUwVFDk:localhost print-event-id-test
m.login.password m.login.application_service
m.login.password m.login.application_service
52428800
52428800
http://localhost:8008 None
http://localhost:8008 None
@alice:localhost Alice Test
@alice:localhost Alice Test
private !JKdkeGjRQsKxAqCNIB:localhost
private !gyVMIvheyTptUwVFDk:localhost
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.text","body":"hello from bob"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983031786,"unsigned":{"membership":"join","age":7714},"event_id":"$Qi7cpCtRkWPA8OKfJTPWHeFxGk19JA4pDUf4DdqPNVg","user_id":"@bob:localhost","age":7714}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.notice","body":"bob notice"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032074,"unsigned":{"membership":"join","age":7426},"event_id":"$wwmYPtMrIYa4xX2d7FpkwbNX1mCHGHLpZ5zrHvXic84","user_id":"@bob:localhost","age":7426}
{"type":"m.room.message","sender":"@bob:localhost","content":{"msgtype":"m.emote","body":"bob emote"},"room_id":"!JKdkeGjRQsKxAqCNIB:localhost","origin_server_ts":1773983032356,"unsigned":{"membership":"join","age":7144},"event_id":"$3MCnUpH_RTfkuziaUvjmB4HFVwQeuv_cxtf6ocoxDx4","user_id":"@bob:localhost","age":7144}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.notice", "body": "bob notice"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982939783, "unsigned": {"membership": "join", "age": 85826}, "event_id": "$Zc0J6OkBWF1j9eiq40j8lxEVu9UVoDB2359V5XvDIvg", "user_id": "@bob:localhost", "age": 85826}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:19"}
{"source": {"type": "m.room.message", "sender": "@bob:localhost", "content": {"msgtype": "m.text", "body": "hello from bob"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "origin_server_ts": 1773982937558, "unsigned": {"membership": "join", "age": 88051}, "event_id": "$OyB1M2Q96H2wb6QWS8tKAekMF8OULwhRFTlj1yqMGHk", "user_id": "@bob:localhost", "age": 88051}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:17"}
{"source": {"type": "m.room.member", "sender": "@bob:localhost", "content": {"displayname": "bob", "membership": "join"}, "room_id": "!gyVMIvheyTptUwVFDk:localhost", "state_key": "@bob:localhost", "origin_server_ts": 1773982934436, "unsigned": {"replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}, "prev_sender": "@alice:localhost", "membership": "join", "age": 91173}, "event_id": "$yZ5p0zPqvOOxktElORfUMIxufd4nAl4ndaM-yS1Abwc", "user_id": "@bob:localhost", "age": 91173, "replaces_state": "$h3qqe8yCR2lb4WW8Fy1kuTCrJom2wuxwZieQqsUlDbA", "prev_content": {"displayname": "bob", "membership": "invite"}}, "room": {"room_id": "!gyVMIvheyTptUwVFDk:localhost", "own_user_id": "@alice:localhost", "federate": true, "room_version": "10", "room_type": "", "guest_access": "can_join", "join_rule": "invite", "history_visibility": "shared", "canonical_alias": "#test-room-py:localhost", "topic": null, "name": null, "parents": {"set": "set()"}, "children": {"set": "set()"}, "users": {"@alice:localhost": {"user_id": "@alice:localhost", "display_name": "Alice Test", "avatar_url": null, "power_level": 100, "invited": false, "presence": "online", "last_active_ago": 2052, "currently_active": true, "status_msg": null}, "@bob:localhost": {"user_id": "@bob:localhost", "display_name": "bob", "avatar_url": null, "power_level": 0, "invited": false, "presence": "offline", "last_active_ago": 85752, "currently_active": null, "status_msg": null}}, "invited_users": {}, "names": {"Alice Test": ["@alice:localhost"], "bob": ["@bob:localhost"]}, "encrypted": false, "power_levels": {"defaults": {"ban": 50, "invite": 0, "kick": 50, "redact": 50, "state_default": 50, "events_default": 0, "users_default": 0, "notifications": {"room": 50}}, "users": {"@alice:localhost": 100}, "events": {"m.room.name": 50, "m.room.power_levels": 100, "m.room.history_visibility": 100, "m.room.canonical_alias": 50, "m.room.avatar": 50, "m.room.tombstone": 100, "m.room.server_acl": 100, "m.room.encryption": 100}}, "typing_users": [], "read_receipts": {"@alice:localhost": {"event_id": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "receipt_type": "m.read", "user_id": "@alice:localhost", "timestamp": 1773983023539, "thread_id": null}}, "threaded_read_receipts": {}, "summary": {"invited_member_count": null, "joined_member_count": null, "heroes": null}, "room_avatar_url": null, "fully_read_marker": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE", "tags": {}, "unread_notifications": 0, "unread_highlights": 0, "members_synced": false, "replacement_room": null}, "room_display_name": "#test-room-py:localhost", "sender_nick": "bob", "event_datetime": "2026-03-20 05:02:14"}
Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:51 | hello from bob Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob notice Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob emote
Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:19 | bob notice Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:17 | hello from bob Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:14 | Received room-member event: sender: @bob:localhost, operation: join
Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:51 | hello from bob Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob notice Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob emote
Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:19 | bob notice Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:17 | hello from bob Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:14 | Received room-member event: sender: @bob:localhost, operation: join
Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:51 | hello from bob Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob notice Message received for room test-room-rs [!JKdkeGjRQsKxAqCNIB:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob emote
Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:19 | bob notice Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:17 | hello from bob Message received for room #test-room-py:localhost [!gyVMIvheyTptUwVFDk:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:14 | Received room-member event: sender: @bob:localhost, operation: join
[2m2026-03-20T05:01:53.510016Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Parameters for login are: Some(Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }) Some("@alice:localhost") "******" Some("alice-deviceA") Some("!placeholder:localhost")
[2m2026-03-20T05:01:53.525008Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:53.529018Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:55.267672Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m device id = RWUNQQFLIW
[2m2026-03-20T05:01:55.268016Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m credentials file = "./credentials.json"
[2m2026-03-20T05:01:55.271746Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:01:55.827770Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
PASS: alice deviceA login[2m2026-03-20T05:01:55.958370Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Parameters for login are: Some(Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }) Some("@alice:localhost") "******" Some("alice-deviceB") Some("!placeholder:localhost")
[2m2026-03-20T05:01:55.958511Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:55.958628Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:56.673128Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m device id = MUVRMLFKAW
[2m2026-03-20T05:01:56.673190Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m credentials file = "./credentials.json"
[2m2026-03-20T05:01:56.673531Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:01:56.974947Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
PASS: alice deviceB login[2m2026-03-20T05:01:57.067230Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Parameters for login are: Some(Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }) Some("@bob:localhost") "******" Some("bob-device") Some("!placeholder:localhost")
[2m2026-03-20T05:01:57.067379Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:57.067448Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:57.785694Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m device id = MWSPKZABSD
[2m2026-03-20T05:01:57.785734Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m credentials file = "./credentials.json"
[2m2026-03-20T05:01:57.786123Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:01:58.134297Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
PASS: bob loginVERSION= _| _| _|_|_| matrix-commander-ng _|_| _|_| _| _~^~^~_ a rusty vision of a Matrix CLI client _| _| _| _| \) / o o \ (/ version 1.0.0 _| _| _| '_ - _' repo https://github.com/longregen/matrix-commander-ng _| _| _|_|_| / '-----' \ please submit PRs to make the vision a reality PASS: version check
WHOAMI=[2m2026-03-20T05:01:58.263390Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:01:58.263971Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:01:58.265085Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:01:58.265627Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:58.265695Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:58.315474Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:01:58.315929Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Whoami chosen.
@alice:localhost
PASS: whoamiROOM_CREATE=[2m2026-03-20T05:01:58.426276Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:01:58.426415Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:01:58.426466Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:01:58.426586Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:58.426657Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:58.457791Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:01:58.574774Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:01:58.575356Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-create chosen.
[2m2026-03-20T05:01:58.577070Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Creating a private unencrypted room.
!EfHxGsGGpotvlpnlne:localhost test-room-rs False
ROOM_ID=!EfHxGsGGpotvlpnlne:localhost
PASS: create room - got room !EfHxGsGGpotvlpnlne:localhostSEND=[2m2026-03-20T05:01:59.341412Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:01:59.341538Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:01:59.341771Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:01:59.341909Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:01:59.341950Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:01:59.382075Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:01:59.824012Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:01:59.825070Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: send messageDEVICES=[2m2026-03-20T05:02:00.083494Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:00.083687Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:00.083744Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:00.083939Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:00.084017Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:00.160609Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:00.160721Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Devices chosen.
KLFKSKUJGI
MUVRMLFKAW alice-deviceB 127.0.0.1 2026-03-20 05:01:56
RWUNQQFLIW alice-deviceA 127.0.0.1 2026-03-20 05:01:55
VXASBSKGFX
PASS: list devices (found alice-deviceA)DISPLAY_NAME=[2m2026-03-20T05:02:00.288348Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:00.288467Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:00.288533Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:00.288679Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:00.288737Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:00.322003Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:00.322483Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-display-name chosen.
@alice:localhost alice
PASS: get display name (non-empty output)SET_DISPLAY_NAME=[2m2026-03-20T05:02:00.431586Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:00.431701Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:00.431760Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:00.431960Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:00.432031Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:00.460787Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:00.461031Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Set-display-name chosen.
DISPLAY_NAME_VERIFY=[2m2026-03-20T05:02:00.718701Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:00.718980Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:00.719071Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:00.719184Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:00.719255Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:00.755238Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:00.755341Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-display-name chosen.
@alice:localhost Alice Test
PASS: set display name (round-trip verified)JOINED_ROOMS=[2m2026-03-20T05:02:00.914532Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:00.914677Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:00.914739Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:00.914947Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:00.915014Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:00.949728Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:01.162639Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:01.163631Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-rooms chosen.
!EfHxGsGGpotvlpnlne:localhost
PASS: joined rooms (has room IDs)BOOTSTRAP=[2m2026-03-20T05:02:01.263040Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:01.263130Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:01.263173Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:01.263243Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:01.263312Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:01.298446Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:01.355143Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:01.356250Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Bootstrap chosen.
PASS: bootstrap cross-signing
VERIFY=[2m2026-03-20T05:02:01.609330Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:01.609444Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:01.609504Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:01.609646Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:01.609708Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:01.650216Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:01.899978Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:01.900625Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Verify chosen.
[2m2026-03-20T05:02:01.946451Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully verified device "MUVRMLFKAW" in one direction.
[2m2026-03-20T05:02:01.966269Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully verified device "RWUNQQFLIW" in one direction.
PASS: manual device verificationINVITE=[2m2026-03-20T05:02:02.189482Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:02.189659Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:02.189710Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:02.189776Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:02.189927Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:02.224935Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:02.476784Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:02.477949Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-invite chosen.
[2m2026-03-20T05:02:02.624484Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Invited user "@bob:localhost" to room "!EfHxGsGGpotvlpnlne:localhost" successfully.
PASS: invite bobBOB_JOIN=[2m2026-03-20T05:02:02.723110Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:02.723230Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:02.723282Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:02.723370Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:02.723438Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:02.768764Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:02.905462Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:02.905642Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-join chosen.
[2m2026-03-20T05:02:03.059795Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Joined room "!EfHxGsGGpotvlpnlne:localhost" successfully.
PASS: bob joinBOB_SEND=[2m2026-03-20T05:02:03.153193Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:03.153310Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:03.153349Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:03.153408Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:03.153445Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:03.195592Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:03.423730Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:03.423952Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: bob sendLISTEN=[2m2026-03-20T05:02:03.699441Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:03.699592Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:03.699654Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:03.699738Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:03.699802Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:03.740765Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync due to --listen
[2m2026-03-20T05:02:03.741480Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Listen Tail chosen.
[2m2026-03-20T05:02:03.742160Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m mclient::listen_tail(): listen_self false, roomnames ["!EfHxGsGGpotvlpnlne:localhost"]
[2m2026-03-20T05:02:03.743955Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m Ready and getting messages from server ...
Message received for room test-room-rs [!EfHxGsGGpotvlpnlne:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:03 | Hello from Bob!
PASS: listen tail (contains bob's message)PRINT_EVENT_ID=[2m2026-03-20T05:02:04.112791Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:04.112965Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:04.113006Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:04.113058Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:04.113096Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:04.151997Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:04.430153Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:04.430303Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
$DY399faINro65a6v7A1yH7P_zdSinGIQZXLD4V2SiII !EfHxGsGGpotvlpnlne:localhost test-print-event-id
PASS: print-event-id (has event_id + room_id + message)DEVICES_JSON=[2m2026-03-20T05:02:04.608169Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:04.608324Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:04.608384Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:04.608492Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:04.608562Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:04.653083Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:04.653192Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Devices chosen.
{"device_id":"KLFKSKUJGI","display_name":"","last_seen_ip":"","last_seen_ts":""}
{"device_id":"MUVRMLFKAW","display_name":"alice-deviceB","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:01:56"}
{"device_id":"RWUNQQFLIW","display_name":"alice-deviceA","last_seen_ip":"127.0.0.1","last_seen_ts":"2026-03-20 05:01:55"}
{"device_id":"VXASBSKGFX","display_name":"","last_seen_ip":"","last_seen_ts":""}
PASS: devices JSON has last_seen_ipROOM_CREATE_JSON=[2m2026-03-20T05:02:04.767656Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:04.767774Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:04.767952Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:04.768059Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:04.768122Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:04.806705Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:05.018541Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:05.018716Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-create chosen.
[2m2026-03-20T05:02:05.018780Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Creating a private unencrypted room.
{"room_id":"!GVzQCkWGfAliCgghMG:localhost","alias":"test-json-room-rs","alias_full":"#test-json-room-rs:localhost","name":null,"topic":null,"encrypted":false}
PASS: room create JSON has alias_fullGET_ROOM_INFO_JSON=[2m2026-03-20T05:02:05.519935Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:05.520082Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:05.520136Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:05.520223Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:05.520273Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:05.559232Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:05.888180Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:05.889008Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-room-info chosen.
{"room_id":"!EfHxGsGGpotvlpnlne:localhost","own_user_id":"@alice:localhost","federate":true,"room_version":"10","room_type":"","guest_access":"can_join","join_rule":"invite","history_visibility":"shared","canonical_alias":"#test-room-rs:localhost","topic":null,"name":null,"parents":{"set":"set()"},"children":{"set":"set()"},"users":{"@alice:localhost":{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null,"power_level":100,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null},"@bob:localhost":{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null,"power_level":0,"invited":false,"presence":"offline","last_active_ago":null,"currently_active":null,"status_msg":null}},"invited_users":{},"names":{"Alice Test":["@alice:localhost"],"bob":["@bob:localhost"]},"encrypted":false,"power_levels":{"defaults":{"ban":50,"invite":0,"kick":50,"redact":50,"state_default":50,"events_default":0,"users_default":0,"notifications":{"room":50}},"users":{"@alice:localhost":100},"events":{"m.room.avatar":50,"m.room.canonical_alias":50,"m.room.encryption":100,"m.room.history_visibility":100,"m.room.name":50,"m.room.power_levels":100,"m.room.server_acl":100,"m.room.tombstone":100}},"typing_users":[],"read_receipts":{},"threaded_read_receipts":{},"summary":{"invited_member_count":null,"joined_member_count":null,"heroes":null},"room_avatar_url":null,"fully_read_marker":null,"tags":{},"unread_notifications":1,"unread_highlights":0,"members_synced":false,"replacement_room":null,"display_name":"#test-room-rs:localhost"}
PASS: get-room-info JSON has encrypted fieldDISCOVERY_INFO=[2m2026-03-20T05:02:06.039267Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:06.039377Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:06.039420Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:06.039509Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:06.039621Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:06.079304Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:06.079415Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Discovery-info chosen.
[2m2026-03-20T05:02:06.079750Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting discovery info
http://127.0.0.1:8008 None
PASS: discovery info shows homeserverLOGIN_INFO=[2m2026-03-20T05:02:06.190980Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:06.191083Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:06.191123Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:06.191186Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:06.191256Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:06.228783Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:06.229379Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Login-info chosen.
[2m2026-03-20T05:02:06.229797Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting login info
m.login.sso
m.login.token
m.login.password
m.login.application_service
PASS: login info shows password flowCONTENT_REPO_CONFIG=[2m2026-03-20T05:02:06.341498Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:06.341651Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:06.341717Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:06.341803Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:06.341997Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:06.367068Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:06.367183Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Content-repository-config chosen.
[2m2026-03-20T05:02:06.367223Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting content repository config
52428800
PASS: content-repository-config shows upload sizeJOINED_MEMBERS_JSON={"room_id":"!EfHxGsGGpotvlpnlne:localhost","members":[{"user_id":"@alice:localhost","display_name":"Alice Test","avatar_url":null},{"user_id":"@bob:localhost","display_name":"bob","avatar_url":null}]}
PASS: joined members JSON has room_id and membersGET_PROFILE=[2m2026-03-20T05:02:06.970254Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:06.970420Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:06.970486Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:06.970605Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:06.970654Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:07.012449Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:07.012709Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-profile chosen.
Alice Test None None
PASS: get profile (contains display name)GET_OPENID_TOKEN=[2m2026-03-20T05:02:07.123985Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:07.124067Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:07.124107Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:07.124161Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:07.124214Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:07.165412Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:07.165506Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-openid-token chosen.
[2m2026-03-20T05:02:07.166052Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting OpenID token
@alice:localhost KMQQmWxpNzhrnvIbpdhNGFrl 3600 localhost Bearer
PASS: get-openid-token has expected fieldsGET_CLIENT_INFO={
"user_id": "@alice:localhost",
"device_id": "RWUNQQFLIW",
"homeserver": "http://127.0.0.1:8008",
"room_id": "!EfHxGsGGpotvlpnlne:localhost",
"access_token": "syt_...r5XM",
"rooms": [
"!GVzQCkWGfAliCgghMG:localhost",
"!EfHxGsGGpotvlpnlne:localhost"
]
}
PASS: get-client-info JSON has user_id + device_idROOM_SET_ALIAS=[2m2026-03-20T05:02:07.536490Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:07.536660Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:07.536732Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:07.536943Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:07.537016Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:07.579067Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:07.665673Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:07.666368Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-set-alias chosen.
[2m2026-03-20T05:02:07.667410Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Setting room alias
[2m2026-03-20T05:02:07.681341Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully added alias '#test-alias-rs:localhost' to room '!EfHxGsGGpotvlpnlne:localhost'.
ROOM_RESOLVE_ALIAS=[2m2026-03-20T05:02:07.802326Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:07.802452Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:07.802504Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:07.802619Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:07.802701Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:07.833754Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:07.916914Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:07.917442Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-resolve-alias chosen.
[2m2026-03-20T05:02:07.932113Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Resolved room alias "#test-alias-rs:localhost" successfully.
#test-alias-rs:localhost !EfHxGsGGpotvlpnlne:localhost ['localhost']
PASS: room-resolve-alias returns room IDHAS_PERMISSION=[2m2026-03-20T05:02:08.176610Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:08.176768Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:08.176967Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:08.177074Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:08.177167Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:08.216081Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:08.292776Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:08.294034Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Has-permission chosen.
True @alice:localhost !EfHxGsGGpotvlpnlne:localhost ban
PASS: has-permission (alice has ban permission)ROOM_GET_VISIBILITY=[2m2026-03-20T05:02:08.531224Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:08.531338Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:08.531395Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:08.531512Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:08.531607Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:08.564080Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:08.633048Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:08.633202Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-get-visibility chosen.
private !EfHxGsGGpotvlpnlne:localhost
PASS: room-get-visibility (shows visibility status)ROOM_GET_STATE=[2m2026-03-20T05:02:08.875953Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:08.876082Z[0m [32m INFO[0m
PASS: room-get-state (got output)REST=[2m2026-03-20T05:02:09.106505Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:09.106657Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:09.106716Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:09.106793Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:09.106947Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:09.143465Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:09.144624Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m REST chosen.
{"versions":["r0.0.1","r0.1.0","r0.2.0","r0.3.0","r0.4.0","r0.5.0","r0.6.0","r0.6.1","v1.1","v1.2","v1.3","v1.4","v1.5","v1.6","v1.7","v1.8","v1.9","v1.10","v1.11","v1.12"],"unstable_features":{"org.matrix.label_based_filtering":true,"org.matrix.e2e_cross_signing":true,"org.matrix.msc2432":true,"uk.half-shot.msc2666.query_mutual_rooms":false,"io.element.e2ee_forced.public":false,"io.element.e2ee_forced.private":false,"io.element.e2ee_forced.trusted_private":false,"org.matrix.msc3026.busy_presence":false,"org.matrix.msc2285.stable":true,"org.matrix.msc3827.stable":true,"org.matrix.msc3440.stable":true,"org.matrix.msc3771":true,"org.matrix.msc3773":false,"fi.mau.msc2815":false,"fi.mau.msc2659.stable":true,"org.matrix.msc3882":false,"org.matrix.msc3881":false,"org.matrix.msc3874":false,"org.matrix.msc3912":false,"org.matrix.msc3981":true,"org.matrix.msc3391":false,"org.matrix.msc4069":false,"org.matrix.msc4028":false,"org.matrix.msc4108":false,"io.element.msc4388":false,"org.matrix.msc4140":false,"org.matrix.simplified_msc3575":true,"uk.tcpip.msc4133":false,"uk.tcpip.msc4133.stable":true,"org.matrix.msc4155":false,"org.matrix.msc4306":false,"com.beeper.msc4169":false,"org.matrix.msc4354":false,"org.matrix.msc4380.stable":true}}
PASS: REST API /_matrix/client/versionsLISTEN_CONTENT=[2m2026-03-20T05:02:09.408664Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:09.408815Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:09.408963Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:09.409045Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:09.409119Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:09.445419Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync due to --listen
[2m2026-03-20T05:02:09.445584Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Listen Tail chosen.
[2m2026-03-20T05:02:09.445644Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m mclient::listen_tail(): listen_self false, roomnames ["!EfHxGsGGpotvlpnlne:localhost"]
[2m2026-03-20T05:02:09.445685Z[0m [32m INFO[0m [2mmatrix_commander_ng::listen[0m[2m:[0m Ready and getting messages from server ...
Message received for room test-room-rs [!EfHxGsGGpotvlpnlne:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:03 | Hello from Bob!
PASS: listen tail content (alice's own message filtered — expected)
PASS: listen tail content (bob's message found)LIFECYCLE_ROOM=!StfYTMjTomeGUFDsQU:localhost
PASS: lifecycle room created: !StfYTMjTomeGUFDsQU:localhost
[2m2026-03-20T05:02:10.227148Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:10.227276Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:10.227322Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:10.227378Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:10.227422Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:10.259062Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:10.546646Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:10.546788Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-invite chosen.
[2m2026-03-20T05:02:10.621515Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Invited user "@bob:localhost" to room "!StfYTMjTomeGUFDsQU:localhost" successfully.
[2m2026-03-20T05:02:10.698264Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:10.698414Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:10.698488Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:10.698597Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:10.698669Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:10.744487Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:10.964530Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:10.964688Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-join chosen.
[2m2026-03-20T05:02:11.075762Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Joined room "!StfYTMjTomeGUFDsQU:localhost" successfully.BAN=[2m2026-03-20T05:02:11.152767Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:11.153001Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:11.153066Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:11.153144Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:11.153212Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:11.192616Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:11.466065Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:11.466221Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-ban chosen.
[2m2026-03-20T05:02:11.560080Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Banned user "@bob:localhost" from room "!StfYTMjTomeGUFDsQU:localhost" successfully.
PASS: room-ban (bob removed from members)UNBAN=[2m2026-03-20T05:02:12.111488Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:12.111673Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:12.111743Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:12.111924Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:12.111987Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:12.151331Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:12.252742Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:12.253177Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-unban chosen.
[2m2026-03-20T05:02:12.354591Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Unbanned user "@bob:localhost" from room "!StfYTMjTomeGUFDsQU:localhost" successfully.
PASS: room-unban (bob re-invited successfully)
[2m2026-03-20T05:02:12.929602Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:12.929758Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:12.929955Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:12.930062Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:12.930119Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:12.964093Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:13.187032Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:13.187147Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-join chosen.
[2m2026-03-20T05:02:13.296180Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Joined room "!StfYTMjTomeGUFDsQU:localhost" successfully.KICK=[2m2026-03-20T05:02:13.374450Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:13.374593Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:13.374653Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:13.374740Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:13.374798Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:13.408567Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:13.688067Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:13.688215Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-kick chosen.
[2m2026-03-20T05:02:13.762750Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Kicked user "@bob:localhost" from room "!StfYTMjTomeGUFDsQU:localhost" successfully.
PASS: room-kick (bob removed from members)
[2m2026-03-20T05:02:14.270458Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:14.270646Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:14.270717Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:14.270806Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:14.270995Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:14.309724Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:14.522934Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:14.523038Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-join chosen.
[2m2026-03-20T05:02:14.584148Z[0m [31mERROR[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Error: failed to room "!StfYTMjTomeGUFDsQU:localhost". join_room_by_id() returned error Http(Api(Server(ClientApi(Error { status_code: 403, body: Standard(StandardErrorBody { kind: Forbidden { authenticate: None }, message: "You are not invited to this room." }) })))).
[2m2026-03-20T05:02:14.585052Z[0m [31mERROR[0m [2mmatrix_commander_ng[0m[2m:[0m Error: room_join reported Join Room Failed
[2m2026-03-20T05:02:14.639365Z[0m [31mERROR[0m [2mmatrix_commander_ng[0m[2m:[0m Encountered 1 error.
Error: JoinRoomFailedLEAVE=[2m2026-03-20T05:02:14.664656Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:14.664797Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:14.664998Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:14.665120Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:14.665189Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:14.699790Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:14.775165Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:14.775319Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-leave chosen.
[2m2026-03-20T05:02:14.776363Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Left room "!StfYTMjTomeGUFDsQU:localhost" successfully.
PASS: room-leave (room no longer in bob's joined rooms)FORGET= PASS: room-forget (no error)
DM_CREATE=[2m2026-03-20T05:02:15.336475Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:15.336653Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:15.336706Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:15.336765Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:15.336806Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:15.377651Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:15.447103Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:15.460002Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-dm-create chosen.
!UGVQcOldLhuWAqbMLX:localhost False
PASS: room-dm-create: !UGVQcOldLhuWAqbMLX:localhost[2m2026-03-20T05:02:16.706151Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:16.706297Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:16.706363Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:16.706434Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:16.706486Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:16.744635Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:17.103126Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:17.103274Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-enable-encryption chosen.
PASS: room-enable-encryption[2m2026-03-20T05:02:20.296668Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:20.296954Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:20.297014Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:20.297071Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:20.297127Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:20.333052Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:20.656379Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:20.656531Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-set-alias chosen.
[2m2026-03-20T05:02:20.656597Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Setting room alias
[2m2026-03-20T05:02:20.676165Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully added alias '#del-test-alias:localhost' to room '!EfHxGsGGpotvlpnlne:localhost'.
[2m2026-03-20T05:02:20.999756Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:20.999987Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:21.000050Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:21.000115Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:21.000156Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:21.034115Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:21.116540Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:21.117168Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-delete-alias chosen.
[2m2026-03-20T05:02:21.117633Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Deleting room alias
[2m2026-03-20T05:02:21.127430Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully deleted room alias '#del-test-alias:localhost'.
PASS: room-delete-alias (alias no longer resolves)MEDIA_UPLOAD=[2m2026-03-20T05:02:21.498421Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:21.498592Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:21.498666Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:21.498774Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:21.499002Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:21.542563Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:21.542689Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Media upload chosen.
mxc://localhost/nnAWUrZkgipBnVKjDyUeejfZ None
PASS: media-upload (got mxc://localhost/nnAWUrZkgipBnVKjDyUeejfZ)MXC_TO_HTTP=[2m2026-03-20T05:02:21.701997Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:21.702123Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:21.702182Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:21.702256Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:21.702314Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:21.740462Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:21.740542Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Media mxc_to_http chosen.
mxc://localhost/nnAWUrZkgipBnVKjDyUeejfZ http://localhost/_matrix/media/r0/download/localhost/nnAWUrZkgipBnVKjDyUeejfZ
PASS: media-mxc-to-http (got HTTP URL)[2m2026-03-20T05:02:21.860395Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:21.860517Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:21.860601Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:21.860658Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:21.860700Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:21.897318Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:21.898053Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Media download chosen.
PASS: media-download (content matches)MARKDOWN=[2m2026-03-20T05:02:22.162655Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:22.162799Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:22.162989Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:22.163085Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:22.163149Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:22.205673Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:22.312449Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:22.312639Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: markdown message sentHTML=[2m2026-03-20T05:02:22.490709Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:22.490975Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:22.491041Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:22.491121Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:22.491169Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:22.530093Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:22.795233Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:22.795379Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: html message sentCODE=[2m2026-03-20T05:02:22.971338Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:22.971472Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:22.971538Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:22.971659Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:22.971722Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:23.014442Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:23.298806Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:23.299104Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: code message sentNOTICE=[2m2026-03-20T05:02:23.472129Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:23.472237Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:23.472298Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:23.472358Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:23.472400Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:23.515097Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:23.817542Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:23.817728Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: notice message sentEMOTE=[2m2026-03-20T05:02:24.000433Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:24.000613Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:24.000686Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:24.000794Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:24.000984Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:24.034390Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:24.336692Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:24.336976Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
PASS: emote message sentFILE_SEND=[2m2026-03-20T05:02:24.515504Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:24.515686Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:24.515749Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:24.515984Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:24.516053Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:24.563077Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:24.868040Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:24.868637Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m File chosen.
PASS: file send[2m2026-03-20T05:02:25.092683Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:25.092940Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:25.093018Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:25.093108Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:25.093172Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:25.129683Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:25.129809Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Set-device-name chosen.
[2m2026-03-20T05:02:25.130510Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Setting device display name to "Test Device Alice A"
DEVICES_AFTER_RENAME=[2m2026-03-20T05:02:25.236004Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:25.236099Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:25.236138Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:25.236196Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:25.236285Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:25.271239Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:25.271356Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Devices chosen.
KLFKSKUJGI
MUVRMLFKAW alice-deviceB 127.0.0.1 2026-03-20 05:01:56
RWUNQQFLIW Test Device Alice A 127.0.0.1 2026-03-20 05:01:55
VXASBSKGFX
PASS: set-device-name (verified in --devices)GET_PRESENCE=[2m2026-03-20T05:02:25.375104Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:25.375234Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:25.375305Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:25.375387Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:25.375457Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:25.412210Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:25.412654Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-presence chosen.
[2m2026-03-20T05:02:25.413022Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Getting presence
@alice:localhost online 451 True
PASS: get-presence (shows status)SET_PRESENCE=[2m2026-03-20T05:02:25.536183Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:25.536345Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:25.536408Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:25.536513Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:25.536605Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:25.578450Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:25.579166Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Set-presence chosen.
[2m2026-03-20T05:02:25.579491Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Setting presence to Online
PASS: set-presence online (no error)ALL_ROOMS=[2m2026-03-20T05:02:25.699464Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:25.699642Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:25.699707Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:25.699795Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:25.699975Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:25.730065Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:26.046384Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:26.046512Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Rooms chosen.
!EfHxGsGGpotvlpnlne:localhost
!GVzQCkWGfAliCgghMG:localhost
!StfYTMjTomeGUFDsQU:localhost
!UGVQcOldLhuWAqbMLX:localhost
!ZcUSlLSjlwkkeovRNZ:localhost
PASS: rooms (lists room IDs)LEFT_ROOMS=[2m2026-03-20T05:02:26.144113Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:26.144191Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:26.144230Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:26.144283Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:26.144347Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:26.189059Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:26.397051Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:26.397723Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Left-rooms chosen.
PASS: left-rooms (output captured)JOINED_DM_ROOMS=[2m2026-03-20T05:02:26.494333Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:26.494442Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:26.494506Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:26.494618Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:26.494686Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:26.535047Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:26.635536Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:26.635709Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Joined-dm-rooms chosen.
@bob:localhost !EfHxGsGGpotvlpnlne:localhost @alice:localhost Alice Test @bob:localhost bob
PASS: joined-dm-rooms (shows DM room IDs)[2m2026-03-20T05:02:27.351767Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:27.351961Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:27.352025Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:27.352119Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:27.352180Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:27.380780Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:27.743230Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:27.743356Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-invite chosen.
[2m2026-03-20T05:02:27.833109Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Invited user "@bob:localhost" to room "!BHablmGMyKdCMMJhBJ:localhost" successfully.
ROOM_INVITES=[2m2026-03-20T05:02:27.914100Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@bob:localhost", access_token: "***", device_id: "MWSPKZABSD", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:02:27.914213Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:27.914279Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MWSPKZABSD" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:27.914370Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:27.914433Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:27.949352Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:28.170698Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:28.171418Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-invites chosen.
!UGVQcOldLhuWAqbMLX:localhost m.room.member invite
!BHablmGMyKdCMMJhBJ:localhost m.room.member invite
PASS: room-invites list (shows pending invite)EVENT_TO_REDACT=$wNhsjAm9eITDp8ZtLEYwpd4PJ6lKo_AjHGk8bowDjGQ
REDACT=[2m2026-03-20T05:02:28.905607Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:28.905760Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:28.905923Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:28.905999Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:28.906047Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:28.952509Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:02:29.289179Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:02:29.289328Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Room-redact chosen.
[2m2026-03-20T05:02:29.372755Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully redacted event $wNhsjAm9eITDp8ZtLEYwpd4PJ6lKo_AjHGk8bowDjGQ in room !EfHxGsGGpotvlpnlne:localhost with reason 'test redaction'.
PASS: room-redact (no error)[2m2026-03-20T05:02:29.469291Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:29.469411Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:29.469475Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:29.469586Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:29.469650Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:29.508990Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:29.509118Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Export-keys chosen.
[2m2026-03-20T05:02:29.510229Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Exporting room keys to "/tmp/exported-keys.txt"
[2m2026-03-20T05:02:48.684004Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully exported keys to file /tmp/exported-keys.txt.
PASS: export-keys (file created)IMPORT_KEYS=[2m2026-03-20T05:02:48.765707Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:02:48.765963Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:02:48.766022Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:02:48.766141Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:02:48.766208Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:02:48.809333Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:02:48.809460Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Import-keys chosen.
[2m2026-03-20T05:02:48.809630Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Importing room keys from "/tmp/exported-keys.txt"
[2m2026-03-20T05:03:07.790955Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Successfully imported keys from file /tmp/exported-keys.txt.
PASS: import-keys (no error)MASTERKEY=[2m2026-03-20T05:03:07.886071Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:03:07.886182Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:07.886224Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:07.886280Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:07.886320Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:07.925946Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Skipping sync: no commands require room state.
[2m2026-03-20T05:03:07.926155Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Get-masterkey chosen.
masterkey: jvKktXnkZnXkTQl++TrDujDoaNsRP99cZS0XI6K2fXA
PASS: get-masterkey (non-empty output)GET_AVATAR_URL= PASS: get-avatar-url (no avatar set — expected)
BAD_ROOM=[2m2026-03-20T05:03:08.180774Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "RWUNQQFLIW", room_id: "!EfHxGsGGpotvlpnlne:localhost", refresh_token: None }
[2m2026-03-20T05:03:08.181008Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:08.181060Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "RWUNQQFLIW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:08.181133Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:08.181176Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:08.219773Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:08.560411Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:08.560583Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Message chosen.
[2m2026-03-20T05:03:08.560650Z[0m [31mERROR[0m [2mmatrix_commander_ng[0m[2m:[0m Error: message reported Invalid Room
[2m2026-03-20T05:03:08.612633Z[0m [31mERROR[0m [2mmatrix_commander_ng[0m[2m:[0m Encountered 1 error.
Error: InvalidRoom
PASS: send to invalid room produces error messageSSO_URL=http://127.0.0.1:8008/_matrix/client/v3/login/sso/redirect?redirectUrl=http%3A%2F%2F127.0.0.1%3A25356%2F
DEX_AUTH_URL=http://127.0.0.1:5556/dex/auth?response_type=code&client_id=synapse&redirect_uri=http%3A%2F%2F127.0.0.1%3A8008%2F_synapse%2Fclient%2Foidc%2Fcallback&scope=openid+profile+email&state=dizZ8oLbHqYoz4xRVDIctMl1NLgLZ0&nonce=0EBO6J6UmdWsVJp78V64UAqDSrPZZMf3&code_challenge_method=S256&code_challenge=EayKdwWug3vI5WkPO8iRY_PY2Ft6448GYDps_h8B93w
DEX_AUTH_URL (rewritten)=http://127.0.0.1:5556/dex/auth?response_type=code&client_id=synapse&redirect_uri=http%3A%2F%2F127.0.0.1%3A8008%2F_synapse%2Fclient%2Foidc%2Fcallback&scope=openid+profile+email&state=dizZ8oLbHqYoz4xRVDIctMl1NLgLZ0&nonce=0EBO6J6UmdWsVJp78V64UAqDSrPZZMf3&code_challenge_method=S256&code_challenge=EayKdwWug3vI5WkPO8iRY_PY2Ft6448GYDps_h8B93w
DEX_LOCAL_URL=http://127.0.0.1:5556/dex/auth/local?client_id=synapse&code_challenge=EayKdwWug3vI5WkPO8iRY_PY2Ft6448GYDps_h8B93w&code_challenge_method=S256&nonce=0EBO6J6UmdWsVJp78V64UAqDSrPZZMf3&redirect_uri=http%3A%2F%2F127.0.0.1%3A8008%2F_synapse%2Fclient%2Foidc%2Fcallback&response_type=code&scope=openid+profile+email&state=dizZ8oLbHqYoz4xRVDIctMl1NLgLZ0
DEX_LOGIN_URL=http://127.0.0.1:5556/dex/auth/local/login?back=&state=gcdk4fntmtqkxyonnpisld3v4
DEX_FORM_HTML=<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
FORM_ACTION=/dex/auth/local/login?back=&state=gcdk4fntmtqkxyonnpisld3v4
POST_URL=http://127.0.0.1:5556/dex/auth/local/login?back=&state=gcdk4fntmtqkxyonnpisld3v4
Step 4 POST done
SSO_RESULT=<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Continue to your account</title>
<style type="text/css">html {
height: 100%;
}
body {
background: #f9fafb;
max-width: 680px;
margin: auto;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
}
.mx_Header {
border-bottom: 3px solid #ddd;
margin-bottom: 1rem;
padding-top: 1rem;
padding-bottom: 1rem;
text-align: center;
}
@media screen and (max-width: 1120px) {
body {
font-size: 20px;
}
Found loginToken URL in HTML: http://127.0.0.1:25356/?loginToken=syl_EFXFEzMXUsutxTHmFUma_3xXEro
Delivered loginToken to local server
SSO_USER_ID=@sso-alice:localhost
PASS: SSO login via Dex (user=@sso-alice:localhost)LOGOUT=[2m2026-03-20T05:03:11.649765Z[0m [32m INFO[0m [2mmatrix_commander_ng::types[0m[2m:[0m loaded credentials are: Credentials { homeserver: Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }, user_id: "@alice:localhost", access_token: "***", device_id: "MUVRMLFKAW", room_id: "!placeholder:localhost", refresh_token: None }
[2m2026-03-20T05:03:11.649942Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m restore_login implicitly chosen.
[2m2026-03-20T05:03:11.649983Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m restoring device with device_id = "MUVRMLFKAW" on homeserver Url { scheme: "http", cannot_be_a_base: false, username: "", password: None, host: Some(Ipv4(127.0.0.1)), port: Some(8008), path: "/", query: None, fragment: None }.
[2m2026-03-20T05:03:11.650040Z[0m [32m INFO[0m [2mmatrix_commander_ng[0m[2m:[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.
[2m2026-03-20T05:03:11.650079Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Using sqlite store "./store/"
[2m2026-03-20T05:03:11.703321Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m syncing once, timeout set to 30 seconds ...
[2m2026-03-20T05:03:12.099045Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m sync completed
[2m2026-03-20T05:03:12.099219Z[0m [32m INFO[0m [2mmatrix_commander_ng::cli[0m[2m:[0m Logout chosen.
[2m2026-03-20T05:03:12.133974Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Logout sent to server Response
[2m2026-03-20T05:03:12.134104Z[0m [32m INFO[0m [2mmatrix_commander_ng::mclient[0m[2m:[0m Local logout: removed credentials file "./credentials.json".
PASS: logout me (no error)
============================================
matrix-commander-ng Results
Failures: 0
============================================