[
  {
    "id": "content-repository-config-json",
    "command_py": "matrix-commander --content-repository-config --output json",
    "command_rs": "matrix-commander-ng --content-repository-config --output json",
    "py_stdout": "{\"upload_size\": 52428800}",
    "rs_stdout": "{\"upload_size\":52428800}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.678994Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.679092Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.679142Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.679323Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.679374Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.706746Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:57.706829Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Content-repository-config chosen.\n\u001b[2m2026-03-20T05:03:57.706856Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting content repository config",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "content-repository-config-text",
    "command_py": "matrix-commander --content-repository-config",
    "command_rs": "matrix-commander-ng --content-repository-config",
    "py_stdout": "52428800",
    "rs_stdout": "52428800",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.525854Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.525951Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.525992Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.526047Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.526086Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.553453Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:57.553529Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Content-repository-config chosen.\n\u001b[2m2026-03-20T05:03:57.553555Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting content repository config",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "devices-json",
    "command_py": "matrix-commander --devices --output json",
    "command_rs": "matrix-commander-ng --devices --output json",
    "py_stdout": "",
    "rs_stdout": "{\"device_id\":\"BAVGAIMKAB\",\"display_name\":\"alice-deviceB-py\",\"last_seen_ip\":\"\",\"last_seen_ts\":\"\"}\n{\"device_id\":\"ISVVKWHXOM\",\"display_name\":\"alice-deviceB-rs\",\"last_seen_ip\":\"127.0.0.1\",\"last_seen_ts\":\"2026-03-20 05:03:48\"}\n{\"device_id\":\"MRQOCPQKPU\",\"display_name\":\"\",\"last_seen_ip\":\"\",\"last_seen_ts\":\"\"}\n{\"device_id\":\"NWVIECNUEK\",\"display_name\":\"alice-deviceA-py\",\"last_seen_ip\":\"127.0.0.1\",\"last_seen_ts\":\"2026-03-20 05:02:05\"}\n{\"device_id\":\"RQRGWNGEJV\",\"display_name\":\"alice-deviceA-rs\",\"last_seen_ip\":\"127.0.0.1\",\"last_seen_ts\":\"2026-03-20 05:03:47\"}\n{\"device_id\":\"TWPIOUBGAD\",\"display_name\":\"\",\"last_seen_ip\":\"\",\"last_seen_ts\":\"\"}",
    "py_stderr": "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\n2026-03-20 05:02:50,217:     INFO: matrix-commander: 1 error and 0 warnings occurred.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:55.014055Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:55.014155Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:55.014307Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:55.014374Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:55.014415Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:55.036904Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:55.036978Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Devices chosen.",
    "py_rc": "1",
    "rs_rc": "0"
  },
  {
    "id": "devices-text",
    "command_py": "matrix-commander --devices",
    "command_rs": "matrix-commander-ng --devices",
    "py_stdout": "",
    "rs_stdout": "BAVGAIMKAB    alice-deviceB-py        \nISVVKWHXOM    alice-deviceB-rs    127.0.0.1    2026-03-20 05:03:48\nMRQOCPQKPU            \nNWVIECNUEK    alice-deviceA-py    127.0.0.1    2026-03-20 05:02:05\nRQRGWNGEJV    alice-deviceA-rs    127.0.0.1    2026-03-20 05:03:47\nTWPIOUBGAD",
    "py_stderr": "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\n2026-03-20 05:02:47,812:     INFO: matrix-commander: 1 error and 0 warnings occurred.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:54.860394Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:54.860480Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:54.860520Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:54.860574Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:54.860618Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:54.883077Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:54.883149Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Devices chosen.",
    "py_rc": "1",
    "rs_rc": "0"
  },
  {
    "id": "discovery-info-json",
    "command_py": "matrix-commander --discovery-info --output json",
    "command_rs": "matrix-commander-ng --discovery-info --output json",
    "py_stdout": "{\"homeserver_url\": \"http://localhost:8008\", \"identity_server_url\": null}",
    "rs_stdout": "{\"homeserver_url\":\"http://localhost:8008\",\"identity_server_url\":null}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.408579Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.408673Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.408714Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.408764Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.408801Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.435656Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:57.435731Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Discovery-info chosen.\n\u001b[2m2026-03-20T05:03:57.435756Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting discovery info",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "discovery-info-text",
    "command_py": "matrix-commander --discovery-info",
    "command_rs": "matrix-commander-ng --discovery-info",
    "py_stdout": "http://localhost:8008    None",
    "rs_stdout": "http://localhost:8008    None",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.263162Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.263376Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.263419Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.263475Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.263516Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.288393Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:57.288470Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Discovery-info chosen.\n\u001b[2m2026-03-20T05:03:57.288891Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting discovery info",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-display-name-json",
    "command_py": "matrix-commander --get-display-name --output json",
    "command_rs": "matrix-commander-ng --get-display-name --output json",
    "py_stdout": "{\"displayname\": \"Alice Test\", \"user\": \"@alice:localhost\"}",
    "rs_stdout": "{\"displayname\":\"Alice Test\",\"user\":\"@alice:localhost\"}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.539175Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.539375Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.539417Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.539473Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.539513Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.562788Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:56.562864Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-display-name chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-display-name-text",
    "command_py": "matrix-commander --get-display-name",
    "command_rs": "matrix-commander-ng --get-display-name",
    "py_stdout": "@alice:localhost    Alice Test",
    "rs_stdout": "@alice:localhost    Alice Test",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.380818Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.380906Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.380945Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.381002Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.381042Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.405952Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:56.406368Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-display-name chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-profile-json",
    "command_py": "matrix-commander --get-profile --output json",
    "command_rs": "matrix-commander-ng --get-profile --output json",
    "py_stdout": "{\"displayname\": \"Alice Test\", \"avatar_url\": null, \"other_info\": {}, \"avatar_http\": null}",
    "rs_stdout": "{\"displayname\":\"Alice Test\",\"avatar_url\":null,\"avatar_http\":null,\"other_info\":{}}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.804955Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.805051Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.805091Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.805160Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.805325Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.832345Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:56.832422Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-profile chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-profile-text",
    "command_py": "matrix-commander --get-profile",
    "command_rs": "matrix-commander-ng --get-profile",
    "py_stdout": "Alice Test    None    None",
    "rs_stdout": "Alice Test    None    None",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.643175Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.643382Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.643426Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.643480Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.643523Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.666345Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:56.666423Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-profile chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-room-info-json",
    "command_py": "matrix-commander --get-room-info !gyVMIvheyTptUwVFDk:localhost --output json",
    "command_rs": "matrix-commander-ng --get-room-info !JKdkeGjRQsKxAqCNIB:localhost --output json",
    "py_stdout": "{\"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\"}",
    "rs_stdout": "{\"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\"}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.199646Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.199755Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.199797Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.199855Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.199894Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.223876Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:56.286979Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:56.287059Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-room-info chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "get-room-info-text",
    "command_py": "matrix-commander --get-room-info !gyVMIvheyTptUwVFDk:localhost",
    "command_rs": "matrix-commander-ng --get-room-info !JKdkeGjRQsKxAqCNIB:localhost",
    "py_stdout": "!ROOM:localhost    #test-room:localhost    #test-room:localhost    None    False",
    "rs_stdout": "!ROOM:localhost    #test-room:localhost    #test-room:localhost    None    False",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.006706Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.006793Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.006833Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.006885Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.006929Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.035044Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:56.126294Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:56.126780Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Get-room-info chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "joined-members-json",
    "command_py": "matrix-commander --joined-members !gyVMIvheyTptUwVFDk:localhost --output json",
    "command_rs": "matrix-commander-ng --joined-members !JKdkeGjRQsKxAqCNIB:localhost --output json",
    "py_stdout": "{\"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\"}",
    "rs_stdout": "{\"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}]}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:55.809988Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:55.810081Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:55.810120Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:55.810172Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:55.810320Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:55.835904Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:55.917780Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:55.917899Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Joined-members chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "joined-members-text",
    "command_py": "matrix-commander --joined-members !gyVMIvheyTptUwVFDk:localhost",
    "command_rs": "matrix-commander-ng --joined-members !JKdkeGjRQsKxAqCNIB:localhost",
    "py_stdout": "!ROOM:localhost\n    @alice:localhost    Alice Test    \n    @bob:localhost    bob",
    "rs_stdout": "!ROOM:localhost\n    @alice:localhost    Alice Test    \n    @bob:localhost    bob",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:55.596736Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:55.596830Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:55.596870Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:55.596922Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:55.596963Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:55.623537Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:55.690833Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:55.691300Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Joined-members chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "joined-rooms-json",
    "command_py": "matrix-commander --joined-rooms --output json",
    "command_rs": "matrix-commander-ng --joined-rooms --output json",
    "py_stdout": "{\"rooms\": [\"!ROOM:localhost\"]}",
    "rs_stdout": "{\"rooms\":[\"!ROOM:localhost\",\"!ROOM:localhost\",\"!ROOM:localhost\"]}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:55.420068Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:55.420155Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:55.420192Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:55.420392Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:55.420437Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:55.447855Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:55.525146Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:55.525300Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Joined-rooms chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "joined-rooms-text",
    "command_py": "matrix-commander --joined-rooms",
    "command_rs": "matrix-commander-ng --joined-rooms",
    "py_stdout": "!ROOM:localhost",
    "rs_stdout": "!ROOM:localhost\n!ROOM:localhost\n!ROOM:localhost",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:55.157015Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:55.157103Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:55.157156Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:55.157346Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:55.157388Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:55.182996Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:55.346173Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:55.346772Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Joined-rooms chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "listen-json",
    "command_py": "matrix-commander --listen tail --tail 10 --room $ROOM_ID --output json",
    "command_rs": "matrix-commander-ng --listen tail --tail 10 --room $ROOM_ID --output json --credentials ./credentials.json --store ./store/",
    "py_stdout": "{\"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\"}\n{\"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\"}\n{\"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\"}",
    "rs_stdout": "{\"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}\n{\"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}\n{\"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}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:59.444010Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:59.444104Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:59.444366Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:59.444443Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:59.444485Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:59.475098Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync due to --listen\n\u001b[2m2026-03-20T05:03:59.475342Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Listen Tail chosen.\n\u001b[2m2026-03-20T05:03:59.475383Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::listen\u001b[0m\u001b[2m:\u001b[0m mclient::listen_tail(): listen_self false, roomnames [\"!JKdkeGjRQsKxAqCNIB:localhost\"]\n\u001b[2m2026-03-20T05:03:59.475411Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::listen\u001b[0m\u001b[2m:\u001b[0m Ready and getting messages from server ...",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "listen-text",
    "command_py": "matrix-commander --listen tail --tail 10 --room $ROOM_ID",
    "command_rs": "matrix-commander-ng --listen tail --tail 10 --room $ROOM_ID --credentials ./credentials.json --store ./store/",
    "py_stdout": "Message received for room #test-room:localhost [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:19 | bob notice\nMessage received for room #test-room:localhost [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:02:17 | hello from bob\nMessage 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",
    "rs_stdout": "Message received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:51 | hello from bob\nMessage received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob notice\nMessage received for room test-room-rs [!ROOM:localhost] | sender bob [@bob:localhost] | 2026-03-20 05:03:52 | bob emote",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:59.244759Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:59.244858Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:59.244899Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:59.244957Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:59.244997Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:59.271597Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync due to --listen\n\u001b[2m2026-03-20T05:03:59.272040Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Listen Tail chosen.\n\u001b[2m2026-03-20T05:03:59.272620Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::listen\u001b[0m\u001b[2m:\u001b[0m mclient::listen_tail(): listen_self false, roomnames [\"!JKdkeGjRQsKxAqCNIB:localhost\"]\n\u001b[2m2026-03-20T05:03:59.273539Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::listen\u001b[0m\u001b[2m:\u001b[0m Ready and getting messages from server ...",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "login-info-json",
    "command_py": "matrix-commander --login-info --output json",
    "command_rs": "matrix-commander-ng --login-info --output json",
    "py_stdout": "{\"flows\": [\"m.login.password\", \"m.login.application_service\"]}",
    "rs_stdout": "{\"flows\":[\"m.login.password\",\"m.login.application_service\"]}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.117937Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.118034Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.118077Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.118129Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.118172Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.139587Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:57.139669Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Login-info chosen.\n\u001b[2m2026-03-20T05:03:57.139697Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting login info",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "login-info-text",
    "command_py": "matrix-commander --login-info",
    "command_rs": "matrix-commander-ng --login-info",
    "py_stdout": "m.login.password\nm.login.application_service",
    "rs_stdout": "m.login.password\nm.login.application_service",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:56.964311Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:56.964409Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:56.964450Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:56.964503Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:56.964547Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:56.986736Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:56.987050Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Login-info chosen.\n\u001b[2m2026-03-20T05:03:56.987417Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Getting login info",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "media-upload-json",
    "command_py": "matrix-commander --media-upload /tmp/mc-py-test/test-upload.txt --output json",
    "command_rs": "matrix-commander-ng --media-upload /tmp/mc-rs-test/test-upload.txt --output json",
    "py_stdout": "",
    "rs_stdout": "{\"content_uri\":\"mxc://localhost/QpFwtVCZWwEYrjOjfHKnSUtT\",\"decryption_dict\":null}",
    "py_stderr": "usage: matrix-commander [--usage] [-h] [--manual] [--readme] [-d]\n                        [--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL [DEBUG|INFO|WARNING|ERROR|CRITICAL ...]]\n                        [--verbose] [--login PASSWORD|SSO] [--verify [EMOJI]]\n                        [--logout ME|ALL] [-c CREDENTIALS_FILE]\n                        [-s STORE_DIRECTORY] [-r ROOM [ROOM ...]]\n                        [--room-default DEFAULT_ROOM]\n                        [--room-create ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--room-dm-create USER [USER ...]]\n                        [--room-dm-create-allow-duplicates]\n                        [--room-join ROOM [ROOM ...]]\n                        [--room-leave ROOM [ROOM ...]]\n                        [--room-forget ROOM [ROOM ...]]\n                        [--room-invite ROOM [ROOM ...]]\n                        [--room-ban ROOM [ROOM ...]]\n                        [--room-unban ROOM [ROOM ...]]\n                        [--room-kick ROOM [ROOM ...]] [-u USER [USER ...]]\n                        [--user-login USER] [--name ROOM_NAME [ROOM_NAME ...]]\n                        [--topic ROOM_TOPIC [ROOM_TOPIC ...]]\n                        [--alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [-m TEXT [TEXT ...]] [-i IMAGE_FILE [IMAGE_FILE ...]]\n                        [-a AUDIO_FILE [AUDIO_FILE ...]] [-f FILE [FILE ...]]\n                        [-e MATRIX_JSON_OBJECT [MATRIX_JSON_OBJECT ...]] [-w]\n                        [-z] [-k] [-j] [-p SEPARATOR] [--config CONFIG_FILE]\n                        [--proxy PROXY] [-n] [--encrypted]\n                        [-l [NEVER|ONCE|FOREVER|TAIL|ALL]] [-t [NUMBER]] [-y]\n                        [--print-event-id]\n                        [--download-media [DOWNLOAD_DIRECTORY]]\n                        [--download-media-name SOURCE|CLEAN|EVENTID|TIME]\n                        [--os-notify] [--set-device-name DEVICE_NAME]\n                        [--set-display-name DISPLAY_NAME] [--get-display-name]\n                        [--set-presence ONLINE|OFFLINE|UNAVAILABLE]\n                        [--get-presence] [--upload FILE [FILE ...]]\n                        [--download MXC_URI [MXC_URI ...]]\n                        [--delete-mxc MXC_URI [MXC_URI ...]]\n                        [--delete-mxc-before TIMESTAMP [TIMESTAMP ...]]\n                        [--joined-rooms] [--joined-members ROOM [ROOM ...]]\n                        [--joined-dm-rooms USER [USER ...]]\n                        [--mxc-to-http MXC_URI [MXC_URI ...]] [--devices]\n                        [--discovery-info] [--login-info]\n                        [--content-repository-config]\n                        [--rest REST_METHOD DATA URL [REST_METHOD DATA URL ...]]\n                        [--set-avatar AVATAR_MXC_URI]\n                        [--get-avatar [USER ...]] [--get-profile [USER ...]]\n                        [--get-room-info [ROOM ...]] [--get-client-info]\n                        [--has-permission ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc [ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc ...]]\n                        [--import-keys FILE PASSPHRASE FILE PASSPHRASE]\n                        [--export-keys FILE PASSPHRASE FILE PASSPHRASE]\n                        [--room-set-alias ROOM_ALIAS ROOM [ROOM_ALIAS ROOM ...]]\n                        [--room-resolve-alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--room-delete-alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--get-openid-token [USER ...]]\n                        [--room-get-visibility [ROOM ...]]\n                        [--room-get-state [ROOM ...]]\n                        [--delete-device DEVICE [DEVICE ...]]\n                        [--room-redact ROOM_ID EVENT_ID REASON [ROOM_ID EVENT_ID REASON ...]]\n                        [--whoami] [--no-ssl]\n                        [--ssl-certificate SSL_CERTIFICATE_FILE]\n                        [--file-name FILE [FILE ...]]\n                        [--key-dict KEY_DICTIONARY [KEY_DICTIONARY ...]]\n                        [--plain] [--separator SEPARATOR]\n                        [--access-token ACCESS_TOKEN] [--password PASSWORD]\n                        [--homeserver HOMESERVER_URL] [--device DEVICE_NAME]\n                        [--sync FULL|OFF] [-o TEXT|JSON|JSON-MAX|JSON-SPEC]\n                        [--room-invites [LIST|JOIN|LIST+JOIN]]\n                        [-v [PRINT|CHECK]]\nmatrix-commander: error: unrecognized arguments: --media-upload /tmp/mc-py-test/test-upload.txt",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:59.060175Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:59.060362Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:59.060402Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:59.060457Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:59.060494Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:59.082060Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:59.082146Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Media upload chosen.",
    "py_rc": "2",
    "rs_rc": "0"
  },
  {
    "id": "media-upload-text",
    "command_py": "matrix-commander --media-upload /tmp/mc-py-test/test-upload.txt",
    "command_rs": "matrix-commander-ng --media-upload /tmp/mc-rs-test/test-upload.txt",
    "py_stdout": "",
    "rs_stdout": "mxc://localhost/SsSiWnmRJzqmNmniBQNxahuW    None",
    "py_stderr": "usage: matrix-commander [--usage] [-h] [--manual] [--readme] [-d]\n                        [--log-level DEBUG|INFO|WARNING|ERROR|CRITICAL [DEBUG|INFO|WARNING|ERROR|CRITICAL ...]]\n                        [--verbose] [--login PASSWORD|SSO] [--verify [EMOJI]]\n                        [--logout ME|ALL] [-c CREDENTIALS_FILE]\n                        [-s STORE_DIRECTORY] [-r ROOM [ROOM ...]]\n                        [--room-default DEFAULT_ROOM]\n                        [--room-create ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--room-dm-create USER [USER ...]]\n                        [--room-dm-create-allow-duplicates]\n                        [--room-join ROOM [ROOM ...]]\n                        [--room-leave ROOM [ROOM ...]]\n                        [--room-forget ROOM [ROOM ...]]\n                        [--room-invite ROOM [ROOM ...]]\n                        [--room-ban ROOM [ROOM ...]]\n                        [--room-unban ROOM [ROOM ...]]\n                        [--room-kick ROOM [ROOM ...]] [-u USER [USER ...]]\n                        [--user-login USER] [--name ROOM_NAME [ROOM_NAME ...]]\n                        [--topic ROOM_TOPIC [ROOM_TOPIC ...]]\n                        [--alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [-m TEXT [TEXT ...]] [-i IMAGE_FILE [IMAGE_FILE ...]]\n                        [-a AUDIO_FILE [AUDIO_FILE ...]] [-f FILE [FILE ...]]\n                        [-e MATRIX_JSON_OBJECT [MATRIX_JSON_OBJECT ...]] [-w]\n                        [-z] [-k] [-j] [-p SEPARATOR] [--config CONFIG_FILE]\n                        [--proxy PROXY] [-n] [--encrypted]\n                        [-l [NEVER|ONCE|FOREVER|TAIL|ALL]] [-t [NUMBER]] [-y]\n                        [--print-event-id]\n                        [--download-media [DOWNLOAD_DIRECTORY]]\n                        [--download-media-name SOURCE|CLEAN|EVENTID|TIME]\n                        [--os-notify] [--set-device-name DEVICE_NAME]\n                        [--set-display-name DISPLAY_NAME] [--get-display-name]\n                        [--set-presence ONLINE|OFFLINE|UNAVAILABLE]\n                        [--get-presence] [--upload FILE [FILE ...]]\n                        [--download MXC_URI [MXC_URI ...]]\n                        [--delete-mxc MXC_URI [MXC_URI ...]]\n                        [--delete-mxc-before TIMESTAMP [TIMESTAMP ...]]\n                        [--joined-rooms] [--joined-members ROOM [ROOM ...]]\n                        [--joined-dm-rooms USER [USER ...]]\n                        [--mxc-to-http MXC_URI [MXC_URI ...]] [--devices]\n                        [--discovery-info] [--login-info]\n                        [--content-repository-config]\n                        [--rest REST_METHOD DATA URL [REST_METHOD DATA URL ...]]\n                        [--set-avatar AVATAR_MXC_URI]\n                        [--get-avatar [USER ...]] [--get-profile [USER ...]]\n                        [--get-room-info [ROOM ...]] [--get-client-info]\n                        [--has-permission ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc [ROOM BAN|INVITE|KICK|NOTIFICATIONS|REDACT|etc ...]]\n                        [--import-keys FILE PASSPHRASE FILE PASSPHRASE]\n                        [--export-keys FILE PASSPHRASE FILE PASSPHRASE]\n                        [--room-set-alias ROOM_ALIAS ROOM [ROOM_ALIAS ROOM ...]]\n                        [--room-resolve-alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--room-delete-alias ROOM_ALIAS [ROOM_ALIAS ...]]\n                        [--get-openid-token [USER ...]]\n                        [--room-get-visibility [ROOM ...]]\n                        [--room-get-state [ROOM ...]]\n                        [--delete-device DEVICE [DEVICE ...]]\n                        [--room-redact ROOM_ID EVENT_ID REASON [ROOM_ID EVENT_ID REASON ...]]\n                        [--whoami] [--no-ssl]\n                        [--ssl-certificate SSL_CERTIFICATE_FILE]\n                        [--file-name FILE [FILE ...]]\n                        [--key-dict KEY_DICTIONARY [KEY_DICTIONARY ...]]\n                        [--plain] [--separator SEPARATOR]\n                        [--access-token ACCESS_TOKEN] [--password PASSWORD]\n                        [--homeserver HOMESERVER_URL] [--device DEVICE_NAME]\n                        [--sync FULL|OFF] [-o TEXT|JSON|JSON-MAX|JSON-SPEC]\n                        [--room-invites [LIST|JOIN|LIST+JOIN]]\n                        [-v [PRINT|CHECK]]\nmatrix-commander: error: unrecognized arguments: --media-upload /tmp/mc-py-test/test-upload.txt",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:58.887738Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:58.887832Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:58.887873Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:58.887929Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:58.887970Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:58.915328Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:58.915455Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Media upload chosen.",
    "py_rc": "2",
    "rs_rc": "0"
  },
  {
    "id": "print-event-id",
    "command_py": "matrix-commander --room $ROOM_ID -m print-event-id-test --print-event-id",
    "command_rs": "matrix-commander-ng --credentials ./credentials.json --store ./store/ --room $ROOM_ID -m print-event-id-test --print-event-id",
    "py_stdout": "$zeWctg6hTzlM8hh7UKv85cFHp-InWHngYbT757nNZBE    !ROOM:localhost    print-event-id-test",
    "rs_stdout": "$Rk9Kn9ndsEctYhoZr1LTwrTN7mJZ8z4soBpaDDj2csQ    !ROOM:localhost    print-event-id-test",
    "py_stderr": "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\".",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:54.367081Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:54.367315Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:54.367367Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:54.367420Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:54.367462Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:54.393390Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:54.547612Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:54.547730Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Message chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "room-create-json",
    "command_py": "matrix-commander --room-create test-json-room-py --plain --output json",
    "command_rs": "matrix-commander-ng --room-create test-json-room-rs --plain --output json",
    "py_stdout": "{\"room_id\": \"!ROOM:localhost\", \"alias\": \"test-json-room-py\", \"alias_full\": \"#test-json-room:localhost\", \"name\": null, \"topic\": null, \"encrypted\": false}",
    "rs_stdout": "{\"room_id\":\"!ROOM:localhost\",\"alias\":\"test-json-room-rs\",\"alias_full\":\"#test-json-room:localhost\",\"name\":null,\"topic\":null,\"encrypted\":false}",
    "py_stderr": "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\".",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:58.488520Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:58.488611Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:58.488651Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:58.488702Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:58.488744Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:58.514830Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:58.585815Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:58.585931Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Room-create chosen.\n\u001b[2m2026-03-20T05:03:58.586003Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Creating a private unencrypted room.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "room-get-visibility-json",
    "command_py": "matrix-commander --room-get-visibility !gyVMIvheyTptUwVFDk:localhost --output json",
    "command_rs": "matrix-commander-ng --room-get-visibility !JKdkeGjRQsKxAqCNIB:localhost --output json",
    "py_stdout": "{\"room_id\": \"!ROOM:localhost\", \"visibility\": \"private\"}",
    "rs_stdout": "{\"room_id\":\"!ROOM:localhost\",\"visibility\":\"private\"}",
    "py_stderr": "2026-03-20 05:03:30,854:     INFO: matrix-commander: Successfully got visibility for room !gyVMIvheyTptUwVFDk:localhost: private.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.976508Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.976603Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.976647Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.976697Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.976739Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:58.007331Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:58.061531Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:58.061659Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Room-get-visibility chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "room-get-visibility-text",
    "command_py": "matrix-commander --room-get-visibility !gyVMIvheyTptUwVFDk:localhost",
    "command_rs": "matrix-commander-ng --room-get-visibility !JKdkeGjRQsKxAqCNIB:localhost",
    "py_stdout": "private    !ROOM:localhost",
    "rs_stdout": "private    !ROOM:localhost",
    "py_stderr": "2026-03-20 05:03:28,993:     INFO: matrix-commander: Successfully got visibility for room !gyVMIvheyTptUwVFDk:localhost: private.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:57.799671Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:57.799771Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:57.799816Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:57.799868Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:57.799909Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:57.824689Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:57.902474Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:57.903046Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Room-get-visibility chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "room-resolve-alias-json",
    "command_py": "matrix-commander --room-resolve-alias #test-room-py:localhost --output json",
    "command_rs": "matrix-commander-ng --room-resolve-alias #test-room-rs:localhost --output json",
    "py_stdout": "{\"room_alias\": \"#test-room:localhost\", \"room_id\": \"!ROOM:localhost\", \"servers\": [\"localhost\"]}",
    "rs_stdout": "{\"room_alias\":\"#test-room:localhost\",\"room_id\":\"!ROOM:localhost\",\"servers\":[\"localhost\"]}",
    "py_stderr": "2026-03-20 05:03:35,074:     INFO: matrix-commander: Successfully resolved room alias '#test-room-py:localhost' to !gyVMIvheyTptUwVFDk:localhost.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:58.300936Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:58.301022Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:58.301063Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:58.301114Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:58.301174Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:58.325122Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:58.404861Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:58.404952Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Room-resolve-alias chosen.\n\u001b[2m2026-03-20T05:03:58.416747Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Resolved room alias \"#test-room-rs:localhost\" successfully.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "room-resolve-alias-text",
    "command_py": "matrix-commander --room-resolve-alias #test-room-py:localhost",
    "command_rs": "matrix-commander-ng --room-resolve-alias #test-room-rs:localhost",
    "py_stdout": "#test-room:localhost    !ROOM:localhost    ['localhost']",
    "rs_stdout": "#test-room:localhost    !ROOM:localhost    ['localhost']",
    "py_stderr": "2026-03-20 05:03:33,019:     INFO: matrix-commander: Successfully resolved room alias '#test-room-py:localhost' to !gyVMIvheyTptUwVFDk:localhost.",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:58.135089Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:58.135191Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:58.135341Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:58.135402Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:58.135442Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:58.162846Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m syncing once, timeout set to 30 seconds ...\n\u001b[2m2026-03-20T05:03:58.218446Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m sync completed\n\u001b[2m2026-03-20T05:03:58.218835Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Room-resolve-alias chosen.\n\u001b[2m2026-03-20T05:03:58.227187Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Resolved room alias \"#test-room-rs:localhost\" successfully.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "whoami-json",
    "command_py": "matrix-commander --whoami --output json",
    "command_rs": "matrix-commander-ng --whoami --output json",
    "py_stdout": "{\"user_id\": \"@alice:localhost\"}",
    "rs_stdout": "{\"user_id\": \"@alice:localhost\"}",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:54.769676Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:54.769775Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:54.769816Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:54.769865Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:54.769907Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:54.792642Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:54.792682Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Whoami chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  },
  {
    "id": "whoami-text",
    "command_py": "matrix-commander --whoami",
    "command_rs": "matrix-commander-ng --whoami",
    "py_stdout": "@alice:localhost",
    "rs_stdout": "@alice:localhost",
    "py_stderr": "",
    "rs_stderr": "\u001b[2m2026-03-20T05:03:54.674790Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::types\u001b[0m\u001b[2m:\u001b[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 }\n\u001b[2m2026-03-20T05:03:54.674882Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m restore_login implicitly chosen.\n\u001b[2m2026-03-20T05:03:54.674923Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[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 }.\n\u001b[2m2026-03-20T05:03:54.674974Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng\u001b[0m\u001b[2m:\u001b[0m Default store directory is /tmp/mc-rs-test/.local/share/matrix-commander-ng/store/.\n\u001b[2m2026-03-20T05:03:54.675015Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Using sqlite store \"./store/\"\n\u001b[2m2026-03-20T05:03:54.699921Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::mclient\u001b[0m\u001b[2m:\u001b[0m Skipping sync: no commands require room state.\n\u001b[2m2026-03-20T05:03:54.700400Z\u001b[0m \u001b[32m INFO\u001b[0m \u001b[2mmatrix_commander_ng::cli\u001b[0m\u001b[2m:\u001b[0m Whoami chosen.",
    "py_rc": "0",
    "rs_rc": "0"
  }
]