=== Eye Viewer Log Rotated at 2026-04-22 08:19:38 +0000 === ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28699, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28699] "content-available" = 1; }, AnyHashable("message_id"): 28699, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28700, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Theeeen\Ud83d\Ude0f"; "message_id" = 28700; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28699; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28700, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Theeeen\Ud83d\Ude0f"; "message_id" = 28700; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28699; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 08:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Theeeen\Ud83d\Ude0f"; "message_id" = 28700; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28699; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28700, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28700, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 08:19:50"; "file_name" = ""; "is_encrypted" = 0; message = "Right one pls"; "message_id" = 28701; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28700; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28701, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 08:19:50"; "file_name" = ""; "is_encrypted" = 0; message = "Right one pls"; "message_id" = 28701; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28700; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28701, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 08:19:50"; "file_name" = ""; "is_encrypted" = 0; message = "Right one pls"; "message_id" = 28701; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28700; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask <3B6B0404-DF3D-4A29-A157-882743D93244>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <3B6B0404-DF3D-4A29-A157-882743D93244>.<1>} "crypto_version" = 0; datesent = "2026-04-22 08:35:43"; "file_name" = ""; "is_encrypted" = 0; message = "Mmm thank you babyy\Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 28703; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28702; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28703] "crypto_version" = 0; datesent = "2026-04-22 08:35:43"; "file_name" = ""; "is_encrypted" = 0; message = "Mmm thank you babyy\Ud83e\Udee6\Ud83e\Udee6\Ud83e\Udee6"; "message_id" = 28703; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28702; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28703, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3] "LocalWebSocketTask <8FD5321D-B177-4A7A-B1B8-75F3C40B1FC3>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <8FD5321D-B177-4A7A-B1B8-75F3C40B1FC3>.<1>} alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 08:54:56"; "file_name" = ""; "is_encrypted" = 0; message = INU; "message_id" = 28704; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28703; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28704] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "crypto_version" = 0; datesent = "2026-04-22 08:54:56"; "file_name" = ""; "is_encrypted" = 0; message = INU; "message_id" = 28704; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28703; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28704] "content-available" = 1; }, AnyHashable("message_id"): 28704, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "LocalWebSocketTask <4EBCBE73-8AFD-4DE2-A636-D71E25703C09>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <4EBCBE73-8AFD-4DE2-A636-D71E25703C09>.<1>} "LocalWebSocketTask <16C76FAB-266B-43AC-B511-191F7B8E019D>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <16C76FAB-266B-43AC-B511-191F7B8E019D>.<1>, NSLocalizedDescription=The network connection was lost.} "crypto_version" = 0; datesent = "2026-04-22 10:07:35"; "file_name" = ""; "is_encrypted" = 0; message = "Baby, I want you to change position of hairpin"; "message_id" = 28707; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28706; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28707, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28707, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 10:07:56"; "file_name" = ""; "is_encrypted" = 0; message = "And one more 1-0 \Ud83d\Ude0f"; "message_id" = 28708; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28707; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28708, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 10:07:56"; "file_name" = ""; "is_encrypted" = 0; message = "And one more 1-0 \Ud83d\Ude0f"; "message_id" = 28708; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28707; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28708, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 10:07:56"; "file_name" = ""; "is_encrypted" = 0; message = "And one more 1-0 \Ud83d\Ude0f"; "message_id" = 28708; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28707; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28708, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28708, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("message_id"): 28709, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28711] ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask <34CA19E1-F133-41FB-AA7A-8800A53D7FA0>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <34CA19E1-F133-41FB-AA7A-8800A53D7FA0>.<1>} "LocalWebSocketTask <43EB88E3-6560-488B-8314-105D393B4D4F>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <43EB88E3-6560-488B-8314-105D393B4D4F>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("message_id"): 28716, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] 0 Eye.debug.dylib 0x00000001052b9130 $s3Eye21MediaViewerControllerC7dismiss8animated10completionySb_yycSgtF + 136 1 Eye.debug.dylib 0x00000001052c6730 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCF + 2084 2 Eye.debug.dylib 0x00000001052c6a20 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCFTo + 68 3 UIKitCore 0x00000001966d1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x00000001966d1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x00000001966d11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000196215a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x00000001961da310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000019bdcb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000019be09c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "LocalWebSocketTask <2DC3F5B8-E139-49FD-B0F0-44BD95884CA7>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <2DC3F5B8-E139-49FD-B0F0-44BD95884CA7>.<1>} ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) ; target= <(action=mediaTapped, target=)>> }>, ; target= <(action=mediaTapped, target=)>; must-fail = { ; target= <(action=handlePan:, target=)>> }>]) "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask <3776F086-E0A8-462E-854C-1255763ADB86>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <3776F086-E0A8-462E-854C-1255763ADB86>.<1>} "LocalWebSocketTask <525074C4-3C7E-46D1-BC22-802752D636A8>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <525074C4-3C7E-46D1-BC22-802752D636A8>.<1>} "LocalWebSocketTask <2EE4683A-D6FD-486D-8977-ACFDCC580121>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <2EE4683A-D6FD-486D-8977-ACFDCC580121>.<1>} "LocalWebSocketTask <8F633790-D415-4035-B718-2C722416CEBE>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <8F633790-D415-4035-B718-2C722416CEBE>.<1>} "content-available" = 1; }, AnyHashable("message_id"): 28717] "crypto_version" = 0; datesent = "2026-04-22 14:19:34"; "file_name" = ""; "is_encrypted" = 0; message = "Hello baby"; "message_id" = 28719; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28718; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28719, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28719] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28720, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 14:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Leaving the office now"; "message_id" = 28720; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28719; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28720, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "crypto_version" = 0; datesent = "2026-04-22 14:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Leaving the office now"; "message_id" = 28720; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28719; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "LocalWebSocketTask <6B8A2B01-EDB0-4C8D-A8A4-F7A9C216A049>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <6B8A2B01-EDB0-4C8D-A8A4-F7A9C216A049>.<1>} "LocalWebSocketTask <3777E47F-5AEA-421D-BCB9-AAF4EC3D9E90>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <3777E47F-5AEA-421D-BCB9-AAF4EC3D9E90>.<1>} "LocalWebSocketTask <128D33B7-BBDA-4BD8-BC8F-897DD80D7FDD>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <128D33B7-BBDA-4BD8-BC8F-897DD80D7FDD>.<1>} "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 15:46:10"; "file_name" = ""; "is_encrypted" = 0; message = "Came to play padel baby"; "message_id" = 28722; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28721; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28722] "content-available" = 1; }, AnyHashable("message_id"): 28722, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} "crypto_version" = 0; datesent = "2026-04-22 15:46:10"; "file_name" = ""; "is_encrypted" = 0; message = "Came to play padel baby"; "message_id" = 28722; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28721; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28722] "LocalWebSocketTask <743197AD-9CFF-4750-9587-CB00229B7770>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <743197AD-9CFF-4750-9587-CB00229B7770>.<1>} "content-available" = 1; }, AnyHashable("message_id"): 28723] "content-available" = 1; }, AnyHashable("message_id"): 28724, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:13:32"; "file_name" = ""; "is_encrypted" = 0; message = "Between 7-8"; "message_id" = 28725; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28724; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "LocalWebSocketTask <68414D02-CCA2-406A-B17D-4ACBAC1C99D8>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <68414D02-CCA2-406A-B17D-4ACBAC1C99D8>.<1>} "content-available" = 1; }, AnyHashable("message_id"): 28725, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 16:13:32"; "file_name" = ""; "is_encrypted" = 0; message = "Between 7-8"; "message_id" = 28725; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28724; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 16:13:51"; "file_name" = ""; "is_encrypted" = 0; message = "But Im not playing now, my neck is hurting"; "message_id" = 28726; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28725; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:13:51"; "file_name" = ""; "is_encrypted" = 0; message = "But Im not playing now, my neck is hurting"; "message_id" = 28726; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28725; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:13:51"; "file_name" = ""; "is_encrypted" = 0; message = "But Im not playing now, my neck is hurting"; "message_id" = 28726; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28725; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 28726, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28727, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28728] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28729, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 16:14:09"; "file_name" = ""; "is_encrypted" = 0; message = "What are you doing babyyy"; "message_id" = 28730; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28729; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28730, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 16:14:09"; "file_name" = ""; "is_encrypted" = 0; message = "What are you doing babyyy"; "message_id" = 28730; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28729; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28730, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:09"; "file_name" = ""; "is_encrypted" = 0; message = "What are you doing babyyy"; "message_id" = 28730; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28729; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28730] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:14:29"; "file_name" = ""; "is_encrypted" = 0; message = "I\U2019ll baby\U2665\Ufe0f"; "message_id" = 28732; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28731; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:14:29"; "file_name" = ""; "is_encrypted" = 0; message = "I\U2019ll baby\U2665\Ufe0f"; "message_id" = 28732; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28731; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:14:29"; "file_name" = ""; "is_encrypted" = 0; message = "I\U2019ll baby\U2665\Ufe0f"; "message_id" = 28732; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28731; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28732, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "crypto_version" = 1; datesent = "2026-04-22 16:14:41"; "file_name" = "653beabd4db198ba.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28734; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 7312580; "prev_session_message_id" = 28733; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_653beabd4db198ba.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28734, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "crypto_version" = 1; datesent = "2026-04-22 16:14:41"; "file_name" = "653beabd4db198ba.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28734; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 7312580; "prev_session_message_id" = 28733; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_653beabd4db198ba.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28734, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "crypto_version" = 1; datesent = "2026-04-22 16:14:41"; "file_name" = "653beabd4db198ba.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28734; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 7312580; "prev_session_message_id" = 28733; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_653beabd4db198ba.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28734] "content-available" = 1; }, AnyHashable("message_id"): 28734, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28733] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28734] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28734] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28734] "content-available" = 1; }, AnyHashable("operation_type"): 3] 0 Eye.debug.dylib 0x00000001033b9130 $s3Eye21MediaViewerControllerC7dismiss8animated10completionySb_yycSgtF + 136 1 Eye.debug.dylib 0x00000001033c6730 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCF + 2084 2 Eye.debug.dylib 0x00000001033c6a20 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCFTo + 68 3 UIKitCore 0x00000001966d1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x00000001966d1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x00000001966d11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000196215a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x00000001961da310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000019bdcb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000019be09c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "crypto_version" = 0; datesent = "2026-04-22 16:14:53"; "file_name" = ""; "is_encrypted" = 0; message = "Happy for you my looove"; "message_id" = 28735; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "crypto_version" = 0; datesent = "2026-04-22 16:14:53"; "file_name" = ""; "is_encrypted" = 0; message = "Happy for you my looove"; "message_id" = 28735; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] "crypto_version" = 0; datesent = "2026-04-22 16:14:53"; "file_name" = ""; "is_encrypted" = 0; message = "Happy for you my looove"; "message_id" = 28735; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28734; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 28736] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:55"; "file_name" = ""; "is_encrypted" = 0; message = "\U2665\Ufe0f"; "message_id" = 28737; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:55"; "file_name" = ""; "is_encrypted" = 0; message = "\U2665\Ufe0f"; "message_id" = 28737; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:14:55"; "file_name" = ""; "is_encrypted" = 0; message = "\U2665\Ufe0f"; "message_id" = 28737; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28736; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28737, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28737, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28738] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28740, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 1; datesent = "2026-04-22 16:15:17"; "file_name" = "adbb72082c79fd33.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28740; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 643550; "prev_session_message_id" = 28739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_adbb72082c79fd33.jpg"; timer = 0; "upload_status" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28740, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 1; datesent = "2026-04-22 16:15:17"; "file_name" = "adbb72082c79fd33.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28740; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 643550; "prev_session_message_id" = 28739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_adbb72082c79fd33.jpg"; timer = 0; "upload_status" = 1; }] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28740, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 1; datesent = "2026-04-22 16:15:17"; "file_name" = "adbb72082c79fd33.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28740; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 643550; "prev_session_message_id" = 28739; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_adbb72082c79fd33.jpg"; timer = 0; "upload_status" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28740, AnyHashable("session_id"): ILUIWU] 0 Eye.debug.dylib 0x00000001033b9130 $s3Eye21MediaViewerControllerC7dismiss8animated10completionySb_yycSgtF + 136 1 Eye.debug.dylib 0x00000001033c6730 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCF + 2084 2 Eye.debug.dylib 0x00000001033c6a20 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCFTo + 68 3 UIKitCore 0x00000001966d1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x00000001966d1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x00000001966d11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000196215a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x00000001961da310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000019bdcb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000019be09c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:21"; "file_name" = ""; "is_encrypted" = 0; message = "\Ud83e\Udee0"; "message_id" = 28741; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28741, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:21"; "file_name" = ""; "is_encrypted" = 0; message = "\Ud83e\Udee0"; "message_id" = 28741; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28741, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:21"; "file_name" = ""; "is_encrypted" = 0; message = "\Ud83e\Udee0"; "message_id" = 28741; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28740; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28741, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28742] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28743, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:29"; "file_name" = ""; "is_encrypted" = 0; message = "They need you!"; "message_id" = 28743; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28742; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28743, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:29"; "file_name" = ""; "is_encrypted" = 0; message = "They need you!"; "message_id" = 28743; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28742; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28743, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:15:29"; "file_name" = ""; "is_encrypted" = 0; message = "They need you!"; "message_id" = 28743; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28742; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU] 0 Eye.debug.dylib 0x00000001033b9130 $s3Eye21MediaViewerControllerC7dismiss8animated10completionySb_yycSgtF + 136 1 Eye.debug.dylib 0x00000001033c6730 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCF + 2084 2 Eye.debug.dylib 0x00000001033c6a20 $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCFTo + 68 3 UIKitCore 0x00000001966d1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x00000001966d1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x00000001966d11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000196215a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x00000001961da310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000019bdcb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000019be09c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28743, AnyHashable("operation_type"): 3] "content-available" = 1; }] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:16:05"; "file_name" = ""; "is_encrypted" = 0; message = Nooo; "message_id" = 28745; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28744; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28745] alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:16:05"; "file_name" = ""; "is_encrypted" = 0; message = Nooo; "message_id" = 28745; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28744; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28745] "crypto_version" = 0; datesent = "2026-04-22 16:16:05"; "file_name" = ""; "is_encrypted" = 0; message = Nooo; "message_id" = 28745; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28744; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 1; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28745] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28745, AnyHashable("session_id"): ILUIWU] "crypto_version" = 0; datesent = "2026-04-22 16:16:08"; "file_name" = ""; "is_encrypted" = 0; message = "Always!!!!"; "message_id" = 28746; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28745; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28746, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 16:16:08"; "file_name" = ""; "is_encrypted" = 0; message = "Always!!!!"; "message_id" = 28746; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28745; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28746, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "crypto_version" = 0; datesent = "2026-04-22 16:16:08"; "file_name" = ""; "is_encrypted" = 0; message = "Always!!!!"; "message_id" = 28746; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28745; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-22 16:16:15"; "file_name" = ""; "is_encrypted" = 0; message = "Even more!"; "message_id" = 28747; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28746; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28747, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "crypto_version" = 0; datesent = "2026-04-22 16:16:15"; "file_name" = ""; "is_encrypted" = 0; message = "Even more!"; "message_id" = 28747; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28746; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }, AnyHashable("message_id"): 28747, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0] "crypto_version" = 0; datesent = "2026-04-22 16:16:15"; "file_name" = ""; "is_encrypted" = 0; message = "Even more!"; "message_id" = 28747; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28746; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "New message received"; title = Eye; }; badge = 0; "content-available" = 1; sound = default; }] "content-available" = 1; }, AnyHashable("message_id"): 28747] alert = { body = "You have received a new message"; title = Eye; }; badge = 3; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:24:40"; "file_name" = ""; "is_encrypted" = 0; message = IWU; "message_id" = 28751; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28750; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28751, AnyHashable("sender_name"): Esra, AnyHashable("datesent"): 2026-04-22 16:24:40, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): ] "LocalWebSocketTask <9C42EE0A-DBB9-437E-8233-B618D5905881>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <9C42EE0A-DBB9-437E-8233-B618D5905881>.<1>} alert = { body = "You have received a new message"; title = Eye; }; badge = 3; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): , AnyHashable("message"): IWU, AnyHashable("datesent"): 2026-04-22 16:24:40, AnyHashable("file_name"): , AnyHashable("operation_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("message_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:24:40"; "file_name" = ""; "is_encrypted" = 0; message = IWU; "message_id" = 28751; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28750; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:32:37"; "file_name" = ""; "is_encrypted" = 0; message = Hello; "message_id" = 28753; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 27407; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("datesent"): 2026-04-22 16:32:37] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 28753, AnyHashable("operation_type"): 3] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message"): Coucou, AnyHashable("message_id"): 28754, AnyHashable("sender_name"): LOLO, AnyHashable("session_id"): ILUIWU2, AnyHashable("thumb_file_name"): , AnyHashable("file_name"): , AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:35:19"; "file_name" = ""; "is_encrypted" = 0; message = Coucou; "message_id" = 28754; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28753; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-22 16:35:19, AnyHashable("message_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("datesent"): 2026-04-22 16:36:28, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:36:28"; "file_name" = ""; "is_encrypted" = 0; message = Mutes; "message_id" = 28755; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28754; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("file_name"): , AnyHashable("sender_name"): LOLO, AnyHashable("timer"): 0, AnyHashable("message_id"): 28755] "content-available" = 1; }, AnyHashable("message_id"): 28755, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3] "content-available" = 1; }] "crypto_version" = 0; datesent = "2026-04-22 16:38:40"; "file_name" = ""; "is_encrypted" = 0; message = "Muted #2"; "message_id" = 28757; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28755; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28757, AnyHashable("datesent"): 2026-04-22 16:38:40, AnyHashable("session_id"): ILUIWU2, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): , AnyHashable("file_name"): , AnyHashable("sender_name"): LOLO, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 28757] "crypto_version" = 0; datesent = "2026-04-22 16:41:42"; "file_name" = ""; "is_encrypted" = 0; message = "Muted #3"; "message_id" = 28758; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28757; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): Muted #3, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_id"): 28758, AnyHashable("sender_name"): LOLO, AnyHashable("message_type"): 0, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("message_id"): 28758] "crypto_version" = 0; datesent = "2026-04-22 16:45:30"; "file_name" = ""; "is_encrypted" = 0; message = Encore; "message_id" = 28759; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28758; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): Encore, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_id"): 28759, AnyHashable("sender_name"): LOLO, AnyHashable("message_type"): 0, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28759, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28760, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:50:51"; "file_name" = ""; "is_encrypted" = 0; message = Deux; "message_id" = 28760; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28759; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 16:50:51, AnyHashable("message"): Deux, AnyHashable("sender_name"): LOLO] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28760, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:50:51"; "file_name" = ""; "is_encrypted" = 0; message = Deux; "message_id" = 28760; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28759; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 16:50:51, AnyHashable("message"): Deux, AnyHashable("sender_name"): LOLO] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28760, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:50:51"; "file_name" = ""; "is_encrypted" = 0; message = Deux; "message_id" = 28760; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28759; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 16:50:51, AnyHashable("message"): Deux, AnyHashable("sender_name"): LOLO] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 28760] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28761, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:51:08"; "file_name" = ""; "is_encrypted" = 0; message = Trois; "message_id" = 28761; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28760; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 16:51:08, AnyHashable("message"): Trois, AnyHashable("sender_name"): LOLO] "content-available" = 1; }, AnyHashable("message_id"): 28761, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:51:25"; "file_name" = ""; "is_encrypted" = 0; message = Quatre; "message_id" = 28762; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28761; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-22 16:51:25] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28763, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:51:37"; "file_name" = ""; "is_encrypted" = 0; message = Cinq; "message_id" = 28763; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28762; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 16:51:37, AnyHashable("message"): Cinq, AnyHashable("sender_name"): LOLO] "content-available" = 1; }] "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 14673] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 14674] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): , AnyHashable("sender_name"): LOLO, AnyHashable("message_type"): 0, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("datesent"): 2026-04-22 16:59:24, AnyHashable("message"): Test message, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:59:24"; "file_name" = ""; "is_encrypted" = 0; message = "Test message"; "message_id" = 28764; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28763; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28764] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] "crypto_version" = 0; datesent = "2026-04-22 16:59:44"; "file_name" = ""; "is_encrypted" = 0; message = "Again another"; "message_id" = 28765; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28764; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-22 16:59:44, AnyHashable("session_id"): ILUIWU2, AnyHashable("file_name"): , AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("timer"): 0, AnyHashable("message_id"): 28765, AnyHashable("message_type"): 0, AnyHashable("message"): Again another, AnyHashable("thumb_file_name"): , AnyHashable("sender_name"): LOLO, AnyHashable("operation_type"): 0] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28766, AnyHashable("message_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:59:47"; "file_name" = ""; "is_encrypted" = 0; message = "And another"; "message_id" = 28766; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28765; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): And another] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28765, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }, AnyHashable("message_id"): 28766] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28767, AnyHashable("message_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 16:59:49"; "file_name" = ""; "is_encrypted" = 0; message = "And again"; "message_id" = 28767; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28766; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): And again] "content-available" = 1; }] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message"): !, AnyHashable("datesent"): 2026-04-22 17:02:44, AnyHashable("file_name"): , AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 28768, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:02:44"; "file_name" = ""; "is_encrypted" = 0; message = "!"; "message_id" = 28768; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28767; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:03:00"; "file_name" = ""; "is_encrypted" = 0; message = 2; "message_id" = 28769; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28768; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message"): Msg1, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 17:09:21, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("message_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:09:21"; "file_name" = ""; "is_encrypted" = 0; message = Msg1; "message_id" = 28770; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28769; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("sender_name"): LOLO] "content-available" = 1; }, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): LOLO, AnyHashable("message"): Msg2, AnyHashable("datesent"): 2026-04-22 17:09:29, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:09:29"; "file_name" = ""; "is_encrypted" = 0; message = Msg2; "message_id" = 28771; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28770; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("thumb_file_name"): , AnyHashable("message_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message"): Msg3, AnyHashable("sender_name"): LOLO, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:09:59"; "file_name" = ""; "is_encrypted" = 0; message = Msg3; "message_id" = 28772; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28771; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-22 17:09:59, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:12:03"; "file_name" = ""; "is_encrypted" = 0; message = "MSG 4"; "message_id" = 28773; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28772; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] "content-available" = 1; }, AnyHashable("message_id"): 28773, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] "crypto_version" = 0; datesent = "2026-04-22 17:12:10"; "file_name" = ""; "is_encrypted" = 0; message = "MSG 5"; "message_id" = 28774; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28773; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): LOLO, AnyHashable("thumb_file_name"): , AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("datesent"): 2026-04-22 17:12:10, AnyHashable("message_id"): 28774] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28775, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("datesent"): 2026-04-22 17:13:03, AnyHashable("file_name"): , AnyHashable("message"): MSG 6, AnyHashable("message_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:13:03"; "file_name" = ""; "is_encrypted" = 0; message = "MSG 6"; "message_id" = 28775; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28774; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): LOLO, AnyHashable("thumb_file_name"): , AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B] "content-available" = 1; }, AnyHashable("message_id"): 28775, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }, AnyHashable("message_id"): 14685, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 14687, AnyHashable("operation_type"): 3] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28776, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("file_name"): , AnyHashable("message"): MSG 7, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:13:32"; "file_name" = ""; "is_encrypted" = 0; message = "MSG 7"; "message_id" = 28776; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28775; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("sender_name"): LOLO] "content-available" = 1; }, AnyHashable("message_id"): 28776, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:18:45"; "file_name" = ""; "is_encrypted" = 0; message = "MSG 8"; "message_id" = 28777; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28776; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("datesent"): 2026-04-22 17:18:45, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): MSG 8, AnyHashable("file_name"): , AnyHashable("message_id"): 28777, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 3] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:18:57"; "file_name" = ""; "is_encrypted" = 0; message = Mesg9; "message_id" = 28778; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28777; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("datesent"): 2026-04-22 17:18:57, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): Mesg9, AnyHashable("file_name"): , AnyHashable("message_id"): 28778, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28778] "content-available" = 1; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:19:24"; "file_name" = ""; "is_encrypted" = 0; message = "Message 10"; "message_id" = 28779; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28778; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("datesent"): 2026-04-22 17:19:24, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): Message 10, AnyHashable("file_name"): , AnyHashable("message_id"): 28779, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28779] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("timer"): 0, AnyHashable("message"): Message 11, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:19:45"; "file_name" = ""; "is_encrypted" = 0; message = "Message 11"; "message_id" = 28780; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28779; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28780, AnyHashable("file_name"): ] "content-available" = 1; }, AnyHashable("message_id"): 28780, AnyHashable("session_id"): ILUIWU2] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:19:54"; "file_name" = ""; "is_encrypted" = 0; message = 12; "message_id" = 28781; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28780; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("datesent"): 2026-04-22 17:19:54, AnyHashable("session_id"): ILUIWU2, AnyHashable("message"): 12, AnyHashable("file_name"): , AnyHashable("message_id"): 28781, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): ] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:25:05"; "file_name" = ""; "is_encrypted" = 0; message = 1; "message_id" = 28782; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28781; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("sender_name"): LOLO, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-22 17:25:05] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU2, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:25:05"; "file_name" = ""; "is_encrypted" = 0; message = 1; "message_id" = 28782; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28781; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): 1, AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): ] "content-available" = 1; }, AnyHashable("operation_type"): 3] "crypto_version" = 0; datesent = "2026-04-22 17:25:20"; "file_name" = ""; "is_encrypted" = 0; message = 2; "message_id" = 28783; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28782; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("file_name"): , AnyHashable("sender_name"): LOLO, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-22 17:25:20, AnyHashable("message_type"): 0, AnyHashable("message_id"): 28783, AnyHashable("timer"): 0, AnyHashable("message"): 2, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("operation_type"): 0] "content-available" = 1; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("operation_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): , AnyHashable("message"): 3, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:27:05"; "file_name" = ""; "is_encrypted" = 0; message = 3; "message_id" = 28784; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28783; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("message_id"): 28784] "content-available" = 1; }, AnyHashable("message_id"): 28784, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28785, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:27:22"; "file_name" = ""; "is_encrypted" = 0; message = Encore; "message_id" = 28785; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28784; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28785, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): LOLO, AnyHashable("message_id"): 28786, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("datesent"): 2026-04-22 17:27:45, AnyHashable("message"): 1, AnyHashable("thumb_file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:27:45"; "file_name" = ""; "is_encrypted" = 0; message = 1; "message_id" = 28786; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28785; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28786, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("operation_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): , AnyHashable("message"): 2, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:27:54"; "file_name" = ""; "is_encrypted" = 0; message = 2; "message_id" = 28787; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28786; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("message_id"): 28787] "content-available" = 1; }, AnyHashable("message_id"): 28787, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("operation_type"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): , AnyHashable("message"): 3, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-22 17:28:04"; "file_name" = ""; "is_encrypted" = 0; message = 3; "message_id" = 28788; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28787; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("message_id"): 28788] "content-available" = 1; }, AnyHashable("message_id"): 28788, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("message_id"): 28789] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): a3c7116bf5e3bbcd.heic, AnyHashable("timer"): 0, AnyHashable("message_type"): 1, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 0, AnyHashable("message"): , AnyHashable("message_data"): { "crypto_version" = 1; datesent = "2026-04-22 17:28:24"; "file_name" = "a3c7116bf5e3bbcd.heic"; "is_encrypted" = 1; message = ""; "message_id" = 28789; "message_type" = 1; "mime_type" = "image/heic"; "plaintext_size" = 2808983; "prev_session_message_id" = 28788; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_a3c7116bf5e3bbcd.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("thumb_file_name"): t_a3c7116bf5e3bbcd.jpg, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("sender_name"): LOLO, AnyHashable("message_id"): 28789, AnyHashable("datesent"): 2026-04-22 17:28:24] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28790] "crypto_version" = 1; datesent = "2026-04-22 17:28:45"; "file_name" = "5dd04ec618550af0.jpeg"; "is_encrypted" = 1; message = ""; "message_id" = 28790; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 1484524; "prev_session_message_id" = 28789; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_5dd04ec618550af0.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): 5dd04ec618550af0.jpeg, AnyHashable("operation_type"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("message"): , AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): t_5dd04ec618550af0.jpg, AnyHashable("message_type"): 1, AnyHashable("message_id"): 28790, AnyHashable("session_id"): ILUIWU2] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28790] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28790, AnyHashable("session_id"): ILUIWU2, AnyHashable("operation_type"): 0] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2] "crypto_version" = 1; datesent = "2026-04-22 17:29:07"; "file_name" = "b141ec241290453b.jpeg"; "is_encrypted" = 1; message = ""; "message_id" = 28791; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 2567402; "prev_session_message_id" = 28790; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_b141ec241290453b.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_type"): 1, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("thumb_file_name"): t_b141ec241290453b.jpg, AnyHashable("file_name"): b141ec241290453b.jpeg, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): LOLO, AnyHashable("message"): , AnyHashable("operation_type"): 0] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28792] "content-available" = 1; }, AnyHashable("operation_type"): 3] "crypto_version" = 1; datesent = "2026-04-22 17:29:28"; "file_name" = "b4408e3141587152.jpeg"; "is_encrypted" = 1; message = ""; "message_id" = 28792; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 1896240; "prev_session_message_id" = 28791; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_b4408e3141587152.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("datesent"): 2026-04-22 17:29:28, AnyHashable("thumb_file_name"): t_b4408e3141587152.jpg, AnyHashable("file_name"): b4408e3141587152.jpeg, AnyHashable("timer"): 0, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("message_type"): 1, AnyHashable("session_id"): ILUIWU2, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("sender_name"): LOLO] "content-available" = 1; }, AnyHashable("operation_type"): 3] "crypto_version" = 1; datesent = "2026-04-22 17:34:36"; "file_name" = "c8613d57167974b0.heic"; "is_encrypted" = 1; message = ""; "message_id" = 28793; "message_type" = 1; "mime_type" = "image/heic"; "plaintext_size" = 2808983; "prev_session_message_id" = 28792; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_c8613d57167974b0.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("message_type"): 1, AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): t_c8613d57167974b0.jpg, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B, AnyHashable("timer"): 0, AnyHashable("sender_name"): LOLO, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("file_name"): c8613d57167974b0.heic] alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28793] "content-available" = 1; }, AnyHashable("session_id"): ILUIWU2, AnyHashable("message_id"): 28794, AnyHashable("operation_type"): 3] "crypto_version" = 1; datesent = "2026-04-22 17:34:54"; "file_name" = "91886bcecc539776.jpeg"; "is_encrypted" = 1; message = ""; "message_id" = 28794; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 1955253; "prev_session_message_id" = 28793; "sender_id" = "AE422AAE-41B4-415C-BF79-9DBD82F4699B"; "sender_name" = LOLO; "session_id" = ILUIWU2; "thumb_file_name" = "t_91886bcecc539776.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("file_name"): 91886bcecc539776.jpeg, AnyHashable("message_id"): 28794, AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): t_91886bcecc539776.jpg, AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 1, AnyHashable("session_id"): ILUIWU2, AnyHashable("datesent"): 2026-04-22 17:34:54, AnyHashable("sender_name"): LOLO, AnyHashable("sender_id"): AE422AAE-41B4-415C-BF79-9DBD82F4699B] alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28794] "content-available" = 1; }, AnyHashable("message_id"): 28756, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] "LocalWebSocketTask <4F6D0347-EA4D-4B83-88A1-18181BA1D251>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <4F6D0347-EA4D-4B83-88A1-18181BA1D251>.<1>} "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28801] "content-available" = 1; }] "content-available" = 1; }, AnyHashable("message_id"): 28800, AnyHashable("session_id"): ILUIWU] ── Body ── {"ok":true,"message":"Message updated","session_id":"ILUIWU","message_id":28805,"event_type":2}[07:27:54] [CRASH] No crash detected [07:27:54] [LOG] Pruned 7840 entries older than 3 hours [07:27:54] [FONT] Roboto fonts loaded successfully: Roboto-Regular [07:27:54] [FONT] ChatFont.regular(18) returns: Roboto-Regular, family: Roboto [07:27:54] [GIPHY] SDK not available - using REST API fallback [07:27:54] [BACKGROUND] Background fetch enabled [07:27:54] [AUTH] Starting PIN authentication [07:27:54] [BACKGROUND] Background fetch triggered [07:27:54] [BACKGROUND] Fetching recent messages for pre-cache [07:27:54] [PUSH] Silent push received [07:27:54] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:27:54 +0000, appState=2, message_id=28806, type=nil [07:27:54] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [07:27:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:27:54 +0000 [07:27:54] [PUSH_TRACE] ⬇️ Processing embedded message_id=28806 [07:27:54] [PUSH_EMBED] 📩 Received embedded message: id=28806, type=0, sender=Esra [07:27:54] [PUSH_TRACE] ⬇️ Message details: text="Good morning my love ♥️...", datesent=2026-04-23 05:06:01 [07:27:54] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [07:27:54] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28806 [07:27:54] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28806 [07:27:54] [CLEANUP] No old timer messages to delete [07:27:54] [PUSH_EMBED] ✅ Saved message 28806 to local DB (sync) [07:27:54] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28806 [07:27:54] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28806 [07:27:54] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28806 [07:27:54] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [07:27:54] [PUSH_EMBED] Created new cache with embedded message 28806 [07:27:54] [PUSH_TRACE] 📦 ✅ Created new cache with message 28806 [07:27:54] [PUSH_TRACE] 📦 EXITING cache update queue for message 28806 [07:27:54] [PUSH_EMBED] Fetching evolution data for message 28806 in background [07:27:54] [PUSH_EMBED] ✅ Fully processed message 28806 [07:27:54] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28806 [07:27:54] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28806], handled=true [07:27:54] [PUSH] Embedded message handled instantly from silent push [07:27:54] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [07:27:54] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28806 [07:27:54] [PUSH_EMBED] Got evolution data for message 28806, saving to local DB [07:27:54] [PUSH_EMBED] Saved evolution data for message 28806 [07:27:54] [PUSH] APNs token: 6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c [07:27:54] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":1,"removed_from_other_channels":0} [07:27:54] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [07:27:54] [USER] ✅ User registered successfully [07:27:54] [PUSH] User registration after token update: success [07:27:56] [PRELOAD] Cache already valid (1 messages), skipping pre-load [07:27:57] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [07:27:57] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:27:58] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:27:58] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798, 28797] [07:27:58] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[28806] [07:27:58] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:27:58] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798, 28797] [07:27:58] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [07:27:58] [BACKGROUND] Pre-downloaded 0 thumbnails [07:27:58] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [07:28:38] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [07:28:38] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:28:38] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [07:28:38] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [07:28:38] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [07:28:38] [CLIENT_SIG] WebSocket opened [07:28:38] [CLIENT_SIG] HELLO sent as client for session ILUIWU [07:28:38] [CLIENT_SIG] Connected! clientId=TYFzDLmYH7n7UmPH [07:28:38] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [07:28:38] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:28:39] [PIN_AUTH] Correct PIN [07:28:40] [SECURITY] Restored real session: ILUIWU [07:28:40] [SECURITY] Restored real session: ILUIWU [07:28:40] [SECURITY] Saved real session: ILUIWU [07:28:40] [SCENE] Launched directly to chat view with sessionId: ILUIWU [07:28:40] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [07:28:40] [UPLOAD_QUEUE] ✅ Database integrity check passed [07:28:40] [UPLOAD_QUEUE] Active background session tasks: 0 (standard uploads now use foreground session, so this should be 0 after the fix) [07:28:40] Documents Directory: /var/mobile/Containers/Data/Application/F022C66D-1F7D-4B3B-8B5B-832C2ABFA889/Documents [07:28:40] [UPLOAD_QUEUE] Found 0 pending uploads to resume [07:28:40] [CAPTURE_HOST] live-feed moved hosted view to plain container [07:28:40] [THEME] Applying current theme [07:28:40] [CHAT] Applied day theme (mode: day) [07:28:40] [SECURITY] Saved real session: ILUIWU [07:28:40] [CLIENT_SIG] Setting up client signaling for session: ILUIWU [07:28:40] [CLIENT_SIG] Already connected/connecting to session ILUIWU [07:28:40] [NETWORK] Network monitor started [07:28:40] [NETWORK] Status changed: connected [07:28:40] Did transition [07:28:40] [MODE] 🔍 updateModeUI called - currentTabIndex=0, sessionId=ILUIWU [07:28:40] [VIEWER] Screen lock enabled - normal idle behavior [07:28:40] [QUERY] 🔍 Creating query connection for iOS broadcast: iosILUIWU [07:28:40] [VCC] ========== VideoConnectionClass INIT ========== [07:28:40] [VCC] Session: iosILUIWU, ViewIdx: 0, AgentId: nil [07:28:40] [DATA AUDIO] ========== setupWebRTC() START ========== [07:28:40] [DATA AUDIO] Using data channel for audio - bypassing WebRTC audio device [07:28:40] [DATA AUDIO] Creating encoder/decoder factories... [07:28:40] [CODEC] Viewer - Available video codecs: H264, H264, VP8, VP9, AV1 [07:28:40] [CODEC] Viewer selected encoder: AV1 (best quality) [07:28:40] [DATA AUDIO] Creating RTCPeerConnectionFactory... [07:28:40] [DATA AUDIO] ✅ Factory created [07:28:40] [DATA AUDIO] RTCAudioSession locked [07:28:40] [DATA AUDIO] Set useManualAudio=true, isAudioEnabled=false [07:28:40] [DATA AUDIO] RTCAudioSession unlocked [07:28:40] [DATA AUDIO] Skipping AVAudioSession config - handled by DataChannelAudioPlayer [07:28:40] [VCC] Initial ICE servers: ["stun:stun.l.google.com:19302", "turn:crivello.dyndns.org:3478?transport=udp", "turn:crivello.dyndns.org:3478?transport=tcp", "turns:crivello.dyndns.org:5349?transport=tcp"] [07:28:40] [WS] Creating new WebSocket - isQueryOnly=false, connectionStr=iosILUIWU [07:28:40] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:28:40] [QUERY] ✅ tempQueryConnection created for iosILUIWU [07:28:40] [VIEWER_INIT] Already have 50 messages - just filtering for tab [07:28:40] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [07:28:40] [EVENT_POLL] Event polling disabled - using WebSocket events instead [07:28:40] [ORIENTATION] Updated pagingScrollView height to 247.5 for width 440.0 [07:28:40] Did transition [07:28:40] [TABLEVIEW] cellForRowAt index 0 out of bounds (count=0) [07:28:40] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [07:28:40] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [07:28:40] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:28:40] [CAPTURE] Live-feed protection [view-will-appear] - fullscreen=false, isCaptured=false, secureReady=true [07:28:40] [READBY_OPT] No message IDs to fetch - skipping server call [07:28:40] [MIGRATION] No messages need sender_name backfill [07:28:40] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [07:28:40] [CAPTURE] Refresh overlay [view-will-appear] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [07:28:40] [GALLERY_DB] Loading ALL media messages for session: ILUIWU [07:28:40] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28808, maxMemoryId=28806 [07:28:40] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28808 [07:28:40] [GALLERY_DB] Raw datesent for msg 28740: '2026-04-22 16:15:17' [07:28:40] [GALLERY_DB] Raw datesent for msg 28734: '2026-04-22 16:14:41' [07:28:40] [GALLERY_DB] Raw datesent for msg 28718: '2026-04-22 12:02:50' [07:28:40] [USER] ✅ User registered successfully [07:28:40] [USER] User registration successful [07:28:40] [INCREMENTAL_SYNC] ✅ No new messages [07:28:40] [GALLERY_DB] ✅ Loaded 1255 media messages [07:28:40] [GALLERY] Filtered 1255 -> 1212 (only with local thumbnails) [07:28:40] [GALLERY] First 5 after sort (newest first): [07:28:40] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [07:28:40] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [07:28:40] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [07:28:40] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [07:28:40] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [07:28:40] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [07:28:40] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [07:28:40] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [07:28:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28806, 28805, 28804, 28803, 28802] [07:28:40] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [07:28:40] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798, 28797] [07:28:40] [RELOAD_TAB] 📊 Building chatRows from 50 messages [07:28:40] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=64, boundsH=758, forceScroll=true [07:28:40] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [07:28:40] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [07:28:40] [CELL_UPLOAD] configure: msgId=28718, file=5a447861140baa5d.jpg, senderId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=true, hasFilename=true, isGiphy=false, uploadStatus=0 [07:28:40] [CELL_UPLOAD] → no active progress, using msg.uploadStatus=0 → complete [07:28:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=5a447861140baa5d.jpg, overlayExists=true [07:28:40] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [07:28:40] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28805 → 28806 [07:28:40] [SERVER] Starting reconnect polling (5s interval) [07:28:40] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [07:28:40] [ICONS] Offset applied: -14.6 [07:28:40] [ICONS] New left margin: 11.2, New right margin: 11.3 [07:28:40] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [07:28:40] [ICONS] Chat center: (31.2, 87.0) [07:28:40] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [07:28:40] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [07:28:40] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [07:28:40] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [07:28:40] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [07:28:40] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [07:28:40] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [07:28:40] [ICONS] Screen width: 440.0 [07:28:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:28:40] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [07:28:40] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [07:28:40] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [07:28:40] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3886, currentOffset=3886 [07:28:40] [SCROLL] Scrolling to 3886, animated=false [07:28:40] [PUSH] Silent push received [07:28:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:28:40 +0000, appState=0, message_id=28808, type=nil [07:28:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [07:28:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:28:40 +0000 [07:28:40] [PUSH_TRACE] ⬇️ Processing embedded message_id=28808 [07:28:40] [PUSH_EMBED] 📩 Received embedded message: id=28808, type=0, sender=Esra [07:28:40] [PUSH_TRACE] ⬇️ Message details: text="🤭...", datesent=2026-04-23 05:28:06 [07:28:40] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [07:28:40] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28808 [07:28:40] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28808 [07:28:40] [PUSH_EMBED] ✅ Saved message 28808 to local DB (sync) [07:28:40] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28808 [07:28:40] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28808 [07:28:40] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28808 [07:28:40] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [07:28:40] [PUSH_EMBED] Created new cache with embedded message 28808 [07:28:40] [PUSH_TRACE] 📦 ✅ Created new cache with message 28808 [07:28:40] [PUSH_TRACE] 📦 EXITING cache update queue for message 28808 [07:28:40] [PUSH_EMBED] Fetching evolution data for message 28808 in background [07:28:40] [PUSH_EMBED] ✅ Fully processed message 28808 [07:28:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28808 [07:28:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28808], handled=true [07:28:40] [PUSH] Embedded message handled instantly from silent push [07:28:40] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [07:28:40] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28808 [07:28:40] [PUSH_EMBED] Got evolution data for message 28808, saving to local DB [07:28:40] [PUSH_EMBED] Saved evolution data for message 28808 [07:28:40] new_session POST ok: token len=157 [07:28:40] HELLO → sent (fetched token, role=query) [07:28:40] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [07:28:40] [PURGE] ⚠️ Media cache purge DISABLED for debugging [07:28:40] [UNSENT_RETRY] Checking for unsent messages... [07:28:40] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [07:28:40] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [07:28:40] [UPLOAD_RECOVERY] Session: ILUIWU [07:28:40] [UPLOAD_RECOVERY] ✅ No stuck uploads found [07:28:40] [UPLOAD_RECOVERY] Checking recent media messages on server... [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28718, file=5a447861140baa5d.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28714, file=e76ecd0d17b4f8dc.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28713, file=55cec5a39e78220e.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28702, file=7035e780531e78e1.mp4, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28699, file=2f5ae78d2850faab.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28640, file=f2317109ac17cc77.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28628, file=0d1b02a5c4f3382f.mp4, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28626, file=4d9299b5e3f3a7b2.mp4, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28623, file=b68d406973c2b694.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28617, file=4804eb8220be9527.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28518, file=3d48ecdbf17858a0.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28504, file=df692a622eff9fa3.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28361, file=172491b1e798c2e9.jpg, upload_status=complete [07:28:40] [UPLOAD_RECOVERY] Verifying 13 media files exist on server... [07:28:40] [PENDING_UPLOAD] Total pending upload messages: 0 [07:28:40] [UNSENT_RETRY] No unsent messages found [07:28:40] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [07:28:40] [PUSH_TRACE] 👁️ handlePushMessageReceived START [07:28:40] [PUSH_TRACE] 👁️ Received message id=28808, text="🤭..." [07:28:40] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [07:28:40] [PUSH_TRACE] 👁️ BEFORE insert: 50 messages, first 5 IDs: [28806, 28805, 28804, 28803, 28802] [07:28:40] [PUSH_TRACE] 👁️ Inserted message 28808 at index 0 [07:28:40] [PUSH_UI] Inserted message 28808 into UI (now 51 messages) [07:28:40] [PUSH_TRACE] 👁️ AFTER insert: 51 messages, first 5 IDs: [28808, 28806, 28805, 28804, 28803] [07:28:40] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [07:28:40] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:28:40] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [07:28:40] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798] [07:28:40] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:28:40] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28808 [07:28:40] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): 🤭, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("file_name"): , AnyHashable("sender_name"): Esra, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 05:28:06"; "file_name" = ""; "is_encrypted" = 0; message = "\Ud83e\Udd2d"; "message_id" = 28808; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28807; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message_id"): 28808, AnyHashable("datesent"): 2026-04-23 05:28:06, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 3; "content-available" = 1; "mutable-content" = 1; sound = default; }] [07:28:40] [PUSH_EMBED_VC] Message 28808 already in memory - skipping [07:28:40] [PUSH] ⚡ Embedded message handled directly in ViewController [07:28:40] [PUSH] Parsed message_id: 28808 [07:28:40] [PUSH] Parsed operation_type: 0 [07:28:40] [PUSH] Taking direct action: opType=0, messageId=28808 [07:28:40] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28808 [07:28:40] [PUSH] ⚡ Message 28808 already in memory - skipping duplicate notification entirely [07:28:40] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [07:28:40] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [07:28:40] [SIG] hello_ok received for query connection - ready to query agents [07:28:40] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [07:28:40] [SIG] get_agents request sent for sessionId=ILUIWU [07:28:40] [SIG] get_agents request sent for sessionId=iosILUIWU [07:28:40] [SERVER] Stopped reconnect polling [07:28:40] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:28:40] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [07:28:40] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [07:28:40] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:28:40] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [07:28:40] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [07:28:40] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [07:28:40] [SERVER] Starting reconnect polling (5s interval) [07:28:41] [UPLOAD_RECOVERY] ✅ All media files verified on server [07:28:41] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=70 [07:28:41] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28808, 28806, 28805, 28804, 28803] [07:28:41] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [07:28:41] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798] [07:28:41] [RELOAD_TAB] 📊 Building chatRows from 51 messages [07:28:41] [SCROLL] wasNearBottom=true, threshold=758, offset=3886, contentH=4644, boundsH=758, forceScroll=true [07:28:41] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [07:28:41] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28806 → 28808 [07:28:41] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [07:28:41] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4066, currentOffset=4066 [07:28:41] [SCROLL] Scrolling to 4066, animated=false [07:28:41] [SCROLL] 💓 alive, visible=43...49, rows=53, estHeight=0.0, heightCalls=64 [07:28:41] [SCROLL_BTN] Showing button - 305pt from bottom > half 223pt [07:28:42] [SCROLL_END_DECEL] messagesTable offsetY=4377, insetTop=0, pendingVelocityY=0.0 [07:28:42] [PUSH] Silent push received [07:28:42] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:28:42 +0000, appState=0, message_id=nil, type=nil [07:28:42] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[28808] [07:28:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:28:42 +0000 [07:28:42] [PUSH_EMBED] No embedded message_data in notification [07:28:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [07:28:42] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28808], handled=false [07:28:42] [PUSH] No embedded data, pre-loading messages from server [07:28:42] [PUSH_PRELOAD] Fetching messages for instant display cache [07:28:42] [PUSH] Silent push received [07:28:42] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:28:42 +0000, appState=0, message_id=nil, type=nil [07:28:42] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[28808] [07:28:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:28:42 +0000 [07:28:42] [PUSH_EMBED] No embedded message_data in notification [07:28:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [07:28:42] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28808], handled=false [07:28:42] [PUSH] No embedded data, pre-loading messages from server [07:28:42] [PUSH_PRELOAD] Fetching messages for instant display cache [07:28:42] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [07:28:42] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28808, 28807, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[28808] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28808, 28807, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:42] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [07:28:42] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [07:28:42] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798] [07:28:42] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:28:42] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28808 [07:28:42] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28806, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [07:28:42] [PUSH] Parsed message_id: 28806 [07:28:42] [PUSH] Parsed operation_type: 3 [07:28:42] [PUSH] Taking direct action: opType=3, messageId=28806 [07:28:42] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28806 [07:28:42] [CLIENT_SIG] Event received: type=3 messageId=28806 [07:28:42] [WS_EVENT] Received event: type=3, messageId=28806 [07:28:42] [WS_EVENT] Read receipt for message 28806 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:28:42] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [07:28:42] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28808, 28807, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28808, 28807, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:28:42] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28808, 28807, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:42] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [07:28:42] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [07:28:42] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799, 28798] [07:28:42] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:28:42] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28808 [07:28:42] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28808] [07:28:42] [PUSH] Parsed message_id: 28808 [07:28:42] [PUSH] Parsed operation_type: 3 [07:28:42] [PUSH] Taking direct action: opType=3, messageId=28808 [07:28:42] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28808 [07:28:42] [CLIENT_SIG] Event received: type=3 messageId=28808 [07:28:42] [WS_EVENT] Received event: type=3, messageId=28808 [07:28:42] [WS_EVENT] Read receipt for message 28808 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:28:45] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [07:28:45] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [07:28:45] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=52 [07:28:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=5 [07:28:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-1, 28808, 28806, 28805, 28804] [07:28:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [07:28:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:45] [RELOAD_TAB] 📊 Building chatRows from 52 messages [07:28:45] [SCROLL] wasNearBottom=true, threshold=447, offset=4377, contentH=4824, boundsH=447, forceScroll=false [07:28:45] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [07:28:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [07:28:45] [SCROLL] 💓 alive, visible=48...53, rows=54, estHeight=0.0, heightCalls=115 [07:28:45] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [07:28:45] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [07:28:45] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4454, currentOffset=4454 [07:28:45] [SCROLL] Scrolling to 4454, animated=true [07:28:45] [CLIENT_SIG] Event received: type=0 messageId=28809 [07:28:45] [WS_EVENT] Received event: type=0, messageId=28809 [07:28:45] [WS_EVENT] 📨 New message notification (msgId=28809) - triggering incremental refresh, currentMsgCount=52 [07:28:45] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [07:28:45] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28808, maxMemoryId=28808 [07:28:45] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28808 [07:28:45] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28809,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 05:28:45"} [07:28:45] [CHAT] receive_message.php JSON: ["message_type": 0, "session_id": ILUIWU, "file_name": , "ok": 1, "message_id": 28809, "datesent_utc": 2026-04-23 05:28:45] [07:28:45] [DB_UPGRADE] Upgrading message ID: -1 → 28809, preserveOriginalDate=false [07:28:45] [DB_UPGRADE] ✅ Upgraded -1 → 28809 with send_status=0, 1 row(s) affected [07:28:45] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28809 [07:28:45] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28809 [07:28:45] ReloadData 9 [07:28:45] [SERVER] Polling - attempting to reconnect... [07:28:45] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:28:45] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:28:46] [INCREMENTAL_SYNC] ✅ Found 1 new messages [07:28:46] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28809] [07:28:46] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:46] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:46] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [07:28:46] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [07:28:46] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [07:28:46] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [07:28:46] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28809, 28808, 28806, 28805, 28804] [07:28:46] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [07:28:46] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800, 28799] [07:28:46] [RELOAD_TAB] 📊 Building chatRows from 52 messages [07:28:46] [SCROLL] wasNearBottom=true, threshold=447, offset=4454, contentH=4901, boundsH=447, forceScroll=true [07:28:46] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [07:28:46] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [07:28:46] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4454, currentOffset=4454 [07:28:46] [SCROLL] Scrolling to 4454, animated=false [07:28:47] [MENU] dismissAnyExistingMenu called [07:28:47] [MENU] dismissAnyExistingMenu completed [07:28:47] [EMOJI_PICKER] Starting emoji picker for message 28808 [07:28:47] [MENU] Created button 'Reply' at index 0 [07:28:47] [MENU] Created button 'Copy' at index 1 [07:28:47] [MENU] Created button 'Delete' at index 2 [07:28:47] [MENU] Menu added at y=558.0 [07:28:47] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [07:28:47] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [07:28:47] [EMOJI_PICKER] ✅ Picker shown at y=318.0 [07:28:47] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 223pt [07:28:48] [SCROLL_END_DECEL] messagesTable offsetY=4149, insetTop=0, pendingVelocityY=0.0 [07:28:48] [SCROLL_END_DECEL] messagesTable offsetY=4527, insetTop=0, pendingVelocityY=0.0 [07:28:50] [SERVER] Polling - attempting to reconnect... [07:28:50] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:28:50] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:28:56] [SERVER] Polling - attempting to reconnect... [07:28:56] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:28:56] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:29:00] [REPLY_DEBUG] 📤 didTapSend - Sending message WITH reply to message 28808 [07:29:00] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [07:29:00] [REPLY_DEBUG] 🔗 sendMessage START - Captured reply to message 28808 [07:29:00] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=53 [07:29:00] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=9 [07:29:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-2, 28809, 28808, 28806, 28805] [07:29:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [07:29:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800] [07:29:00] [RELOAD_TAB] 📊 Building chatRows from 53 messages [07:29:00] [SCROLL] wasNearBottom=true, threshold=447, offset=4527, contentH=4901, boundsH=447, forceScroll=false [07:29:00] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [07:29:00] [SCROLL] 💓 alive, visible=49...54, rows=55, estHeight=0.0, heightCalls=60 [07:29:00] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=0 [07:29:00] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [07:29:00] [REPLY_DEBUG] 🔗 sendMessage HTTP BODY - Added reply_to_id=28808 to request body [07:29:00] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4550, currentOffset=4550 [07:29:00] [SCROLL] Scrolling to 4550, animated=true [07:29:00] [SCROLL_END_DECEL] messagesTable offsetY=4550, insetTop=0, pendingVelocityY=0.0 [07:29:00] [CLIENT_SIG] Event received: type=0 messageId=28810 [07:29:00] [WS_EVENT] Received event: type=0, messageId=28810 [07:29:00] [WS_EVENT] 📨 New message notification (msgId=28810) - triggering incremental refresh, currentMsgCount=53 [07:29:00] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [07:29:00] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28809, maxMemoryId=28809 [07:29:00] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28809 [07:29:00] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28810,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 05:29:00"} [07:29:00] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 05:29:00, "message_type": 0, "message_id": 28810, "file_name": , "ok": 1, "session_id": ILUIWU] [07:29:00] [DB_UPGRADE] Upgrading message ID: -2 → 28810, preserveOriginalDate=false [07:29:00] [DB_UPGRADE] ✅ Upgraded -2 → 28810 with send_status=0, 1 row(s) affected [07:29:00] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28810 [07:29:00] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28810 [07:29:00] ReloadData 9 [07:29:00] [INCREMENTAL_SYNC] ✅ Found 1 new messages [07:29:00] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28810] [07:29:00] [REPLY_LOAD] ViewController+Database mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:29:00] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28810, 28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800] [07:29:00] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28810, 28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800] [07:29:00] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [07:29:00] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [07:29:00] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [07:29:00] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=117 [07:29:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28810, 28809, 28808, 28806, 28805] [07:29:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [07:29:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28810, 28809, 28808, 28806, 28805, 28804, 28803, 28802, 28801, 28800] [07:29:00] [RELOAD_TAB] 📊 Building chatRows from 53 messages [07:29:00] [SCROLL] wasNearBottom=true, threshold=447, offset=4550, contentH=4997, boundsH=447, forceScroll=true [07:29:00] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [07:29:00] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [07:29:00] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4550, currentOffset=4550 [07:29:00] [SCROLL] Scrolling to 4550, animated=false [07:29:00] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [07:29:00] [SERVER] Polling - attempting to reconnect... [07:29:00] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:29:00] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:29:01] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=14ms [07:29:02] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 1212 (only with local thumbnails) [07:30:57] [GALLERY] First 5 after sort (newest first): [07:30:57] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [07:30:57] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [07:30:57] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [07:30:57] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [07:30:57] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [07:30:57] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [07:30:57] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [07:30:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [07:30:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=18, first5Ids=[28811, 28810, 28809, 28808, 28807] [07:30:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 18 messages [07:30:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:57] [RELOAD_TAB] 📊 Building chatRows from 18 messages [07:30:57] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=64, boundsH=758, forceScroll=true [07:30:57] [RELOAD_TAB] 📊 Built 20 chatRows, estHeight=0.0 [07:30:57] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [07:30:57] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=32 [07:30:57] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28810 → 28811 [07:30:57] [SERVER] Starting reconnect polling (5s interval) [07:30:57] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [07:30:57] [ICONS] Offset applied: -14.6 [07:30:57] [ICONS] New left margin: 11.2, New right margin: 11.3 [07:30:57] [READBY_ENRICH] Enriched 0/0 unsettled messages with readBy data [07:30:57] [ICONS] Chat center: (31.2, 87.0) [07:30:57] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [07:30:57] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [07:30:57] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [07:30:57] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [07:30:57] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [07:30:57] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [07:30:57] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [07:30:57] [ICONS] Screen width: 440.0 [07:30:57] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:30:57] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [07:30:57] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [07:30:57] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [07:30:57] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=793, currentOffset=793 [07:30:57] [SCROLL] Scrolling to 793, animated=false [07:30:57] [PUSH] Silent push received [07:30:57] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:30:57 +0000, appState=0, message_id=28811, type=nil [07:30:57] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [07:30:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:30:57 +0000 [07:30:57] [PUSH_TRACE] ⬇️ Processing embedded message_id=28811 [07:30:57] [PUSH_EMBED] 📩 Received embedded message: id=28811, type=0, sender=Esra [07:30:57] [PUSH_TRACE] ⬇️ Message details: text="Noo babyy...", datesent=2026-04-23 05:30:40 [07:30:57] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [07:30:57] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28811 [07:30:57] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28811 [07:30:57] [PUSH_EMBED] ✅ Saved message 28811 to local DB (sync) [07:30:57] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28811 [07:30:57] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28811 [07:30:57] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28811 [07:30:57] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [07:30:57] [PUSH_EMBED] Created new cache with embedded message 28811 [07:30:57] [PUSH_TRACE] 📦 ✅ Created new cache with message 28811 [07:30:57] [PUSH_TRACE] 📦 EXITING cache update queue for message 28811 [07:30:57] [PUSH_EMBED] Fetching evolution data for message 28811 in background [07:30:57] [PUSH_EMBED] ✅ Fully processed message 28811 [07:30:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28811 [07:30:57] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28811], handled=true [07:30:57] [PUSH] Embedded message handled instantly from silent push [07:30:57] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [07:30:57] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28811 [07:30:57] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=18 [07:30:57] [PURGE] ⚠️ Media cache purge DISABLED for debugging [07:30:57] [UNSENT_RETRY] Checking for unsent messages... [07:30:57] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [07:30:57] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [07:30:57] [UPLOAD_RECOVERY] Session: ILUIWU [07:30:57] [UPLOAD_RECOVERY] ✅ No stuck uploads found [07:30:57] [UPLOAD_RECOVERY] Checking recent media messages on server... [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28718, file=5a447861140baa5d.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28714, file=e76ecd0d17b4f8dc.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28713, file=55cec5a39e78220e.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28702, file=7035e780531e78e1.mp4, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28699, file=2f5ae78d2850faab.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28640, file=f2317109ac17cc77.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28628, file=0d1b02a5c4f3382f.mp4, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28626, file=4d9299b5e3f3a7b2.mp4, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28623, file=b68d406973c2b694.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28617, file=4804eb8220be9527.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28518, file=3d48ecdbf17858a0.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28504, file=df692a622eff9fa3.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28361, file=172491b1e798c2e9.jpg, upload_status=complete [07:30:57] [UPLOAD_RECOVERY] Verifying 13 media files exist on server... [07:30:57] [PENDING_UPLOAD] Total pending upload messages: 0 [07:30:57] [UNSENT_RETRY] No unsent messages found [07:30:57] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [07:30:57] [PUSH_TRACE] 👁️ handlePushMessageReceived START [07:30:57] [PUSH_TRACE] 👁️ Received message id=28811, text="Noo babyy..." [07:30:57] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [07:30:57] [PUSH_UI] Message 28811 already in memory - skipping insert [07:30:57] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [07:30:57] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 18 msgs, IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:57] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:30:57] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28811 [07:30:57] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 05:30:40"; "file_name" = ""; "is_encrypted" = 0; message = "Noo babyy"; "message_id" = 28811; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28810; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): Noo babyy, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): Esra, AnyHashable("session_id"): ILUIWU, AnyHashable("timer"): 0, AnyHashable("message_type"): 0, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("datesent"): 2026-04-23 05:30:40, AnyHashable("message_id"): 28811, AnyHashable("thumb_file_name"): ] [07:30:57] [PUSH_EMBED_VC] Message 28811 already in memory - skipping [07:30:57] [PUSH] ⚡ Embedded message handled directly in ViewController [07:30:57] [PUSH] Parsed message_id: 28811 [07:30:57] [PUSH] Parsed operation_type: 0 [07:30:57] [PUSH] Taking direct action: opType=0, messageId=28811 [07:30:57] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28811 [07:30:57] [PUSH] ⚡ Message 28811 already in memory - skipping duplicate notification entirely [07:30:57] new_session POST ok: token len=157 [07:30:57] HELLO → sent (fetched token, role=query) [07:30:57] [PUSH_EMBED] Got evolution data for message 28811, saving to local DB [07:30:57] [PUSH_EMBED] Saved evolution data for message 28811 [07:30:57] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [07:30:57] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [07:30:57] [SIG] hello_ok received for query connection - ready to query agents [07:30:57] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [07:30:57] [SIG] get_agents request sent for sessionId=ILUIWU [07:30:57] [SIG] get_agents request sent for sessionId=iosILUIWU [07:30:57] [SERVER] Stopped reconnect polling [07:30:57] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:30:57] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [07:30:57] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [07:30:57] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:30:57] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [07:30:57] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [07:30:57] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [07:30:57] [SERVER] Starting reconnect polling (5s interval) [07:30:57] [UPLOAD_RECOVERY] ✅ All media files verified on server [07:30:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=40 [07:30:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=18, first5Ids=[28811, 28810, 28809, 28808, 28807] [07:30:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 18 messages [07:30:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:57] [RELOAD_TAB] 📊 Building chatRows from 18 messages [07:30:57] [SCROLL] wasNearBottom=true, threshold=758, offset=793, contentH=1551, boundsH=758, forceScroll=true [07:30:57] [RELOAD_TAB] 📊 Built 20 chatRows, estHeight=0.0 [07:30:57] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=29 [07:30:57] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=793, currentOffset=793 [07:30:57] [SCROLL] Scrolling to 793, animated=false [07:30:58] [MUTE] Status sent to server: muted=0, response code=200 [07:30:58] [MUTE] Status sent to server: muted=0, response code=200 [07:30:59] [SCROLL] 💓 alive, visible=11...16, rows=20, estHeight=0.0, heightCalls=29 [07:30:59] [SCROLL_BTN] Showing button - 296pt from bottom > half 223pt [07:30:59] [SCROLL_END_DECEL] messagesTable offsetY=1104, insetTop=0, pendingVelocityY=0.0 [07:30:59] [PUSH] Silent push received [07:30:59] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:30:59 +0000, appState=0, message_id=nil, type=nil [07:30:59] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[28811] [07:30:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:30:59 +0000 [07:30:59] [PUSH_EMBED] No embedded message_data in notification [07:30:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [07:30:59] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28811], handled=false [07:30:59] [PUSH] No embedded data, pre-loading messages from server [07:30:59] [PUSH_PRELOAD] Fetching messages for instant display cache [07:30:59] [PUSH] Silent push received [07:30:59] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 05:30:59 +0000, appState=0, message_id=nil, type=nil [07:30:59] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=1, IDs=[28811] [07:30:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 05:30:59 +0000 [07:30:59] [PUSH_EMBED] No embedded message_data in notification [07:30:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [07:30:59] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=1, IDs=[28811], handled=false [07:30:59] [PUSH] No embedded data, pre-loading messages from server [07:30:59] [PUSH_PRELOAD] Fetching messages for instant display cache [07:30:59] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [07:30:59] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:30:59] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=1, IDs=[28811] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [07:30:59] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [07:30:59] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 18 msgs, IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:30:59] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28811 [07:30:59] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28807, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [07:30:59] [PUSH] Parsed message_id: 28807 [07:30:59] [PUSH] Parsed operation_type: 3 [07:30:59] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [07:30:59] [PUSH] Taking direct action: opType=3, messageId=28807 [07:30:59] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28807 [07:30:59] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:30:59] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:30:59] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [07:30:59] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [07:30:59] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 18 msgs, IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:30:59] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [07:30:59] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28811 [07:30:59] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28811, AnyHashable("operation_type"): 3] [07:30:59] [PUSH] Parsed message_id: 28811 [07:30:59] [PUSH] Parsed operation_type: 3 [07:30:59] [PUSH] Taking direct action: opType=3, messageId=28811 [07:30:59] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28811 [07:31:00] [CLIENT_SIG] Event received: type=3 messageId=28807 [07:31:00] [WS_EVENT] Received event: type=3, messageId=28807 [07:31:00] [WS_EVENT] Read receipt for message 28807 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:31:00] [CLIENT_SIG] Event received: type=3 messageId=28811 [07:31:00] [WS_EVENT] Received event: type=3, messageId=28811 [07:31:00] [WS_EVENT] Read receipt for message 28811 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:31:01] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [07:31:01] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=18, isReloading=false [07:31:01] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=19 [07:31:01] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=5 [07:31:01] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=19, first5Ids=[-1, 28811, 28810, 28809, 28808] [07:31:01] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 19 messages [07:31:01] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803] [07:31:01] [RELOAD_TAB] 📊 Building chatRows from 19 messages [07:31:01] [SCROLL] wasNearBottom=true, threshold=447, offset=1104, contentH=1551, boundsH=447, forceScroll=true [07:31:01] [RELOAD_TAB] 📊 Built 21 chatRows, estHeight=0.0 [07:31:01] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=27 [07:31:01] [SCROLL] 💓 alive, visible=15...20, rows=21, estHeight=0.0, heightCalls=49 [07:31:01] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [07:31:01] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [07:31:01] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=true, nearBottom=true), maxY=1181, currentOffset=1181 [07:31:01] [SCROLL] Scrolling to 1181, animated=false [07:31:01] [CLIENT_SIG] Event received: type=0 messageId=28812 [07:31:01] [WS_EVENT] Received event: type=0, messageId=28812 [07:31:01] [WS_EVENT] 📨 New message notification (msgId=28812) - triggering incremental refresh, currentMsgCount=19 [07:31:01] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=19 [07:31:01] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28811, maxMemoryId=28811 [07:31:01] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28811 [07:31:01] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28812,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 05:31:01"} [07:31:01] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 05:31:01, "message_id": 28812, "ok": 1, "file_name": , "message_type": 0, "session_id": ILUIWU] [07:31:01] [DB_UPGRADE] Upgrading message ID: -1 → 28812, preserveOriginalDate=false [07:31:01] [DB_UPGRADE] ✅ Upgraded -1 → 28812 with send_status=0, 1 row(s) affected [07:31:01] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28812 [07:31:01] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28812 [07:31:01] ReloadData 9 [07:31:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [07:31:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28812] [07:31:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 19 msgs, first 10 IDs=[28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803] [07:31:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 19, first 10 IDs=[28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803] [07:31:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [07:31:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=19 [07:31:02] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=19 [07:31:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=26 [07:31:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=19, first5Ids=[28812, 28811, 28810, 28809, 28808] [07:31:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 19 messages [07:31:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803] [07:31:02] [RELOAD_TAB] 📊 Building chatRows from 19 messages [07:31:02] [SCROLL] wasNearBottom=true, threshold=447, offset=1181, contentH=1628, boundsH=447, forceScroll=true [07:31:02] [RELOAD_TAB] 📊 Built 21 chatRows, estHeight=0.0 [07:31:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=26 [07:31:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=1181, currentOffset=1181 [07:31:02] [SCROLL] Scrolling to 1181, animated=false [07:31:02] [SERVER] Polling - attempting to reconnect... [07:31:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:31:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:31:06] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [07:31:06] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=19, isReloading=false [07:31:06] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=20 [07:31:06] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=26 [07:31:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=20, first5Ids=[-2, 28812, 28811, 28810, 28809] [07:31:06] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 20 messages [07:31:06] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804] [07:31:06] [RELOAD_TAB] 📊 Building chatRows from 20 messages [07:31:06] [SCROLL] wasNearBottom=true, threshold=447, offset=1181, contentH=1628, boundsH=447, forceScroll=false [07:31:06] [RELOAD_TAB] 📊 Built 22 chatRows, estHeight=0.0 [07:31:06] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=28 [07:31:06] [SCROLL] 💓 alive, visible=16...21, rows=22, estHeight=0.0, heightCalls=51 [07:31:06] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [07:31:06] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [07:31:06] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=1233, currentOffset=1233 [07:31:06] [SCROLL] Scrolling to 1233, animated=true [07:31:06] [CLIENT_SIG] Event received: type=0 messageId=28813 [07:31:06] [WS_EVENT] Received event: type=0, messageId=28813 [07:31:06] [WS_EVENT] 📨 New message notification (msgId=28813) - triggering incremental refresh, currentMsgCount=20 [07:31:06] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=20 [07:31:06] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28812, maxMemoryId=28812 [07:31:06] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28812 [07:31:06] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28813,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 05:31:06"} [07:31:06] [CHAT] receive_message.php JSON: ["message_id": 28813, "session_id": ILUIWU, "ok": 1, "file_name": , "message_type": 0, "datesent_utc": 2026-04-23 05:31:06] [07:31:06] [DB_UPGRADE] Upgrading message ID: -2 → 28813, preserveOriginalDate=false [07:31:06] [DB_UPGRADE] ✅ Upgraded -2 → 28813 with send_status=0, 1 row(s) affected [07:31:06] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28813 [07:31:06] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28813 [07:31:06] ReloadData 9 [07:31:06] [INCREMENTAL_SYNC] ✅ Found 1 new messages [07:31:06] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28813] [07:31:06] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 20 msgs, first 10 IDs=[28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804] [07:31:06] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 20, first 10 IDs=[28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804] [07:31:06] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [07:31:06] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=20 [07:31:06] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=20 [07:31:06] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=28 [07:31:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=20, first5Ids=[28813, 28812, 28811, 28810, 28809] [07:31:06] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 20 messages [07:31:06] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804] [07:31:06] [RELOAD_TAB] 📊 Building chatRows from 20 messages [07:31:06] [SCROLL] wasNearBottom=true, threshold=447, offset=1233, contentH=1680, boundsH=447, forceScroll=true [07:31:06] [RELOAD_TAB] 📊 Built 22 chatRows, estHeight=0.0 [07:31:06] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=28 [07:31:06] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=1233, currentOffset=1233 [07:31:06] [SCROLL] Scrolling to 1233, animated=false [07:31:07] [SERVER] Polling - attempting to reconnect... [07:31:07] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:31:07] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:31:12] [SERVER] Polling - attempting to reconnect... [07:31:12] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:31:12] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:31:16] [NETWORK] Status changed: connected [07:31:17] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [07:31:17] [SERVER] Polling - attempting to reconnect... [07:31:17] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:31:17] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:31:17] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=6ms [07:31:22] [SERVER] Polling - attempting to reconnect... [07:31:22] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:31:22] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:31:23] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [07:31:23] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=20, isReloading=false [07:31:23] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=21 [07:31:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=28 [07:31:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=21, first5Ids=[-3, 28813, 28812, 28811, 28810] [07:31:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 21 messages [07:31:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-3, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:31:23] [RELOAD_TAB] 📊 Building chatRows from 21 messages [07:31:23] [SCROLL] wasNearBottom=true, threshold=429, offset=1233, contentH=1680, boundsH=429, forceScroll=false [07:31:23] [RELOAD_TAB] 📊 Built 23 chatRows, estHeight=0.0 [07:31:23] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=29 [07:31:23] [SCROLL] 💓 alive, visible=16...22, rows=23, estHeight=0.0, heightCalls=52 [07:31:23] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [07:31:23] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [07:31:23] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=1306, currentOffset=1306 [07:31:23] [SCROLL] Scrolling to 1306, animated=true [07:31:23] [CLIENT_SIG] Event received: type=0 messageId=28814 [07:31:23] [WS_EVENT] Received event: type=0, messageId=28814 [07:31:23] [WS_EVENT] 📨 New message notification (msgId=28814) - triggering incremental refresh, currentMsgCount=21 [07:31:23] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=21 [07:31:23] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28813, maxMemoryId=28813 [07:31:23] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28813 [07:31:23] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28814,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 05:31:23"} [07:31:23] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "datesent_utc": 2026-04-23 05:31:23, "ok": 1, "file_name": , "message_id": 28814, "message_type": 0] [07:31:23] [DB_UPGRADE] Upgrading message ID: -3 → 28814, preserveOriginalDate=false [07:31:23] [DB_UPGRADE] ✅ Upgraded -3 → 28814 with send_status=0, 1 row(s) affected [07:31:23] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 28814 [07:31:23] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 28814 [07:31:23] ReloadData 9 [07:31:23] [INCREMENTAL_SYNC] ✅ Found 1 new messages [07:31:23] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28814] [07:31:23] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 21 msgs, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:31:23] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 21, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:31:23] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [07:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=21 [07:31:23] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=21 [07:31:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=30 [07:31:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=21, first5Ids=[28814, 28813, 28812, 28811, 28810] [07:31:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 21 messages [07:31:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:31:23] [RELOAD_TAB] 📊 Building chatRows from 21 messages [07:31:23] [SCROLL] wasNearBottom=true, threshold=447, offset=1306, contentH=1753, boundsH=447, forceScroll=true [07:31:23] [RELOAD_TAB] 📊 Built 23 chatRows, estHeight=0.0 [07:31:23] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=29 [07:31:23] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=1306, currentOffset=1306 [07:31:23] [SCROLL] Scrolling to 1306, animated=false [07:31:24] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 2 minutes (157s) - will scroll to bottom [07:34:03] [NETWORK] Status changed: connected [07:34:03] [UPLOAD_RETRY] No pending uploads to retry [07:34:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=21 [07:34:03] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [07:34:03] [LIFECYCLE] WebRTC audio re-enabled [07:34:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [07:34:03] [CLIENT_SIG] Skipping connect - app in background (state=2) [07:34:03] [VIEWER] Reconnecting after background - querying agents [07:34:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=running [07:34:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:34:03] [UNSENT_RETRY] Checking for unsent messages... [07:34:03] [PENDING_UPLOAD] Total pending upload messages: 0 [07:34:03] [UNSENT_RETRY] No unsent messages found [07:34:03] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [07:34:03] [FOREGROUND] Enriched 0/3 unsettled messages with readBy data [07:34:03] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=21>21=false, maxId=28814>28814=false, shouldScroll=true [07:34:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=21 [07:34:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:34:03] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [07:34:03] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [07:34:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 21 msgs, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:34:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=166 vccs=0 [07:34:03] [GAP_FIX] maxMessageIdAtBackground=28814, currentMaxLocalId=28814 [07:34:03] [PUSH] handlePollEventsNotification userInfo: [:] [07:34:03] [PUSH] No message_id in userInfo [07:34:03] [PUSH] No operation_type in userInfo [07:34:03] [FAST_REFRESH] Evolution disabled - performing incremental sync [07:34:03] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28811, 28810, 28809, 28808, 28807, 28806, 28805, 28804, 28803, 28802] [07:34:03] [PUSH_TRACE] 📬 POLL: memory state: count=21, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:34:03] [FAST_REFRESH] Already have 21 messages in memory [07:34:03] [FAST_REFRESH] maxMemoryId=28814, maxLocalId=28814 [07:34:03] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [07:34:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=21 [07:34:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:34:03] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [07:34:03] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [07:34:03] [GAP_FIX] Incremental sync will use since_id=28814 (background max=28814, current DB max=28814) [07:34:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=21 [07:34:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28814, maxMemoryId=28814 [07:34:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28814 [07:34:03] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [07:34:03] [FAST_REFRESH] Enriched 3/3 unsettled messages with readBy data [07:34:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=21 [07:34:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:34:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:34:03] HELLO → sent (cached token, role=query) [07:34:03] [CLIENT_SIG] WebSocket opened [07:34:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [07:34:03] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [07:34:03] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [07:34:03] [SIG] hello_ok received for query connection - ready to query agents [07:34:03] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [07:34:03] [SIG] get_agents request sent for sessionId=ILUIWU [07:34:03] [SIG] get_agents request sent for sessionId=iosILUIWU [07:34:03] [SERVER] Stopped reconnect polling [07:34:03] [CLIENT_SIG] Connected! clientId=h7xmwdjD-mp2dsiI [07:34:03] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:34:03] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [07:34:03] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [07:34:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:34:03] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [07:34:03] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [07:34:03] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [07:34:03] [INCREMENTAL_SYNC] ✅ No new messages [07:34:03] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [07:34:03] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [07:34:03] [SERVER] Starting reconnect polling (5s interval) [07:34:03] [FAST_REFRESH] Incremental sync complete - 21 messages [07:34:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=3 [07:34:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=21, first5Ids=[28814, 28813, 28812, 28811, 28810] [07:34:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 21 messages [07:34:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:34:03] [RELOAD_TAB] 📊 Building chatRows from 21 messages [07:34:03] [SCROLL] wasNearBottom=true, threshold=758, offset=995, contentH=1753, boundsH=758, forceScroll=true [07:34:03] [RELOAD_TAB] 📊 Built 23 chatRows, estHeight=0.0 [07:34:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=32 [07:34:03] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=995, currentOffset=995 [07:34:03] [SCROLL] Scrolling to 995, animated=false [07:34:04] [PIN_AUTH] Correct PIN [07:34:04] [SECURITY] Restored real session: ILUIWU [07:34:04] [SECURITY] Restored real session: ILUIWU [07:34:04] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [07:34:04] [FAKE_AI] cancel() called, wasRunning=false [07:34:04] [FAKE MODE] Exiting fake mode, restoring real session [07:34:04] [SECURITY] Restored real session: ILUIWU [07:34:04] [SECURITY] Saved real session: ILUIWU [07:34:04] [FAKE MODE] ✅ Restored real session: ILUIWU [07:34:04] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [07:34:04] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [07:34:04] [USER] ✅ User registered successfully [07:34:04] [PUSH] User registration after token update: success [07:34:04] [FAKE MODE] Loaded 50 messages (limited to page size) [07:34:04] [READBY_OPT] Fetching readBy for 11 unsettled messages (targeted) [07:34:04] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [07:34:04] [AUTH] Cache had 50 messages, maxExistingId=28814, inserted 0 truly new [07:34:04] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>21=true, maxId=28814>28814=false, shouldScroll=true [07:34:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [07:34:04] [AUTH] UI update complete [07:34:04] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:34:04] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:34:04] [CELL_UPLOAD] configure: msgId=28734, file=653beabd4db198ba.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [07:34:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=653beabd4db198ba.jpg, overlayExists=true [07:34:04] [CELL_UPLOAD] configure: msgId=28740, file=adbb72082c79fd33.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [07:34:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=adbb72082c79fd33.jpg, overlayExists=true [07:34:04] [COMBINED_FETCH] Loaded 11 read receipts, 2 messages with reactions [07:34:04] [FAKE MODE] Enriched 11/11 unsettled messages with readBy data [07:34:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [07:34:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [07:34:05] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=91 [07:34:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28814, 28813, 28812, 28811, 28810] [07:34:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [07:34:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:34:05] [RELOAD_TAB] 📊 Building chatRows from 50 messages [07:34:05] [SCROLL] wasNearBottom=false, threshold=758, offset=995, contentH=4608, boundsH=758, forceScroll=true [07:34:05] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [07:34:05] [SCROLL] 💓 alive, visible=43...51, rows=52, estHeight=0.0, heightCalls=0 [07:34:05] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [07:34:05] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=false), maxY=3890, currentOffset=3890 [07:34:05] [SCROLL] Scrolling to 3890, animated=false [07:34:07] [LOCK] Lock button tapped - locking app immediately [07:34:07] [LOCK] Received lock app notification [07:34:08] [LIFECYCLE] App resigning active - cleared crash flag [07:34:08] [SERVER] Polling - attempting to reconnect... [07:34:08] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=true hasQueryConn=true wsState=running [07:34:08] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [07:34:09] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [07:34:09] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [07:34:09] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [07:34:09] [LIFECYCLE] App entering background - cleared crash flag [07:34:09] [CLIENT_SIG] Disconnecting [07:34:09] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [07:34:09] [DB] ✅ Chat database flushed (WAL checkpoint) before background [07:34:09] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:34:09] [LIFECYCLE] Background snapshot: count=50, maxId=28814 [07:34:09] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [07:34:09] [WS] Canceling WebSocket for query connection to iosILUIWU [07:34:09] In cleanupPeer [07:34:09] In cleanupPeer [07:34:09] [LIFECYCLE] WebRTC audio disabled [07:34:09] [LIFECYCLE] AVAudioSession deactivated [07:34:09] [LIFECYCLE] All connections stopped [07:34:09] [CLIENT_SIG] WebSocket closed with code 1001 [07:34:09] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [07:34:09] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [07:34:09] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [07:34:09] [SERVER] Stopped reconnect polling [07:34:09] Will request stop of video 0 [07:34:09] Will request stop of video 0 [07:34:09] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [07:34:09] [WS] Query connection error - cleaning up all agent connections and views [07:34:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [07:34:09] [WS] Query connection failed - cleaning up all agent connections and views [07:34:09] [PIP] Removing 0 tracks from PiP for connection 0 [07:34:09] [PIP] ✅ All tracks removed for connection 0 [07:34:09] [PIP] Removing 0 tracks from PiP for connection 0 [07:34:09] [PIP] ✅ All tracks removed for connection 0 [07:34:09] [CLEANUP] ======================================== [07:34:09] [CLEANUP] Cleaning up all agent connections and views [07:34:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:34:09] [CLEANUP] Stopped and removed 0 video connections [07:34:09] [CLEANUP] Removed 0 video views [07:34:09] [CLEANUP] Removed 0 feed scroll views [07:34:09] [CLEANUP] Removed 0 status labels [07:34:09] [CLEANUP] Reset agent query state [07:34:09] [CLEANUP] Updated page indicator [07:34:09] [CLEANUP] Rebuilt video layout [07:34:09] [CLEANUP] ✅ All agent connections and views cleaned up [07:34:09] [CLEANUP] ======================================== [07:34:09] [SERVER] Skipping reconnect polling - app is in background [07:34:09] [WS] URLSession invalidated successfully [07:34:09] [CLEANUP] ======================================== [07:34:09] [CLEANUP] Cleaning up all agent connections and views [07:34:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:34:09] [CLEANUP] Stopped and removed 0 video connections [07:34:09] [CLEANUP] Removed 0 video views [07:34:09] [CLEANUP] Removed 0 feed scroll views [07:34:09] [CLEANUP] Removed 0 status labels [07:34:09] [CLEANUP] Reset agent query state [07:34:09] [CLEANUP] Updated page indicator [07:34:09] [CLEANUP] Rebuilt video layout [07:34:09] [CLEANUP] ✅ All agent connections and views cleaned up [07:34:09] [CLEANUP] ======================================== [07:34:09] [SERVER] Skipping reconnect polling - app is in background [07:41:18] [BACKGROUND] Background fetch triggered [07:41:18] [BACKGROUND] Fetching recent messages for pre-cache [07:41:18] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [07:41:18] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:41:18] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:41:18] [NETWORK] Status changed: connected [07:41:18] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:41:18] HELLO → sent (cached token, role=query) [07:41:18] [CLIENT_SIG] WebSocket opened [07:41:18] [CLIENT_SIG] HELLO sent as client for session ILUIWU [07:41:18] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [07:41:18] [WS] Query connection failed - cleaning up all agent connections and views [07:41:18] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [07:41:18] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [07:41:18] [CLEANUP] ======================================== [07:41:18] [CLEANUP] Cleaning up all agent connections and views [07:41:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:41:18] [CLEANUP] Stopped and removed 0 video connections [07:41:18] [CLEANUP] Removed 0 video views [07:41:18] [CLEANUP] Removed 0 feed scroll views [07:41:18] [CLEANUP] Removed 0 status labels [07:41:18] [CLEANUP] Reset agent query state [07:41:18] [CLEANUP] Updated page indicator [07:41:18] [CLEANUP] Rebuilt video layout [07:41:18] [CLEANUP] ✅ All agent connections and views cleaned up [07:41:18] [CLEANUP] ======================================== [07:41:18] [SERVER] Skipping reconnect polling - app is in background [07:41:18] [CLEANUP] ======================================== [07:41:18] [CLEANUP] Cleaning up all agent connections and views [07:41:18] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:41:18] [CLEANUP] Stopped and removed 0 video connections [07:41:18] [CLEANUP] Removed 0 video views [07:41:18] [CLEANUP] Removed 0 feed scroll views [07:41:18] [CLEANUP] Removed 0 status labels [07:41:18] [CLEANUP] Reset agent query state [07:41:18] [CLEANUP] Updated page indicator [07:41:18] [CLEANUP] Rebuilt video layout [07:41:18] [CLEANUP] ✅ All agent connections and views cleaned up [07:41:18] [CLEANUP] ======================================== [07:41:18] [SERVER] Skipping reconnect polling - app is in background [07:41:18] [CLIENT_SIG] Connected! clientId=NYziXi94EQfA9Pl5 [07:41:18] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [07:41:18] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:41:18] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [07:41:18] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:41:18] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:41:18] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:41:18] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:41:18] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [07:41:18] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [07:41:18] [BACKGROUND] Pre-downloaded 0 thumbnails [07:41:18] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [07:49:37] [BACKGROUND] Background fetch triggered [07:49:37] [BACKGROUND] Fetching recent messages for pre-cache [07:49:37] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [07:49:37] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:49:37] [NETWORK] Status changed: connected [07:49:37] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <50671E32-5452-44FC-9FAD-52668ACB9A73>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <50671E32-5452-44FC-9FAD-52668ACB9A73>.<1>, NSLocalizedDescription=The network connection was lost.} [07:49:37] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [07:49:37] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [07:49:37] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [07:49:39] [NETWORK] Status changed: connected [07:49:41] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:49:42] [WS] Connection failed: The request timed out. [07:49:42] [WS] Query connection failed - cleaning up all agent connections and views [07:49:42] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [07:49:42] [WS] Query connection error - cleaning up all agent connections and views [07:49:42] [CLEANUP] ======================================== [07:49:42] [CLEANUP] Cleaning up all agent connections and views [07:49:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:49:42] [CLEANUP] Stopped and removed 0 video connections [07:49:42] [CLEANUP] Removed 0 video views [07:49:42] [CLEANUP] Removed 0 feed scroll views [07:49:42] [CLEANUP] Removed 0 status labels [07:49:42] [CLEANUP] Reset agent query state [07:49:42] [CLEANUP] Updated page indicator [07:49:42] [CLEANUP] Rebuilt video layout [07:49:42] [CLEANUP] ✅ All agent connections and views cleaned up [07:49:42] [CLEANUP] ======================================== [07:49:42] [SERVER] Skipping reconnect polling - app is in background [07:49:42] [CLEANUP] ======================================== [07:49:42] [CLEANUP] Cleaning up all agent connections and views [07:49:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:49:42] [CLEANUP] Stopped and removed 0 video connections [07:49:42] [CLEANUP] Removed 0 video views [07:49:42] [CLEANUP] Removed 0 feed scroll views [07:49:42] [CLEANUP] Removed 0 status labels [07:49:42] [CLEANUP] Reset agent query state [07:49:42] [CLEANUP] Updated page indicator [07:49:42] [CLEANUP] Rebuilt video layout [07:49:42] [CLEANUP] ✅ All agent connections and views cleaned up [07:49:42] [CLEANUP] ======================================== [07:49:42] [SERVER] Skipping reconnect polling - app is in background [07:49:44] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [07:49:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:49:45] [CLIENT_SIG] WebSocket opened [07:49:45] [CLIENT_SIG] HELLO sent as client for session ILUIWU [07:49:45] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:49:45] HELLO → sent (cached token, role=query) [07:49:45] [CLIENT_SIG] Connected! clientId=wsRCwfHpktINl8ON [07:49:45] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [07:49:45] [WS] Query connection failed - cleaning up all agent connections and views [07:49:45] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [07:49:45] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [07:49:45] [CLEANUP] ======================================== [07:49:45] [CLEANUP] Cleaning up all agent connections and views [07:49:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:49:45] [CLEANUP] Stopped and removed 0 video connections [07:49:45] [CLEANUP] Removed 0 video views [07:49:45] [CLEANUP] Removed 0 feed scroll views [07:49:45] [CLEANUP] Removed 0 status labels [07:49:45] [CLEANUP] Reset agent query state [07:49:45] [CLEANUP] Updated page indicator [07:49:45] [CLEANUP] Rebuilt video layout [07:49:45] [CLEANUP] ✅ All agent connections and views cleaned up [07:49:45] [CLEANUP] ======================================== [07:49:45] [SERVER] Skipping reconnect polling - app is in background [07:49:45] [CLEANUP] ======================================== [07:49:45] [CLEANUP] Cleaning up all agent connections and views [07:49:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:49:45] [CLEANUP] Stopped and removed 0 video connections [07:49:45] [CLEANUP] Removed 0 video views [07:49:45] [CLEANUP] Removed 0 feed scroll views [07:49:45] [CLEANUP] Removed 0 status labels [07:49:45] [CLEANUP] Reset agent query state [07:49:45] [CLEANUP] Updated page indicator [07:49:45] [CLEANUP] Rebuilt video layout [07:49:45] [CLEANUP] ✅ All agent connections and views cleaned up [07:49:45] [CLEANUP] ======================================== [07:49:45] [SERVER] Skipping reconnect polling - app is in background [07:49:46] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [07:49:46] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:49:46] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [07:49:46] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [07:49:46] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:49:46] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:49:46] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:49:46] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:49:46] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:49:46] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:49:46] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [07:49:46] [BACKGROUND] Pre-downloaded 0 thumbnails [07:49:46] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [07:49:47] [NETWORK] Status changed: connected [07:49:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [07:49:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:57:41] [BACKGROUND] Background fetch triggered [07:57:41] [BACKGROUND] Fetching recent messages for pre-cache [07:57:41] [WS] Connection failed: The request timed out. [07:57:41] [WS] Query connection failed - cleaning up all agent connections and views [07:57:41] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [07:57:41] [WS] Query connection error - cleaning up all agent connections and views [07:57:41] [NETWORK] Status changed: connected [07:57:41] [CLEANUP] ======================================== [07:57:41] [CLEANUP] Cleaning up all agent connections and views [07:57:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:57:41] [CLEANUP] Stopped and removed 0 video connections [07:57:41] [CLEANUP] Removed 0 video views [07:57:41] [CLEANUP] Removed 0 feed scroll views [07:57:41] [CLEANUP] Removed 0 status labels [07:57:41] [CLEANUP] Reset agent query state [07:57:41] [CLEANUP] Updated page indicator [07:57:41] [CLEANUP] Rebuilt video layout [07:57:41] [CLEANUP] ✅ All agent connections and views cleaned up [07:57:41] [CLEANUP] ======================================== [07:57:41] [SERVER] Skipping reconnect polling - app is in background [07:57:41] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [07:57:41] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [07:57:41] [CLEANUP] ======================================== [07:57:41] [CLEANUP] Cleaning up all agent connections and views [07:57:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:57:41] [CLEANUP] Stopped and removed 0 video connections [07:57:41] [CLEANUP] Removed 0 video views [07:57:41] [CLEANUP] Removed 0 feed scroll views [07:57:41] [CLEANUP] Removed 0 status labels [07:57:41] [CLEANUP] Reset agent query state [07:57:41] [CLEANUP] Updated page indicator [07:57:41] [CLEANUP] Rebuilt video layout [07:57:41] [CLEANUP] ✅ All agent connections and views cleaned up [07:57:41] [CLEANUP] ======================================== [07:57:41] [SERVER] Skipping reconnect polling - app is in background [07:57:41] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [07:57:41] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [07:57:41] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [07:57:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [07:57:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [07:57:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [07:57:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:57:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:57:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [07:57:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [07:57:41] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [07:57:41] [BACKGROUND] Pre-downloaded 0 thumbnails [07:57:41] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [07:57:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [07:57:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [07:57:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [07:57:42] HELLO → sent (cached token, role=query) [07:57:42] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [07:57:42] [WS] Query connection failed - cleaning up all agent connections and views [07:57:42] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [07:57:42] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [07:57:42] [CLEANUP] ======================================== [07:57:42] [CLEANUP] Cleaning up all agent connections and views [07:57:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:57:42] [CLEANUP] Stopped and removed 0 video connections [07:57:42] [CLEANUP] Removed 0 video views [07:57:42] [CLEANUP] Removed 0 feed scroll views [07:57:42] [CLEANUP] Removed 0 status labels [07:57:42] [CLEANUP] Reset agent query state [07:57:42] [CLEANUP] Updated page indicator [07:57:42] [CLEANUP] Rebuilt video layout [07:57:42] [CLEANUP] ✅ All agent connections and views cleaned up [07:57:42] [CLEANUP] ======================================== [07:57:42] [SERVER] Skipping reconnect polling - app is in background [07:57:42] [CLEANUP] ======================================== [07:57:42] [CLEANUP] Cleaning up all agent connections and views [07:57:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [07:57:42] [CLEANUP] Stopped and removed 0 video connections [07:57:42] [CLEANUP] Removed 0 video views [07:57:42] [CLEANUP] Removed 0 feed scroll views [07:57:42] [CLEANUP] Removed 0 status labels [07:57:42] [CLEANUP] Reset agent query state [07:57:42] [CLEANUP] Updated page indicator [07:57:42] [CLEANUP] Rebuilt video layout [07:57:42] [CLEANUP] ✅ All agent connections and views cleaned up [07:57:42] [CLEANUP] ======================================== [07:57:42] [SERVER] Skipping reconnect polling - app is in background [08:05:22] [NETWORK] Status changed: connected [08:05:22] [BACKGROUND] Background fetch triggered [08:05:22] [BACKGROUND] Fetching recent messages for pre-cache [08:05:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:05:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:05:22] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:05:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:05:22] [CLIENT_SIG] WebSocket opened [08:05:22] HELLO → sent (cached token, role=query) [08:05:22] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:05:22] [CLIENT_SIG] Connected! clientId=QqPWAJOQJbA6qOyc [08:05:22] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:05:22] [WS] Query connection failed - cleaning up all agent connections and views [08:05:22] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:05:22] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:05:22] [CLEANUP] ======================================== [08:05:22] [CLEANUP] Cleaning up all agent connections and views [08:05:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:05:22] [CLEANUP] Stopped and removed 0 video connections [08:05:22] [CLEANUP] Removed 0 video views [08:05:22] [CLEANUP] Removed 0 feed scroll views [08:05:22] [CLEANUP] Removed 0 status labels [08:05:22] [CLEANUP] Reset agent query state [08:05:22] [CLEANUP] Updated page indicator [08:05:22] [CLEANUP] Rebuilt video layout [08:05:22] [CLEANUP] ✅ All agent connections and views cleaned up [08:05:22] [CLEANUP] ======================================== [08:05:22] [SERVER] Skipping reconnect polling - app is in background [08:05:22] [CLEANUP] ======================================== [08:05:22] [CLEANUP] Cleaning up all agent connections and views [08:05:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:05:22] [CLEANUP] Stopped and removed 0 video connections [08:05:22] [CLEANUP] Removed 0 video views [08:05:22] [CLEANUP] Removed 0 feed scroll views [08:05:22] [CLEANUP] Removed 0 status labels [08:05:22] [CLEANUP] Reset agent query state [08:05:22] [CLEANUP] Updated page indicator [08:05:22] [CLEANUP] Rebuilt video layout [08:05:22] [CLEANUP] ✅ All agent connections and views cleaned up [08:05:22] [CLEANUP] ======================================== [08:05:22] [SERVER] Skipping reconnect polling - app is in background [08:05:22] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:05:22] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:05:22] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:05:22] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:05:23] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:05:23] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:05:23] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:05:23] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:05:23] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [08:05:23] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:05:23] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [08:05:23] [BACKGROUND] Pre-downloaded 0 thumbnails [08:05:23] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [08:14:15] [BACKGROUND] Background fetch triggered [08:14:15] [BACKGROUND] Fetching recent messages for pre-cache [08:14:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:14:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:14:15] [NETWORK] Status changed: connected [08:14:15] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [08:14:15] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:14:15] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <94A3005B-D9C2-42EF-89D9-284CDACBC5BC>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <94A3005B-D9C2-42EF-89D9-284CDACBC5BC>.<1>} [08:14:15] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:14:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:14:15] HELLO → sent (cached token, role=query) [08:14:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:14:15] [WS] Query connection failed - cleaning up all agent connections and views [08:14:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:14:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:14:15] [CLEANUP] ======================================== [08:14:15] [CLEANUP] Cleaning up all agent connections and views [08:14:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:14:15] [CLEANUP] Stopped and removed 0 video connections [08:14:15] [CLEANUP] Removed 0 video views [08:14:15] [CLEANUP] Removed 0 feed scroll views [08:14:15] [CLEANUP] Removed 0 status labels [08:14:15] [CLEANUP] Reset agent query state [08:14:15] [CLEANUP] Updated page indicator [08:14:15] [CLEANUP] Rebuilt video layout [08:14:15] [CLEANUP] ✅ All agent connections and views cleaned up [08:14:15] [CLEANUP] ======================================== [08:14:15] [SERVER] Skipping reconnect polling - app is in background [08:14:15] [CLEANUP] ======================================== [08:14:15] [CLEANUP] Cleaning up all agent connections and views [08:14:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:14:15] [CLEANUP] Stopped and removed 0 video connections [08:14:15] [CLEANUP] Removed 0 video views [08:14:15] [CLEANUP] Removed 0 feed scroll views [08:14:15] [CLEANUP] Removed 0 status labels [08:14:15] [CLEANUP] Reset agent query state [08:14:15] [CLEANUP] Updated page indicator [08:14:15] [CLEANUP] Rebuilt video layout [08:14:15] [CLEANUP] ✅ All agent connections and views cleaned up [08:14:15] [CLEANUP] ======================================== [08:14:15] [SERVER] Skipping reconnect polling - app is in background [08:14:15] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:14:15] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:14:15] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:14:15] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:14:15] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:14:15] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:14:15] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [08:14:15] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:14:15] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [08:14:15] [BACKGROUND] Pre-downloaded 0 thumbnails [08:14:15] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [08:14:15] [NETWORK] Status changed: connected [08:14:16] [NETWORK] Status changed: connected [08:14:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:14:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:14:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:14:17] HELLO → sent (cached token, role=query) [08:14:17] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:14:17] [WS] Query connection failed - cleaning up all agent connections and views [08:14:17] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:14:17] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:14:17] [CLEANUP] ======================================== [08:14:17] [CLEANUP] Cleaning up all agent connections and views [08:14:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:14:17] [CLEANUP] Stopped and removed 0 video connections [08:14:17] [CLEANUP] Removed 0 video views [08:14:17] [CLEANUP] Removed 0 feed scroll views [08:14:17] [CLEANUP] Removed 0 status labels [08:14:17] [CLEANUP] Reset agent query state [08:14:17] [CLEANUP] Updated page indicator [08:14:17] [CLEANUP] Rebuilt video layout [08:14:17] [CLEANUP] ✅ All agent connections and views cleaned up [08:14:17] [CLEANUP] ======================================== [08:14:17] [SERVER] Skipping reconnect polling - app is in background [08:14:17] [CLEANUP] ======================================== [08:14:17] [CLEANUP] Cleaning up all agent connections and views [08:14:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:14:17] [CLEANUP] Stopped and removed 0 video connections [08:14:17] [CLEANUP] Removed 0 video views [08:14:17] [CLEANUP] Removed 0 feed scroll views [08:14:17] [CLEANUP] Removed 0 status labels [08:14:17] [CLEANUP] Reset agent query state [08:14:17] [CLEANUP] Updated page indicator [08:14:17] [CLEANUP] Rebuilt video layout [08:14:17] [CLEANUP] ✅ All agent connections and views cleaned up [08:14:17] [CLEANUP] ======================================== [08:14:17] [SERVER] Skipping reconnect polling - app is in background [08:16:48] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:48] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:16:48] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [08:16:48] [CLIENT_SIG] Already connected/connecting to session ILUIWU [08:16:48] [LIFECYCLE] App entering foreground - restoring connections [08:16:48] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [08:16:48] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [08:16:48] [PUSH_TRACE] 🔄 FOREGROUND: memory has 50 msgs, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:48] [PUSH_TRACE] 🔄 FOREGROUND: cache has 50 msgs, valid=true, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:48] [LIFECYCLE] Away > 2 minutes (2559s) - will scroll to bottom [08:16:48] [NETWORK] Status changed: connected [08:16:48] [UPLOAD_RETRY] No pending uploads to retry [08:16:48] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:48] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [08:16:48] [LIFECYCLE] WebRTC audio re-enabled [08:16:48] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:16:48] [CLIENT_SIG] Skipping connect - app in background (state=2) [08:16:48] [VIEWER] Reconnecting after background - querying agents [08:16:48] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=running [08:16:48] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [08:16:48] [UNSENT_RETRY] Checking for unsent messages... [08:16:48] [PENDING_UPLOAD] Total pending upload messages: 0 [08:16:48] [UNSENT_RETRY] No unsent messages found [08:16:48] [CLIENT_SIG] WebSocket opened [08:16:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:48] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:16:48] HELLO → sent (cached token, role=query) [08:16:48] [CLIENT_SIG] Connected! clientId=z6AmYdC7gpjQoGNB [08:16:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:48] [WS] Query connection failed - cleaning up all agent connections and views [08:16:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:48] [CLEANUP] ======================================== [08:16:48] [CLEANUP] Cleaning up all agent connections and views [08:16:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:48] [CLEANUP] Stopped and removed 0 video connections [08:16:48] [CLEANUP] Removed 0 video views [08:16:48] [CLEANUP] Removed 0 feed scroll views [08:16:48] [CLEANUP] Removed 0 status labels [08:16:48] [CLEANUP] Reset agent query state [08:16:48] [CLEANUP] Updated page indicator [08:16:48] [CLEANUP] Rebuilt video layout [08:16:48] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:48] [CLEANUP] ======================================== [08:16:48] [SERVER] Starting reconnect polling (5s interval) [08:16:48] [CLEANUP] ======================================== [08:16:48] [CLEANUP] Cleaning up all agent connections and views [08:16:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:48] [CLEANUP] Stopped and removed 0 video connections [08:16:48] [CLEANUP] Removed 0 video views [08:16:48] [CLEANUP] Removed 0 feed scroll views [08:16:48] [CLEANUP] Removed 0 status labels [08:16:48] [CLEANUP] Reset agent query state [08:16:48] [CLEANUP] Updated page indicator [08:16:48] [CLEANUP] Rebuilt video layout [08:16:48] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:48] [CLEANUP] ======================================== [08:16:48] [SERVER] Starting reconnect polling (5s interval) [08:16:48] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:16:48] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:16:48] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [08:16:48] [FOREGROUND] Enriched 0/3 unsettled messages with readBy data [08:16:48] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=50>50=false, maxId=28814>28814=false, shouldScroll=true [08:16:48] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:48] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:16:48] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:16:48] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:16:48] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:48] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=2731 vccs=0 [08:16:48] [GAP_FIX] maxMessageIdAtBackground=28814, currentMaxLocalId=28814 [08:16:48] [PUSH] handlePollEventsNotification userInfo: [:] [08:16:48] [PUSH] No message_id in userInfo [08:16:48] [PUSH] No operation_type in userInfo [08:16:48] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:16:48] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:48] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:48] [FAST_REFRESH] Already have 50 messages in memory [08:16:48] [FAST_REFRESH] maxMemoryId=28814, maxLocalId=28814 [08:16:48] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:16:48] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:48] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:16:48] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:16:48] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [08:16:48] [GAP_FIX] Incremental sync will use since_id=28814 (background max=28814, current DB max=28814) [08:16:48] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [08:16:48] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28814, maxMemoryId=28814 [08:16:48] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28814 [08:16:49] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [08:16:49] [FAST_REFRESH] Enriched 3/3 unsettled messages with readBy data [08:16:49] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:49] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:16:49] [INCREMENTAL_SYNC] ✅ No new messages [08:16:49] [FAST_REFRESH] Incremental sync complete - 50 messages [08:16:49] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [08:16:49] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28814, 28813, 28812, 28811, 28810] [08:16:49] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [08:16:49] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:49] [RELOAD_TAB] 📊 Building chatRows from 50 messages [08:16:49] [SCROLL] wasNearBottom=true, threshold=758, offset=3890, contentH=4648, boundsH=758, forceScroll=true [08:16:49] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [08:16:49] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [08:16:49] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3890, currentOffset=3890 [08:16:49] [SCROLL] Scrolling to 3890, animated=false [08:16:50] [PIN_AUTH] Correct PIN [08:16:50] [SECURITY] Restored real session: ILUIWU [08:16:50] [SECURITY] Restored real session: ILUIWU [08:16:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:50] HELLO → sent (cached token, role=query) [08:16:50] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:50] [WS] Query connection failed - cleaning up all agent connections and views [08:16:50] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:50] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:50] [CLEANUP] ======================================== [08:16:50] [CLEANUP] Cleaning up all agent connections and views [08:16:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:50] [CLEANUP] Stopped and removed 0 video connections [08:16:50] [CLEANUP] Removed 0 video views [08:16:50] [CLEANUP] Removed 0 feed scroll views [08:16:50] [CLEANUP] Removed 0 status labels [08:16:50] [CLEANUP] Reset agent query state [08:16:50] [CLEANUP] Updated page indicator [08:16:50] [CLEANUP] Rebuilt video layout [08:16:50] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:50] [CLEANUP] ======================================== [08:16:50] [SERVER] Starting reconnect polling (5s interval) [08:16:50] [CLEANUP] ======================================== [08:16:50] [CLEANUP] Cleaning up all agent connections and views [08:16:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:50] [CLEANUP] Stopped and removed 0 video connections [08:16:50] [CLEANUP] Removed 0 video views [08:16:50] [CLEANUP] Removed 0 feed scroll views [08:16:50] [CLEANUP] Removed 0 status labels [08:16:50] [CLEANUP] Reset agent query state [08:16:50] [CLEANUP] Updated page indicator [08:16:50] [CLEANUP] Rebuilt video layout [08:16:50] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:50] [CLEANUP] ======================================== [08:16:50] [SERVER] Starting reconnect polling (5s interval) [08:16:50] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [08:16:50] [FAKE_AI] cancel() called, wasRunning=false [08:16:50] [FAKE MODE] Exiting fake mode, restoring real session [08:16:50] [SECURITY] Restored real session: ILUIWU [08:16:50] [SECURITY] Saved real session: ILUIWU [08:16:50] [FAKE MODE] ✅ Restored real session: ILUIWU [08:16:50] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:16:50] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:16:50] [FAKE MODE] Loaded 50 messages (limited to page size) [08:16:50] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [08:16:50] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:16:50] [AUTH] Cache had 50 messages, maxExistingId=28814, inserted 0 truly new [08:16:50] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>50=false, maxId=28814>28814=false, shouldScroll=false [08:16:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:50] [AUTH] UI update complete [08:16:50] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [08:16:50] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [08:16:50] [USER] ✅ User registered successfully [08:16:50] [PUSH] User registration after token update: success [08:16:50] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [08:16:50] [FAKE MODE] Enriched 3/3 unsettled messages with readBy data [08:16:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:16:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:16:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=122 [08:16:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28814, 28813, 28812, 28811, 28810] [08:16:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [08:16:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806, 28805] [08:16:50] [RELOAD_TAB] 📊 Building chatRows from 50 messages [08:16:50] [SCROLL] wasNearBottom=true, threshold=758, offset=3890, contentH=4648, boundsH=758, forceScroll=true [08:16:50] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [08:16:50] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [08:16:50] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3890, currentOffset=3890 [08:16:50] [SCROLL] Scrolling to 3890, animated=false [08:16:51] [NETWORK] Status changed: connected [08:16:51] [SCROLL] 💓 alive, visible=43...51, rows=52, estHeight=0.0, heightCalls=61 [08:16:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:52] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:52] HELLO → sent (cached token, role=query) [08:16:52] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:52] [WS] Query connection failed - cleaning up all agent connections and views [08:16:52] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:52] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:52] [CLEANUP] ======================================== [08:16:52] [CLEANUP] Cleaning up all agent connections and views [08:16:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:52] [CLEANUP] Stopped and removed 0 video connections [08:16:52] [CLEANUP] Removed 0 video views [08:16:52] [CLEANUP] Removed 0 feed scroll views [08:16:52] [CLEANUP] Removed 0 status labels [08:16:52] [CLEANUP] Reset agent query state [08:16:52] [CLEANUP] Updated page indicator [08:16:52] [CLEANUP] Rebuilt video layout [08:16:52] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:52] [CLEANUP] ======================================== [08:16:52] [SERVER] Starting reconnect polling (5s interval) [08:16:52] [CLEANUP] ======================================== [08:16:52] [CLEANUP] Cleaning up all agent connections and views [08:16:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:52] [CLEANUP] Stopped and removed 0 video connections [08:16:52] [CLEANUP] Removed 0 video views [08:16:52] [CLEANUP] Removed 0 feed scroll views [08:16:52] [CLEANUP] Removed 0 status labels [08:16:52] [CLEANUP] Reset agent query state [08:16:52] [CLEANUP] Updated page indicator [08:16:52] [CLEANUP] Rebuilt video layout [08:16:52] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:52] [CLEANUP] ======================================== [08:16:52] [SERVER] Starting reconnect polling (5s interval) [08:16:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:53] HELLO → sent (cached token, role=query) [08:16:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:53] [WS] Query connection failed - cleaning up all agent connections and views [08:16:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:53] [CLEANUP] ======================================== [08:16:53] [CLEANUP] Cleaning up all agent connections and views [08:16:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:53] [CLEANUP] Stopped and removed 0 video connections [08:16:53] [CLEANUP] Removed 0 video views [08:16:53] [CLEANUP] Removed 0 feed scroll views [08:16:53] [CLEANUP] Removed 0 status labels [08:16:53] [CLEANUP] Reset agent query state [08:16:53] [CLEANUP] Updated page indicator [08:16:53] [CLEANUP] Rebuilt video layout [08:16:53] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:53] [CLEANUP] ======================================== [08:16:53] [SERVER] Starting reconnect polling (5s interval) [08:16:53] [CLEANUP] ======================================== [08:16:53] [CLEANUP] Cleaning up all agent connections and views [08:16:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:53] [CLEANUP] Stopped and removed 0 video connections [08:16:53] [CLEANUP] Removed 0 video views [08:16:53] [CLEANUP] Removed 0 feed scroll views [08:16:53] [CLEANUP] Removed 0 status labels [08:16:53] [CLEANUP] Reset agent query state [08:16:53] [CLEANUP] Updated page indicator [08:16:53] [CLEANUP] Rebuilt video layout [08:16:53] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:53] [CLEANUP] ======================================== [08:16:53] [SERVER] Starting reconnect polling (5s interval) [08:16:54] [NETWORK] Status changed: connected [08:16:55] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:55] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:55] HELLO → sent (cached token, role=query) [08:16:55] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:55] [WS] Query connection failed - cleaning up all agent connections and views [08:16:55] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:55] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:55] [CLEANUP] ======================================== [08:16:55] [CLEANUP] Cleaning up all agent connections and views [08:16:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:55] [CLEANUP] Stopped and removed 0 video connections [08:16:55] [CLEANUP] Removed 0 video views [08:16:55] [CLEANUP] Removed 0 feed scroll views [08:16:55] [CLEANUP] Removed 0 status labels [08:16:55] [CLEANUP] Reset agent query state [08:16:55] [CLEANUP] Updated page indicator [08:16:55] [CLEANUP] Rebuilt video layout [08:16:55] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:55] [CLEANUP] ======================================== [08:16:55] [SERVER] Starting reconnect polling (5s interval) [08:16:55] [CLEANUP] ======================================== [08:16:55] [CLEANUP] Cleaning up all agent connections and views [08:16:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:55] [CLEANUP] Stopped and removed 0 video connections [08:16:55] [CLEANUP] Removed 0 video views [08:16:55] [CLEANUP] Removed 0 feed scroll views [08:16:55] [CLEANUP] Removed 0 status labels [08:16:55] [CLEANUP] Reset agent query state [08:16:55] [CLEANUP] Updated page indicator [08:16:55] [CLEANUP] Rebuilt video layout [08:16:55] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:55] [CLEANUP] ======================================== [08:16:55] [SERVER] Starting reconnect polling (5s interval) [08:16:56] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [08:16:56] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [08:16:56] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=51 [08:16:56] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [08:16:56] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-4, 28814, 28813, 28812, 28811] [08:16:56] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [08:16:56] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-4, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:16:56] [RELOAD_TAB] 📊 Building chatRows from 51 messages [08:16:56] [SCROLL] wasNearBottom=true, threshold=447, offset=4201, contentH=4648, boundsH=447, forceScroll=false [08:16:56] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [08:16:56] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [08:16:56] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=114 [08:16:56] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [08:16:56] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [08:16:56] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4253, currentOffset=4253 [08:16:56] [SCROLL] Scrolling to 4253, animated=true [08:16:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:16:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:16:56] [CLIENT_SIG] Event received: type=0 messageId=28815 [08:16:56] [WS_EVENT] Received event: type=0, messageId=28815 [08:16:56] [WS_EVENT] 📨 New message notification (msgId=28815) - triggering incremental refresh, currentMsgCount=51 [08:16:56] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [08:16:56] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28814, maxMemoryId=28814 [08:16:56] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28814 [08:16:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:16:56] HELLO → sent (cached token, role=query) [08:16:56] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28815,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 06:16:56"} [08:16:56] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 06:16:56, "session_id": ILUIWU, "file_name": , "message_id": 28815, "message_type": 0, "ok": 1] [08:16:56] [DB_UPGRADE] Upgrading message ID: -4 → 28815, preserveOriginalDate=false [08:16:56] [DB_UPGRADE] ✅ Upgraded -4 → 28815 with send_status=0, 1 row(s) affected [08:16:56] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 28815 [08:16:56] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 28815 [08:16:56] ReloadData 9 [08:16:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:16:56] [WS] Query connection failed - cleaning up all agent connections and views [08:16:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:16:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:16:56] [CLEANUP] ======================================== [08:16:56] [CLEANUP] Cleaning up all agent connections and views [08:16:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:56] [CLEANUP] Stopped and removed 0 video connections [08:16:56] [CLEANUP] Removed 0 video views [08:16:56] [CLEANUP] Removed 0 feed scroll views [08:16:56] [CLEANUP] Removed 0 status labels [08:16:56] [CLEANUP] Reset agent query state [08:16:56] [CLEANUP] Updated page indicator [08:16:56] [CLEANUP] Rebuilt video layout [08:16:56] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:56] [CLEANUP] ======================================== [08:16:56] [SERVER] Starting reconnect polling (5s interval) [08:16:56] [CLEANUP] ======================================== [08:16:56] [CLEANUP] Cleaning up all agent connections and views [08:16:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:16:56] [CLEANUP] Stopped and removed 0 video connections [08:16:56] [CLEANUP] Removed 0 video views [08:16:56] [CLEANUP] Removed 0 feed scroll views [08:16:56] [CLEANUP] Removed 0 status labels [08:16:56] [CLEANUP] Reset agent query state [08:16:56] [CLEANUP] Updated page indicator [08:16:56] [CLEANUP] Rebuilt video layout [08:16:56] [CLEANUP] ✅ All agent connections and views cleaned up [08:16:56] [CLEANUP] ======================================== [08:16:56] [SERVER] Starting reconnect polling (5s interval) [08:16:56] [INCREMENTAL_SYNC] ✅ Found 1 new messages [08:16:56] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28815] [08:16:56] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:16:56] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:16:56] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [08:16:56] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [08:16:56] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [08:16:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [08:16:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28815, 28814, 28813, 28812, 28811] [08:16:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [08:16:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:16:57] [RELOAD_TAB] 📊 Building chatRows from 51 messages [08:16:57] [SCROLL] wasNearBottom=true, threshold=447, offset=4253, contentH=4700, boundsH=447, forceScroll=true [08:16:57] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [08:16:57] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [08:16:57] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4253, currentOffset=4253 [08:16:57] [SCROLL] Scrolling to 4253, animated=false [08:16:57] [NETWORK] Status changed: connected [08:16:58] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 2 minutes (1048s) - will scroll to bottom [08:34:28] [NETWORK] Status changed: connected [08:34:28] [UPLOAD_RETRY] No pending uploads to retry [08:34:28] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [08:34:28] [READBY_OPT] Fetching readBy for 4 unsettled messages (targeted) [08:34:28] [LIFECYCLE] WebRTC audio re-enabled [08:34:28] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [08:34:28] [CLIENT_SIG] Skipping connect - app in background (state=2) [08:34:28] [VIEWER] Reconnecting after background - querying agents [08:34:28] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [08:34:28] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [08:34:28] [UNSENT_RETRY] Checking for unsent messages... [08:34:28] [PENDING_UPLOAD] Total pending upload messages: 0 [08:34:28] [UNSENT_RETRY] No unsent messages found [08:34:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:34:28] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <79C1D102-77E5-4A24-A4E7-D5A9E7731CC7>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <79C1D102-77E5-4A24-A4E7-D5A9E7731CC7>.<1>, NSLocalizedDescription=The network connection was lost.} [08:34:28] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:34:28] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [08:34:28] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:34:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:34:28] HELLO → sent (cached token, role=query) [08:34:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:34:28] [WS] Query connection failed - cleaning up all agent connections and views [08:34:28] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:34:28] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:34:28] [CLEANUP] ======================================== [08:34:28] [CLEANUP] Cleaning up all agent connections and views [08:34:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:28] [CLEANUP] Stopped and removed 0 video connections [08:34:28] [CLEANUP] Removed 0 video views [08:34:28] [CLEANUP] Removed 0 feed scroll views [08:34:28] [CLEANUP] Removed 0 status labels [08:34:28] [CLEANUP] Reset agent query state [08:34:28] [CLEANUP] Updated page indicator [08:34:28] [CLEANUP] Rebuilt video layout [08:34:28] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:28] [CLEANUP] ======================================== [08:34:28] [SERVER] Starting reconnect polling (5s interval) [08:34:28] [CLEANUP] ======================================== [08:34:28] [CLEANUP] Cleaning up all agent connections and views [08:34:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:28] [CLEANUP] Stopped and removed 0 video connections [08:34:28] [CLEANUP] Removed 0 video views [08:34:28] [CLEANUP] Removed 0 feed scroll views [08:34:28] [CLEANUP] Removed 0 status labels [08:34:28] [CLEANUP] Reset agent query state [08:34:28] [CLEANUP] Updated page indicator [08:34:28] [CLEANUP] Rebuilt video layout [08:34:28] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:28] [CLEANUP] ======================================== [08:34:28] [SERVER] Starting reconnect polling (5s interval) [08:34:28] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=3 [08:34:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28815, 28814, 28813, 28812, 28811] [08:34:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [08:34:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:28] [RELOAD_TAB] 📊 Building chatRows from 51 messages [08:34:28] [SCROLL] wasNearBottom=true, threshold=758, offset=3942, contentH=4700, boundsH=758, forceScroll=false [08:34:28] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [08:34:28] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [08:34:28] [COMBINED_FETCH] Loaded 4 read receipts, 0 messages with reactions [08:34:28] [FOREGROUND] Enriched 0/4 unsettled messages with readBy data [08:34:28] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=51>51=false, maxId=28815>28815=false, shouldScroll=true [08:34:28] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [08:34:28] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [08:34:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28815, 28814, 28813, 28812, 28811] [08:34:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [08:34:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:28] [RELOAD_TAB] 📊 Building chatRows from 51 messages [08:34:28] [SCROLL] wasNearBottom=true, threshold=758, offset=3942, contentH=4700, boundsH=758, forceScroll=true [08:34:28] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [08:34:28] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [08:34:28] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3942 [08:34:28] [SCROLL] Scrolling to 3942, animated=false [08:34:29] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [08:34:29] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [08:34:29] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:29] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=3791 vccs=0 [08:34:29] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28815 [08:34:29] [PUSH] handlePollEventsNotification userInfo: [:] [08:34:29] [PUSH] No message_id in userInfo [08:34:29] [PUSH] No operation_type in userInfo [08:34:29] [FAST_REFRESH] Evolution disabled - performing incremental sync [08:34:29] [PUSH_TRACE] 📬 POLL: cache state: valid=false, count=0, IDs=[] [08:34:29] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:29] [FAST_REFRESH] Already have 51 messages in memory [08:34:29] [FAST_REFRESH] maxMemoryId=28815, maxLocalId=28815 [08:34:29] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [08:34:29] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [08:34:29] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [08:34:29] [READBY_OPT] Fetching readBy for 4 unsettled messages (targeted) [08:34:29] [GAP_FIX] Incremental sync will use since_id=28815 (background max=28815, current DB max=28815) [08:34:29] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [08:34:29] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [08:34:29] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [08:34:29] [COMBINED_FETCH] Loaded 4 read receipts, 0 messages with reactions [08:34:29] [FAST_REFRESH] Enriched 4/4 unsettled messages with readBy data [08:34:29] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [08:34:29] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:34:29] [INCREMENTAL_SYNC] ✅ No new messages [08:34:29] [FAST_REFRESH] Incremental sync complete - 51 messages [08:34:29] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [08:34:29] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28815, 28814, 28813, 28812, 28811] [08:34:29] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [08:34:29] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:29] [RELOAD_TAB] 📊 Building chatRows from 51 messages [08:34:29] [SCROLL] wasNearBottom=true, threshold=758, offset=3942, contentH=4700, boundsH=758, forceScroll=true [08:34:29] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [08:34:29] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [08:34:29] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3942 [08:34:29] [SCROLL] Scrolling to 3942, animated=false [08:34:30] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:30] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:34:30] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:34:30] HELLO → sent (cached token, role=query) [08:34:30] [PIN_AUTH] Correct PIN [08:34:30] [SECURITY] Restored real session: ILUIWU [08:34:30] [SECURITY] Restored real session: ILUIWU [08:34:30] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:34:30] [WS] Query connection failed - cleaning up all agent connections and views [08:34:30] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:34:30] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:34:30] [CLEANUP] ======================================== [08:34:30] [CLEANUP] Cleaning up all agent connections and views [08:34:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:30] [CLEANUP] Stopped and removed 0 video connections [08:34:30] [CLEANUP] Removed 0 video views [08:34:30] [CLEANUP] Removed 0 feed scroll views [08:34:30] [CLEANUP] Removed 0 status labels [08:34:30] [CLEANUP] Reset agent query state [08:34:30] [CLEANUP] Updated page indicator [08:34:30] [CLEANUP] Rebuilt video layout [08:34:30] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:30] [CLEANUP] ======================================== [08:34:30] [SERVER] Starting reconnect polling (5s interval) [08:34:30] [CLEANUP] ======================================== [08:34:30] [CLEANUP] Cleaning up all agent connections and views [08:34:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:30] [CLEANUP] Stopped and removed 0 video connections [08:34:30] [CLEANUP] Removed 0 video views [08:34:30] [CLEANUP] Removed 0 feed scroll views [08:34:30] [CLEANUP] Removed 0 status labels [08:34:30] [CLEANUP] Reset agent query state [08:34:30] [CLEANUP] Updated page indicator [08:34:30] [CLEANUP] Rebuilt video layout [08:34:30] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:30] [CLEANUP] ======================================== [08:34:30] [SERVER] Starting reconnect polling (5s interval) [08:34:30] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [08:34:30] [FAKE_AI] cancel() called, wasRunning=false [08:34:30] [FAKE MODE] Exiting fake mode, restoring real session [08:34:30] [SECURITY] Restored real session: ILUIWU [08:34:30] [SECURITY] Saved real session: ILUIWU [08:34:30] [FAKE MODE] ✅ Restored real session: ILUIWU [08:34:30] [FAKE MODE] Loaded 50 messages (limited to page size) [08:34:30] [READBY_OPT] Fetching readBy for 4 unsettled messages (targeted) [08:34:30] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [08:34:30] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>51=false, maxId=28815>28815=false, shouldScroll=false [08:34:30] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:34:30] [AUTH] UI update complete [08:34:30] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [08:34:30] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [08:34:30] [SCROLL] 💓 alive, visible=42...51, rows=52, estHeight=0.0, heightCalls=125 [08:34:30] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [08:34:30] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [08:34:30] [COMBINED_FETCH] Loaded 4 read receipts, 0 messages with reactions [08:34:30] [FAKE MODE] Enriched 4/4 unsettled messages with readBy data [08:34:30] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [08:34:30] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [08:34:30] [USER] ✅ User registered successfully [08:34:30] [PUSH] User registration after token update: success [08:34:30] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [08:34:30] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28815, 28814, 28813, 28812, 28811] [08:34:30] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [08:34:30] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:30] [RELOAD_TAB] 📊 Building chatRows from 50 messages [08:34:30] [SCROLL] wasNearBottom=true, threshold=758, offset=3865, contentH=4623, boundsH=758, forceScroll=true [08:34:30] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [08:34:30] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [08:34:30] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3865, currentOffset=3865 [08:34:30] [SCROLL] Scrolling to 3865, animated=false [08:34:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:34:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:34:31] HELLO → sent (cached token, role=query) [08:34:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:34:31] [WS] Query connection failed - cleaning up all agent connections and views [08:34:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:34:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:34:31] [CLEANUP] ======================================== [08:34:31] [CLEANUP] Cleaning up all agent connections and views [08:34:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:31] [CLEANUP] Stopped and removed 0 video connections [08:34:31] [CLEANUP] Removed 0 video views [08:34:31] [CLEANUP] Removed 0 feed scroll views [08:34:31] [CLEANUP] Removed 0 status labels [08:34:31] [CLEANUP] Reset agent query state [08:34:31] [CLEANUP] Updated page indicator [08:34:31] [CLEANUP] Rebuilt video layout [08:34:31] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:31] [CLEANUP] ======================================== [08:34:31] [SERVER] Starting reconnect polling (5s interval) [08:34:31] [CLEANUP] ======================================== [08:34:31] [CLEANUP] Cleaning up all agent connections and views [08:34:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:31] [CLEANUP] Stopped and removed 0 video connections [08:34:31] [CLEANUP] Removed 0 video views [08:34:31] [CLEANUP] Removed 0 feed scroll views [08:34:31] [CLEANUP] Removed 0 status labels [08:34:31] [CLEANUP] Reset agent query state [08:34:31] [CLEANUP] Updated page indicator [08:34:31] [CLEANUP] Rebuilt video layout [08:34:31] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:31] [CLEANUP] ======================================== [08:34:31] [SERVER] Starting reconnect polling (5s interval) [08:34:32] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:34:32] [CLIENT_SIG] WebSocket opened [08:34:32] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:34:32] [CLIENT_SIG] Connected! clientId=p1xjFMH53px7jrRX [08:34:32] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:34:32] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:34:33] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:33] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:34:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:34:33] HELLO → sent (cached token, role=query) [08:34:33] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:34:33] [WS] Query connection failed - cleaning up all agent connections and views [08:34:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:34:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:34:33] [CLEANUP] ======================================== [08:34:33] [CLEANUP] Cleaning up all agent connections and views [08:34:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:33] [CLEANUP] Stopped and removed 0 video connections [08:34:33] [CLEANUP] Removed 0 video views [08:34:33] [CLEANUP] Removed 0 feed scroll views [08:34:33] [CLEANUP] Removed 0 status labels [08:34:33] [CLEANUP] Reset agent query state [08:34:33] [CLEANUP] Updated page indicator [08:34:33] [CLEANUP] Rebuilt video layout [08:34:33] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:33] [CLEANUP] ======================================== [08:34:33] [SERVER] Starting reconnect polling (5s interval) [08:34:33] [CLEANUP] ======================================== [08:34:33] [CLEANUP] Cleaning up all agent connections and views [08:34:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:33] [CLEANUP] Stopped and removed 0 video connections [08:34:33] [CLEANUP] Removed 0 video views [08:34:33] [CLEANUP] Removed 0 feed scroll views [08:34:33] [CLEANUP] Removed 0 status labels [08:34:33] [CLEANUP] Reset agent query state [08:34:33] [CLEANUP] Updated page indicator [08:34:33] [CLEANUP] Rebuilt video layout [08:34:33] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:33] [CLEANUP] ======================================== [08:34:33] [SERVER] Starting reconnect polling (5s interval) [08:34:35] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:35] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:34:35] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:34:35] HELLO → sent (cached token, role=query) [08:34:35] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:34:35] [WS] Query connection failed - cleaning up all agent connections and views [08:34:35] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:34:35] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:34:35] [CLEANUP] ======================================== [08:34:35] [CLEANUP] Cleaning up all agent connections and views [08:34:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:35] [CLEANUP] Stopped and removed 0 video connections [08:34:35] [CLEANUP] Removed 0 video views [08:34:35] [CLEANUP] Removed 0 feed scroll views [08:34:35] [CLEANUP] Removed 0 status labels [08:34:35] [CLEANUP] Reset agent query state [08:34:35] [CLEANUP] Updated page indicator [08:34:35] [CLEANUP] Rebuilt video layout [08:34:35] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:35] [CLEANUP] ======================================== [08:34:35] [SERVER] Starting reconnect polling (5s interval) [08:34:35] [CLEANUP] ======================================== [08:34:35] [CLEANUP] Cleaning up all agent connections and views [08:34:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:34:35] [CLEANUP] Stopped and removed 0 video connections [08:34:35] [CLEANUP] Removed 0 video views [08:34:35] [CLEANUP] Removed 0 feed scroll views [08:34:35] [CLEANUP] Removed 0 status labels [08:34:35] [CLEANUP] Reset agent query state [08:34:35] [CLEANUP] Updated page indicator [08:34:35] [CLEANUP] Rebuilt video layout [08:34:35] [CLEANUP] ✅ All agent connections and views cleaned up [08:34:35] [CLEANUP] ======================================== [08:34:35] [SERVER] Starting reconnect polling (5s interval) [08:34:35] [LIFECYCLE] App resigning active - cleared crash flag [08:34:36] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [08:34:36] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [08:34:36] [SECURITY] Saved background timestamp [08:34:36] [LIFECYCLE] App entering background - cleared crash flag [08:34:36] [CLIENT_SIG] Disconnecting [08:34:36] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [08:34:36] [DB] ✅ Chat database flushed (WAL checkpoint) before background [08:34:36] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:34:36] [LIFECYCLE] Background snapshot: count=50, maxId=28815 [08:34:36] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [08:34:36] [WS] Canceling WebSocket for query connection to iosILUIWU [08:34:36] In cleanupPeer [08:34:36] In cleanupPeer [08:34:36] [LIFECYCLE] WebRTC audio disabled [08:34:36] [LIFECYCLE] AVAudioSession deactivated [08:34:36] [LIFECYCLE] All connections stopped [08:34:36] [CLIENT_SIG] WebSocket closed with code 1001 [08:34:36] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:34:36] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [08:34:36] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [08:34:36] [SERVER] Stopped reconnect polling [08:34:36] [WS] URLSession invalidated successfully [08:34:36] Will request stop of video 0 [08:34:36] Will request stop of video 0 [08:34:36] [PIP] Removing 0 tracks from PiP for connection 0 [08:34:36] [PIP] ✅ All tracks removed for connection 0 [08:34:36] [PIP] Removing 0 tracks from PiP for connection 0 [08:34:36] [PIP] ✅ All tracks removed for connection 0 [08:34:36] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:34:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:42:59] [BACKGROUND] Background fetch triggered [08:42:59] [BACKGROUND] Fetching recent messages for pre-cache [08:42:59] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:42:59] [WS] Connection failed: The request timed out. [08:42:59] [WS] Query connection failed - cleaning up all agent connections and views [08:42:59] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [08:42:59] [WS] Query connection error - cleaning up all agent connections and views [08:42:59] [CLEANUP] ======================================== [08:42:59] [CLEANUP] Cleaning up all agent connections and views [08:42:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:42:59] [CLEANUP] Stopped and removed 0 video connections [08:42:59] [CLEANUP] Removed 0 video views [08:42:59] [CLEANUP] Removed 0 feed scroll views [08:42:59] [CLEANUP] Removed 0 status labels [08:42:59] [CLEANUP] Reset agent query state [08:42:59] [CLEANUP] Updated page indicator [08:42:59] [CLEANUP] Rebuilt video layout [08:42:59] [CLEANUP] ✅ All agent connections and views cleaned up [08:42:59] [NETWORK] Status changed: connected [08:42:59] [CLEANUP] ======================================== [08:42:59] [SERVER] Skipping reconnect polling - app is in background [08:42:59] [CLEANUP] ======================================== [08:42:59] [CLEANUP] Cleaning up all agent connections and views [08:42:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:42:59] [CLEANUP] Stopped and removed 0 video connections [08:42:59] [CLEANUP] Removed 0 video views [08:42:59] [CLEANUP] Removed 0 feed scroll views [08:42:59] [CLEANUP] Removed 0 status labels [08:42:59] [CLEANUP] Reset agent query state [08:42:59] [CLEANUP] Updated page indicator [08:42:59] [CLEANUP] Rebuilt video layout [08:42:59] [CLEANUP] ✅ All agent connections and views cleaned up [08:42:59] [CLEANUP] ======================================== [08:42:59] [SERVER] Skipping reconnect polling - app is in background [08:43:00] [CLIENT_SIG] WebSocket opened [08:43:00] [CLIENT_SIG] HELLO sent as client for session ILUIWU [08:43:00] [CLIENT_SIG] Connected! clientId=2YGgkCE3aQn_6duQ [08:43:00] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [08:43:00] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [08:43:00] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [08:43:00] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [08:43:00] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [08:43:00] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [08:43:00] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [08:43:00] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [08:43:00] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [08:43:00] [BACKGROUND] Pre-downloaded 0 thumbnails [08:43:00] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [08:43:01] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:43:01] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:43:01] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [08:43:01] HELLO → sent (cached token, role=query) [08:43:01] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [08:43:01] [WS] Query connection failed - cleaning up all agent connections and views [08:43:01] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [08:43:01] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [08:43:01] [CLEANUP] ======================================== [08:43:01] [CLEANUP] Cleaning up all agent connections and views [08:43:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:43:01] [CLEANUP] Stopped and removed 0 video connections [08:43:01] [CLEANUP] Removed 0 video views [08:43:01] [CLEANUP] Removed 0 feed scroll views [08:43:01] [CLEANUP] Removed 0 status labels [08:43:01] [CLEANUP] Reset agent query state [08:43:01] [CLEANUP] Updated page indicator [08:43:01] [CLEANUP] Rebuilt video layout [08:43:01] [CLEANUP] ✅ All agent connections and views cleaned up [08:43:01] [CLEANUP] ======================================== [08:43:01] [SERVER] Skipping reconnect polling - app is in background [08:43:01] [CLEANUP] ======================================== [08:43:01] [CLEANUP] Cleaning up all agent connections and views [08:43:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [08:43:01] [CLEANUP] Stopped and removed 0 video connections [08:43:01] [CLEANUP] Removed 0 video views [08:43:01] [CLEANUP] Removed 0 feed scroll views [08:43:01] [CLEANUP] Removed 0 status labels [08:43:01] [CLEANUP] Reset agent query state [08:43:01] [CLEANUP] Updated page indicator [08:43:01] [CLEANUP] Rebuilt video layout [08:43:01] [CLEANUP] ✅ All agent connections and views cleaned up [08:43:01] [CLEANUP] ======================================== [08:43:01] [SERVER] Skipping reconnect polling - app is in background [08:52:19] [BACKGROUND] Background fetch triggered [08:52:19] [BACKGROUND] Fetching recent messages for pre-cache [08:52:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [08:52:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [08:52:19] [BACKGROUND] Background fetch triggered [08:52:19] [BACKGROUND] Fetching recent messages for pre-cache [08:52:19] [NETWORK] Status changed: connected [08:52:19] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [08:52:19] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [08:52:19] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [08:52:19] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:01:39] [BACKGROUND] Background fetch triggered [09:01:39] [BACKGROUND] Fetching recent messages for pre-cache [09:01:39] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:01:39] [WS] Connection failed: The request timed out. [09:01:39] [WS] Query connection failed - cleaning up all agent connections and views [09:01:39] [WS] WebSocket task completed with error - isQueryOnly=true: The request timed out. [09:01:39] [WS] Query connection error - cleaning up all agent connections and views [09:01:39] [CLEANUP] ======================================== [09:01:39] [CLEANUP] Cleaning up all agent connections and views [09:01:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:01:39] [CLEANUP] Stopped and removed 0 video connections [09:01:39] [CLEANUP] Removed 0 video views [09:01:39] [CLEANUP] Removed 0 feed scroll views [09:01:39] [CLEANUP] Removed 0 status labels [09:01:39] [CLEANUP] Reset agent query state [09:01:39] [CLEANUP] Updated page indicator [09:01:39] [CLEANUP] Rebuilt video layout [09:01:39] [CLEANUP] ✅ All agent connections and views cleaned up [09:01:39] [CLEANUP] ======================================== [09:01:39] [SERVER] Skipping reconnect polling - app is in background [09:01:39] [CLEANUP] ======================================== [09:01:39] [BACKGROUND] Fetch error: The request timed out. [09:01:39] [CLEANUP] Cleaning up all agent connections and views [09:01:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:01:39] [BACKGROUND] Fetch error: The request timed out. [09:01:39] [CLEANUP] Stopped and removed 0 video connections [09:01:39] [CLEANUP] Removed 0 video views [09:01:39] [CLEANUP] Removed 0 feed scroll views [09:01:39] [CLEANUP] Removed 0 status labels [09:01:39] [CLEANUP] Reset agent query state [09:01:39] [CLEANUP] Updated page indicator [09:01:39] [CLEANUP] Rebuilt video layout [09:01:39] [CLEANUP] ✅ All agent connections and views cleaned up [09:01:39] [CLEANUP] ======================================== [09:01:39] [SERVER] Skipping reconnect polling - app is in background [09:01:39] [NETWORK] Status changed: connected [09:01:39] [CLIENT_SIG] WebSocket opened [09:01:39] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:01:39] [CLIENT_SIG] Connected! clientId=Si3sHHYoFXH2JlGB [09:01:39] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:01:39] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:01:39] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:01:39] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:01:39] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:01:40] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:01:40] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:01:40] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:01:40] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:01:40] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:01:40] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [09:01:40] [BACKGROUND] Pre-downloaded 0 thumbnails [09:01:40] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:01:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:01:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:01:41] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:01:41] HELLO → sent (cached token, role=query) [09:01:41] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:01:41] [WS] Query connection failed - cleaning up all agent connections and views [09:01:41] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:01:41] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:01:41] [CLEANUP] ======================================== [09:01:41] [CLEANUP] Cleaning up all agent connections and views [09:01:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:01:41] [CLEANUP] Stopped and removed 0 video connections [09:01:41] [CLEANUP] Removed 0 video views [09:01:41] [CLEANUP] Removed 0 feed scroll views [09:01:41] [CLEANUP] Removed 0 status labels [09:01:41] [CLEANUP] Reset agent query state [09:01:41] [CLEANUP] Updated page indicator [09:01:41] [CLEANUP] Rebuilt video layout [09:01:41] [CLEANUP] ✅ All agent connections and views cleaned up [09:01:41] [CLEANUP] ======================================== [09:01:41] [SERVER] Skipping reconnect polling - app is in background [09:01:41] [CLEANUP] ======================================== [09:01:41] [CLEANUP] Cleaning up all agent connections and views [09:01:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:01:41] [CLEANUP] Stopped and removed 0 video connections [09:01:41] [CLEANUP] Removed 0 video views [09:01:41] [CLEANUP] Removed 0 feed scroll views [09:01:41] [CLEANUP] Removed 0 status labels [09:01:41] [CLEANUP] Reset agent query state [09:01:41] [CLEANUP] Updated page indicator [09:01:41] [CLEANUP] Rebuilt video layout [09:01:41] [CLEANUP] ✅ All agent connections and views cleaned up [09:01:41] [CLEANUP] ======================================== [09:01:41] [SERVER] Skipping reconnect polling - app is in background [09:09:25] [BACKGROUND] Background fetch triggered [09:09:25] [BACKGROUND] Fetching recent messages for pre-cache [09:09:25] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:09:25] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:09:25] [NETWORK] Status changed: connected [09:09:25] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <72DB13B4-948D-4929-8814-29E7E393945D>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <72DB13B4-948D-4929-8814-29E7E393945D>.<1>, NSLocalizedDescription=The network connection was lost.} [09:09:25] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:09:25] [CLIENT_SIG] Send error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSDescription=Socket is not connected} [09:09:25] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [09:09:25] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:09:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:09:26] HELLO → sent (cached token, role=query) [09:09:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:09:26] [WS] Query connection failed - cleaning up all agent connections and views [09:09:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:09:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:09:26] [CLEANUP] ======================================== [09:09:26] [CLEANUP] Cleaning up all agent connections and views [09:09:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:09:26] [CLEANUP] Stopped and removed 0 video connections [09:09:26] [CLEANUP] Removed 0 video views [09:09:26] [CLEANUP] Removed 0 feed scroll views [09:09:26] [CLEANUP] Removed 0 status labels [09:09:26] [CLEANUP] Reset agent query state [09:09:26] [CLEANUP] Updated page indicator [09:09:26] [CLEANUP] Rebuilt video layout [09:09:26] [CLEANUP] ✅ All agent connections and views cleaned up [09:09:26] [CLEANUP] ======================================== [09:09:26] [SERVER] Skipping reconnect polling - app is in background [09:09:26] [CLEANUP] ======================================== [09:09:26] [CLEANUP] Cleaning up all agent connections and views [09:09:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:09:26] [CLEANUP] Stopped and removed 0 video connections [09:09:26] [CLEANUP] Removed 0 video views [09:09:26] [CLEANUP] Removed 0 feed scroll views [09:09:26] [CLEANUP] Removed 0 status labels [09:09:26] [CLEANUP] Reset agent query state [09:09:26] [CLEANUP] Updated page indicator [09:09:26] [CLEANUP] Rebuilt video layout [09:09:26] [CLEANUP] ✅ All agent connections and views cleaned up [09:09:26] [CLEANUP] ======================================== [09:09:26] [SERVER] Skipping reconnect polling - app is in background [09:09:26] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [09:09:26] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:09:26] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:09:26] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:09:26] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:09:26] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:09:26] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:09:26] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:09:26] [BACKGROUND] Pre-cached 50 ChatMessage objects for instant display (preserved 0 from push) [09:09:26] [BACKGROUND] Pre-downloaded 0 thumbnails [09:09:26] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [09:09:27] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:09:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:09:27] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:09:27] HELLO → sent (cached token, role=query) [09:09:27] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:09:27] [WS] Query connection failed - cleaning up all agent connections and views [09:09:27] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:09:27] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:09:27] [CLEANUP] ======================================== [09:09:27] [CLEANUP] Cleaning up all agent connections and views [09:09:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:09:27] [CLEANUP] Stopped and removed 0 video connections [09:09:27] [CLEANUP] Removed 0 video views [09:09:27] [CLEANUP] Removed 0 feed scroll views [09:09:27] [CLEANUP] Removed 0 status labels [09:09:27] [CLEANUP] Reset agent query state [09:09:27] [CLEANUP] Updated page indicator [09:09:27] [CLEANUP] Rebuilt video layout [09:09:27] [CLEANUP] ✅ All agent connections and views cleaned up [09:09:27] [CLEANUP] ======================================== [09:09:27] [SERVER] Skipping reconnect polling - app is in background [09:09:27] [CLEANUP] ======================================== [09:09:27] [CLEANUP] Cleaning up all agent connections and views [09:09:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:09:27] [CLEANUP] Stopped and removed 0 video connections [09:09:27] [CLEANUP] Removed 0 video views [09:09:27] [CLEANUP] Removed 0 feed scroll views [09:09:27] [CLEANUP] Removed 0 status labels [09:09:27] [CLEANUP] Reset agent query state [09:09:27] [CLEANUP] Updated page indicator [09:09:27] [CLEANUP] Rebuilt video layout [09:09:27] [CLEANUP] ✅ All agent connections and views cleaned up [09:09:27] [CLEANUP] ======================================== [09:09:27] [SERVER] Skipping reconnect polling - app is in background [09:10:40] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:10:40] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:10:40] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:10:40] [PUSH] Silent push received [09:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=2, message_id=nil, type=nil [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [09:10:40] [PUSH_EMBED] No embedded message_data in notification [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [09:10:40] [PUSH] No embedded data, pre-loading messages from server [09:10:40] [NETWORK] Status changed: connected [09:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [09:10:40] [PUSH] Silent push received [09:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=2, message_id=nil, type=nil [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [09:10:40] [PUSH_EMBED] No embedded message_data in notification [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [09:10:40] [PUSH] No embedded data, pre-loading messages from server [09:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [09:10:40] [PUSH] Silent push received [09:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=2, message_id=nil, type=nil [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [09:10:40] [PUSH_EMBED] No embedded message_data in notification [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [09:10:40] [PUSH] No embedded data, pre-loading messages from server [09:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [09:10:40] [PUSH] Silent push received [09:10:40] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:40 +0000, appState=2, message_id=nil, type=nil [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:40 +0000 [09:10:40] [PUSH_EMBED] No embedded message_data in notification [09:10:40] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:10:40] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806], handled=false [09:10:40] [PUSH] No embedded data, pre-loading messages from server [09:10:40] [PUSH_PRELOAD] Fetching messages for instant display cache [09:10:40] [CLIENT_SIG] WebSocket opened [09:10:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:10:40] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:10:40] HELLO → sent (cached token, role=query) [09:10:40] [CLIENT_SIG] Connected! clientId=My8ieg_t7-kKqsxx [09:10:40] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:10:40] [WS] Query connection failed - cleaning up all agent connections and views [09:10:40] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:10:40] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:10:40] [CLEANUP] ======================================== [09:10:40] [CLEANUP] Cleaning up all agent connections and views [09:10:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:40] [CLEANUP] Stopped and removed 0 video connections [09:10:40] [CLEANUP] Removed 0 video views [09:10:40] [CLEANUP] Removed 0 feed scroll views [09:10:40] [CLEANUP] Removed 0 status labels [09:10:40] [CLEANUP] Reset agent query state [09:10:40] [CLEANUP] Updated page indicator [09:10:40] [CLEANUP] Rebuilt video layout [09:10:40] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:40] [CLEANUP] ======================================== [09:10:40] [SERVER] Skipping reconnect polling - app is in background [09:10:40] [CLEANUP] ======================================== [09:10:40] [CLEANUP] Cleaning up all agent connections and views [09:10:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:40] [CLEANUP] Stopped and removed 0 video connections [09:10:40] [CLEANUP] Removed 0 video views [09:10:40] [CLEANUP] Removed 0 feed scroll views [09:10:40] [CLEANUP] Removed 0 status labels [09:10:40] [CLEANUP] Reset agent query state [09:10:40] [CLEANUP] Updated page indicator [09:10:40] [CLEANUP] Rebuilt video layout [09:10:40] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:40] [CLEANUP] ======================================== [09:10:40] [SERVER] Skipping reconnect polling - app is in background [09:10:40] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:10:40] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:10:40] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:10:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:10:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:10:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:10:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5963 vccs=0 [09:10:41] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28815 [09:10:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28812, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [09:10:41] [PUSH] Parsed message_id: 28812 [09:10:41] [PUSH] Parsed operation_type: 3 [09:10:41] [PUSH] Taking direct action: opType=3, messageId=28812 [09:10:41] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28812 [09:10:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:10:41] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:41] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:10:41] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [09:10:41] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:10:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:10:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:10:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:10:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:10:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:10:41] [INCREMENTAL_SYNC] ✅ No new messages [09:10:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5963 vccs=0 [09:10:41] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28815 [09:10:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28815, AnyHashable("operation_type"): 3] [09:10:41] [PUSH] Parsed message_id: 28815 [09:10:41] [PUSH] Parsed operation_type: 3 [09:10:41] [PUSH] Taking direct action: opType=3, messageId=28815 [09:10:41] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28815 [09:10:41] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:41] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:10:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5963 vccs=0 [09:10:41] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28815 [09:10:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28813, AnyHashable("session_id"): ILUIWU] [09:10:41] [PUSH] Parsed message_id: 28813 [09:10:41] [PUSH] Parsed operation_type: 3 [09:10:41] [PUSH] Taking direct action: opType=3, messageId=28813 [09:10:41] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28813 [09:10:41] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:41] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:10:41] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:10:41] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:10:41] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [09:10:41] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:10:41] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:10:41] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:41] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:10:41] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:10:41] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:10:41] [INCREMENTAL_SYNC] ✅ No new messages [09:10:41] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:41] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5964 vccs=0 [09:10:41] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28815 [09:10:41] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28814, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [09:10:41] [PUSH] Parsed message_id: 28814 [09:10:41] [PUSH] Parsed operation_type: 3 [09:10:41] [PUSH] Taking direct action: opType=3, messageId=28814 [09:10:41] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28814 [09:10:41] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:41] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:10:41] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:10:41] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:10:41] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28815 [09:10:41] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:10:41] [INCREMENTAL_SYNC] ✅ No new messages [09:10:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:10:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:10:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:10:42] HELLO → sent (cached token, role=query) [09:10:42] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:10:42] [WS] Query connection failed - cleaning up all agent connections and views [09:10:42] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:10:42] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:10:42] [CLEANUP] ======================================== [09:10:42] [CLEANUP] Cleaning up all agent connections and views [09:10:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:42] [CLEANUP] Stopped and removed 0 video connections [09:10:42] [CLEANUP] Removed 0 video views [09:10:42] [CLEANUP] Removed 0 feed scroll views [09:10:42] [CLEANUP] Removed 0 status labels [09:10:42] [CLEANUP] Reset agent query state [09:10:42] [CLEANUP] Updated page indicator [09:10:42] [CLEANUP] Rebuilt video layout [09:10:42] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:42] [CLEANUP] ======================================== [09:10:42] [SERVER] Skipping reconnect polling - app is in background [09:10:42] [CLEANUP] ======================================== [09:10:42] [CLEANUP] Cleaning up all agent connections and views [09:10:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:42] [CLEANUP] Stopped and removed 0 video connections [09:10:42] [CLEANUP] Removed 0 video views [09:10:42] [CLEANUP] Removed 0 feed scroll views [09:10:42] [CLEANUP] Removed 0 status labels [09:10:42] [CLEANUP] Reset agent query state [09:10:42] [CLEANUP] Updated page indicator [09:10:42] [CLEANUP] Rebuilt video layout [09:10:42] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:42] [CLEANUP] ======================================== [09:10:42] [SERVER] Skipping reconnect polling - app is in background [09:10:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:10:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:10:47] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [09:10:47] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:47] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=5970 vccs=0 [09:10:47] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28816 [09:10:47] [PUSH] handlePollEventsNotification userInfo: [:] [09:10:47] [PUSH] No message_id in userInfo [09:10:47] [PUSH] No operation_type in userInfo [09:10:47] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:10:47] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:47] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:47] [FAST_REFRESH] Already have 50 messages in memory [09:10:47] [FAST_REFRESH] maxMemoryId=28815, maxLocalId=28816 [09:10:47] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28815) [09:10:47] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 51 total) [09:10:47] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:10:47] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:10:47] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:10:47] [READBY_OPT] Fetching readBy for 4 unsettled messages (targeted) [09:10:47] [GAP_FIX] Incremental sync will use since_id=28815 (background max=28815, current DB max=28816) [09:10:47] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:10:47] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28816 [09:10:47] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:10:47] [PUSH] Silent push received [09:10:47] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:47 +0000, appState=2, message_id=28816, type=nil [09:10:47] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:47 +0000 [09:10:47] [PUSH_TRACE] ⬇️ Processing embedded message_id=28816 [09:10:47] [PUSH_EMBED] 📩 Received embedded message: id=28816, type=0, sender=Esra [09:10:47] [PUSH_TRACE] ⬇️ Message details: text="Back home baby...", datesent=2026-04-23 07:10:45 [09:10:47] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:10:47] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28816 [09:10:47] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28816 [09:10:47] [PUSH_EMBED] ✅ Saved message 28816 to local DB (sync) [09:10:47] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28816 [09:10:47] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28816 [09:10:47] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28816 [09:10:47] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807, 28806] [09:10:47] [PUSH_EMBED] Inserted message 28816 into existing cache (now 51 messages) [09:10:47] [PUSH_TRACE] 📦 ✅ Inserted message 28816, cache now has IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:47] [PUSH_TRACE] 📦 EXITING cache update queue for message 28816 [09:10:47] [PUSH_EMBED] Fetching evolution data for message 28816 in background [09:10:47] [PUSH_EMBED] ✅ Fully processed message 28816 [09:10:47] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28816 [09:10:47] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807], handled=true [09:10:47] [PUSH] Embedded message handled instantly from silent push [09:10:47] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:10:47] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28816 [09:10:47] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:10:47] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:10:47] [PUSH_TRACE] 👁️ Received message id=28816, text="Back home baby..." [09:10:47] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:10:47] [PUSH_UI] Message 28816 already in memory - skipping insert [09:10:47] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:10:47] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:47] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=5970 vccs=0 [09:10:47] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28816 [09:10:47] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("datesent"): 2026-04-23 07:10:45, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("operation_type"): 0, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("timer"): 0, AnyHashable("message_id"): 28816, AnyHashable("sender_name"): Esra, AnyHashable("message_type"): 0, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:10:45"; "file_name" = ""; "is_encrypted" = 0; message = "Back home baby"; "message_id" = 28816; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28815; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): Back home baby] [09:10:47] [PUSH_EMBED_VC] Message 28816 already in memory - skipping [09:10:47] [PUSH] ⚡ Embedded message handled directly in ViewController [09:10:47] [PUSH] Parsed message_id: 28816 [09:10:47] [PUSH] Parsed operation_type: 0 [09:10:47] [PUSH] Taking direct action: opType=0, messageId=28816 [09:10:47] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28816 [09:10:47] [PUSH] ⚡ Message 28816 already in memory - skipping duplicate notification entirely [09:10:47] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:47] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:10:47] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:10:47] HELLO → sent (cached token, role=query) [09:10:47] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <9B835F20-77DD-4EBA-8397-F5C1B20CABD0>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <9B835F20-77DD-4EBA-8397-F5C1B20CABD0>.<1>, NSLocalizedDescription=The network connection was lost.} [09:10:47] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:10:47] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [09:10:47] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:10:47] [COMBINED_FETCH] Loaded 4 read receipts, 0 messages with reactions [09:10:47] [FAST_REFRESH] Enriched 4/4 unsettled messages with readBy data [09:10:47] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:10:47] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:10:47] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:10:47] [WS] Query connection failed - cleaning up all agent connections and views [09:10:47] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:10:47] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:10:47] [CLEANUP] ======================================== [09:10:47] [CLEANUP] Cleaning up all agent connections and views [09:10:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:47] [CLEANUP] Stopped and removed 0 video connections [09:10:47] [CLEANUP] Removed 0 video views [09:10:47] [CLEANUP] Removed 0 feed scroll views [09:10:47] [CLEANUP] Removed 0 status labels [09:10:47] [CLEANUP] Reset agent query state [09:10:47] [CLEANUP] Updated page indicator [09:10:47] [CLEANUP] Rebuilt video layout [09:10:47] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:47] [CLEANUP] ======================================== [09:10:47] [SERVER] Skipping reconnect polling - app is in background [09:10:47] [CLEANUP] ======================================== [09:10:47] [CLEANUP] Cleaning up all agent connections and views [09:10:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:47] [CLEANUP] Stopped and removed 0 video connections [09:10:47] [CLEANUP] Removed 0 video views [09:10:47] [CLEANUP] Removed 0 feed scroll views [09:10:47] [CLEANUP] Removed 0 status labels [09:10:47] [CLEANUP] Reset agent query state [09:10:47] [CLEANUP] Updated page indicator [09:10:47] [CLEANUP] Rebuilt video layout [09:10:47] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:47] [CLEANUP] ======================================== [09:10:47] [SERVER] Skipping reconnect polling - app is in background [09:10:47] [PUSH_EMBED] Got evolution data for message 28816, saving to local DB [09:10:47] [PUSH_EMBED] Saved evolution data for message 28816 [09:10:47] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:10:47] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28816] [09:10:47] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:47] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:47] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:10:47] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:10:47] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:10:47] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:10:47] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:10:47] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28816 [09:10:47] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:10:47] [FAST_REFRESH] Incremental sync complete - 51 messages [09:10:47] [INCREMENTAL_SYNC] ✅ No new messages [09:10:47] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:10:47] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:10:47] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:10:47] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:47] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:10:47] [SCROLL] wasNearBottom=true, threshold=758, offset=3865, contentH=4623, boundsH=758, forceScroll=false [09:10:48] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:10:48] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28815 → 28816 [09:10:48] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [09:10:48] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3865 [09:10:49] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:10:49] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:10:49] [PUSH] Silent push received [09:10:49] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:10:49 +0000, appState=2, message_id=nil, type=nil [09:10:49] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:49] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:10:49 +0000 [09:10:49] [PUSH_EMBED] No embedded message_data in notification [09:10:49] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:10:49] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807], handled=false [09:10:49] [PUSH] No embedded data, pre-loading messages from server [09:10:49] [PUSH_PRELOAD] Fetching messages for instant display cache [09:10:49] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:10:49] HELLO → sent (cached token, role=query) [09:10:49] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:10:49] [WS] Query connection failed - cleaning up all agent connections and views [09:10:49] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:10:49] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:10:49] [CLEANUP] ======================================== [09:10:49] [CLEANUP] Cleaning up all agent connections and views [09:10:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:49] [CLEANUP] Stopped and removed 0 video connections [09:10:49] [CLEANUP] Removed 0 video views [09:10:49] [CLEANUP] Removed 0 feed scroll views [09:10:49] [CLEANUP] Removed 0 status labels [09:10:49] [CLEANUP] Reset agent query state [09:10:49] [CLEANUP] Updated page indicator [09:10:49] [CLEANUP] Rebuilt video layout [09:10:49] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:49] [CLEANUP] ======================================== [09:10:49] [SERVER] Skipping reconnect polling - app is in background [09:10:49] [CLEANUP] ======================================== [09:10:49] [CLEANUP] Cleaning up all agent connections and views [09:10:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:10:49] [CLEANUP] Stopped and removed 0 video connections [09:10:49] [CLEANUP] Removed 0 video views [09:10:49] [CLEANUP] Removed 0 feed scroll views [09:10:49] [CLEANUP] Removed 0 status labels [09:10:49] [CLEANUP] Reset agent query state [09:10:49] [CLEANUP] Updated page indicator [09:10:49] [CLEANUP] Rebuilt video layout [09:10:49] [CLEANUP] ✅ All agent connections and views cleaned up [09:10:49] [CLEANUP] ======================================== [09:10:49] [SERVER] Skipping reconnect polling - app is in background [09:10:50] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:10:50] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:10:50] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:10:50] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:10:50] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28725] [09:10:50] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28725] [09:10:50] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:10:50] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:10:50] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5972 vccs=0 [09:10:50] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28816 [09:10:50] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28816, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [09:10:50] [PUSH] Parsed message_id: 28816 [09:10:50] [PUSH] Parsed operation_type: 3 [09:10:50] [PUSH] Taking direct action: opType=3, messageId=28816 [09:10:50] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28816 [09:10:50] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:10:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:10:50] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28816 [09:10:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:10:50] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:10:50] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28816] [09:10:50] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:10:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:10:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [09:10:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:10:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:10:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:10:50] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:10:50] [SCROLL] wasNearBottom=true, threshold=758, offset=3865, contentH=4700, boundsH=758, forceScroll=false [09:10:50] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:10:50] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:11:02] [PUSH] Notification tapped - session_id: ILUIWU [09:11:02] [PUSH] Max message_id before tap: 28816 [09:11:02] [PUSH] Stored pending session: ILUIWU [09:11:02] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:11:02 +0000 [09:11:02] [PUSH_TRACE] ⬇️ Processing embedded message_id=28816 [09:11:02] [PUSH_EMBED] 📩 Received embedded message: id=28816, type=0, sender=Esra [09:11:02] [PUSH_TRACE] ⬇️ Message details: text="Back home baby...", datesent=2026-04-23 07:10:45 [09:11:02] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:11:02] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28816 [09:11:02] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28816 [09:11:02] [NETWORK] Status changed: connected [09:11:02] [PUSH_EMBED] ✅ Saved message 28816 to local DB (sync) [09:11:02] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28816 [09:11:02] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28816 [09:11:02] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28816 [09:11:02] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [PUSH_TRACE] 📦 ⚠️ Message 28816 already in cache, skipping insert [09:11:02] [PUSH_TRACE] 📦 EXITING cache update queue for message 28816 [09:11:02] [PUSH_EMBED] Fetching evolution data for message 28816 in background [09:11:02] [PUSH_EMBED] ✅ Fully processed message 28816 [09:11:02] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28816 [09:11:02] [PUSH] Embedded message handled instantly on tap [09:11:02] [SECURITY] Timeout check: elapsed=2185.8376269340515s, timeout=300.0s [09:11:02] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [09:11:02] [PUSH] Fetching server messages since_id=28816 to catch coalesced notifications on tap [09:11:02] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28816 to catch coalesced notifications [09:11:02] [PUSH_PRELOAD] Fetching messages for instant display cache [09:11:02] [AUTH] ✅ All guards passed, showing privacy cover [09:11:02] [LIFECYCLE] App entering foreground - restoring connections [09:11:02] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [09:11:02] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:11:02] [PUSH_TRACE] 🔄 FOREGROUND: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [LIFECYCLE] Away > 2 minutes (2185s) - will scroll to bottom [09:11:02] [UPLOAD_RETRY] No pending uploads to retry [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [READBY_OPT] No message IDs to fetch - skipping server call [09:11:02] [LIFECYCLE] WebRTC audio re-enabled [09:11:02] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:11:02] [CLIENT_SIG] Skipping connect - app in background (state=2) [09:11:02] [VIEWER] Reconnecting after background - querying agents [09:11:02] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:11:02] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:11:02] [UNSENT_RETRY] Checking for unsent messages... [09:11:02] [PENDING_UPLOAD] Total pending upload messages: 0 [09:11:02] [UNSENT_RETRY] No unsent messages found [09:11:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:11:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:11:02] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:11:02] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:11:02] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:11:02] [PUSH_TRACE] 👁️ Received message id=28816, text="Back home baby..." [09:11:02] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:11:02] [PUSH_UI] Message 28816 already in memory - skipping insert [09:11:02] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:11:02] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [09:11:02] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=51>50=true, maxId=28816>28815=true, shouldScroll=true [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:11:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:11:02] HELLO → sent (cached token, role=query) [09:11:02] [CLIENT_SIG] WebSocket opened [09:11:02] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:11:02] [PUSH_EMBED] Got evolution data for message 28816, saving to local DB [09:11:02] [PUSH_EMBED] Saved evolution data for message 28816 [09:11:02] [CLIENT_SIG] Connected! clientId=s8ORg_PB0vX9WgrU [09:11:02] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:11:02] [WS] Query connection failed - cleaning up all agent connections and views [09:11:02] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:11:02] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:11:02] [CLEANUP] ======================================== [09:11:02] [CLEANUP] Cleaning up all agent connections and views [09:11:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:02] [CLEANUP] Stopped and removed 0 video connections [09:11:02] [CLEANUP] Removed 0 video views [09:11:02] [CLEANUP] Removed 0 feed scroll views [09:11:02] [CLEANUP] Removed 0 status labels [09:11:02] [CLEANUP] Reset agent query state [09:11:02] [CLEANUP] Updated page indicator [09:11:02] [CLEANUP] Rebuilt video layout [09:11:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:02] [CLEANUP] ======================================== [09:11:02] [SERVER] Starting reconnect polling (5s interval) [09:11:02] [CLEANUP] ======================================== [09:11:02] [CLEANUP] Cleaning up all agent connections and views [09:11:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:02] [CLEANUP] Stopped and removed 0 video connections [09:11:02] [CLEANUP] Removed 0 video views [09:11:02] [CLEANUP] Removed 0 feed scroll views [09:11:02] [CLEANUP] Removed 0 status labels [09:11:02] [CLEANUP] Reset agent query state [09:11:02] [CLEANUP] Updated page indicator [09:11:02] [CLEANUP] Rebuilt video layout [09:11:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:02] [CLEANUP] ======================================== [09:11:02] [SERVER] Starting reconnect polling (5s interval) [09:11:02] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:11:02] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:11:02] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:11:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:11:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:11:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:11:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:11:02] [SCROLL] wasNearBottom=true, threshold=758, offset=3865, contentH=4700, boundsH=758, forceScroll=true [09:11:02] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:11:02] [SCROLL] 💓 alive, visible=44...52, rows=53, estHeight=0.0, heightCalls=0 [09:11:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:11:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3942 [09:11:02] [SCROLL] Scrolling to 3942, animated=false [09:11:02] [PUSH_PRELOAD] No messages or parse error [09:11:02] [PUSH] Server fetch on tap completed (success=false) [09:11:02] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5984 vccs=0 [09:11:02] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28816 [09:11:02] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("datesent"): 2026-04-23 07:10:45, AnyHashable("message_id"): 28816, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:10:45"; "file_name" = ""; "is_encrypted" = 0; message = "Back home baby"; "message_id" = 28816; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28815; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("message"): Back home baby] [09:11:02] [PUSH_EMBED_VC] Message 28816 already in memory - skipping [09:11:02] [PUSH] ⚡ Embedded message handled directly in ViewController [09:11:02] [PUSH] Parsed message_id: 28816 [09:11:02] [PUSH] Parsed operation_type: 0 [09:11:02] [PUSH] Taking direct action: opType=0, messageId=28816 [09:11:02] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28816 [09:11:02] [PUSH] ⚡ Message 28816 already in memory - skipping duplicate notification entirely [09:11:02] [GAP_FIX] Post-action sync: using background max 28815 to catch coalesced messages [09:11:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28816 [09:11:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:11:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28816] [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:11:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:11:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:11:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:11:02] [SCROLL] wasNearBottom=true, threshold=758, offset=3942, contentH=4700, boundsH=758, forceScroll=true [09:11:02] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:11:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:11:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3942 [09:11:02] [SCROLL] Scrolling to 3942, animated=false [09:11:02] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:11:02] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:11:02] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=5985 vccs=0 [09:11:02] [GAP_FIX] maxMessageIdAtBackground=28815, currentMaxLocalId=28816 [09:11:02] [PUSH] handlePollEventsNotification userInfo: [:] [09:11:02] [PUSH] No message_id in userInfo [09:11:02] [PUSH] No operation_type in userInfo [09:11:02] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:11:02] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [FAST_REFRESH] Already have 51 messages in memory [09:11:02] [FAST_REFRESH] maxMemoryId=28816, maxLocalId=28816 [09:11:02] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:11:02] [READBY_OPT] No message IDs to fetch - skipping server call [09:11:02] [GAP_FIX] Incremental sync will use since_id=28815 (background max=28815, current DB max=28816) [09:11:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28815, maxMemoryId=28816 [09:11:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28815 [09:11:02] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:11:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28816] [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:11:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:11:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:11:02] [FAST_REFRESH] Incremental sync complete - 51 messages [09:11:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:11:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:11:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:11:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:02] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:11:02] [SCROLL] wasNearBottom=true, threshold=758, offset=3942, contentH=4700, boundsH=758, forceScroll=true [09:11:02] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:11:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:11:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3942, currentOffset=3942 [09:11:02] [SCROLL] Scrolling to 3942, animated=false [09:11:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:11:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:11:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:11:03] HELLO → sent (cached token, role=query) [09:11:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:11:03] [WS] Query connection failed - cleaning up all agent connections and views [09:11:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:11:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:11:03] [CLEANUP] ======================================== [09:11:03] [CLEANUP] Cleaning up all agent connections and views [09:11:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:03] [CLEANUP] Stopped and removed 0 video connections [09:11:03] [CLEANUP] Removed 0 video views [09:11:03] [CLEANUP] Removed 0 feed scroll views [09:11:03] [CLEANUP] Removed 0 status labels [09:11:03] [CLEANUP] Reset agent query state [09:11:03] [CLEANUP] Updated page indicator [09:11:03] [CLEANUP] Rebuilt video layout [09:11:03] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:03] [CLEANUP] ======================================== [09:11:03] [SERVER] Starting reconnect polling (5s interval) [09:11:03] [CLEANUP] ======================================== [09:11:03] [CLEANUP] Cleaning up all agent connections and views [09:11:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:03] [CLEANUP] Stopped and removed 0 video connections [09:11:03] [CLEANUP] Removed 0 video views [09:11:03] [CLEANUP] Removed 0 feed scroll views [09:11:03] [CLEANUP] Removed 0 status labels [09:11:03] [CLEANUP] Reset agent query state [09:11:03] [CLEANUP] Updated page indicator [09:11:03] [CLEANUP] Rebuilt video layout [09:11:03] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:03] [CLEANUP] ======================================== [09:11:03] [SERVER] Starting reconnect polling (5s interval) [09:11:04] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:11:04] [PIN_AUTH] Correct PIN [09:11:04] [SECURITY] Restored real session: ILUIWU [09:11:04] [SECURITY] Restored real session: ILUIWU [09:11:05] [FAKE_AI] cancel() called, wasRunning=false [09:11:05] [FAKE MODE] Exiting fake mode, restoring real session [09:11:05] [SECURITY] Restored real session: ILUIWU [09:11:05] [SECURITY] Saved real session: ILUIWU [09:11:05] [FAKE MODE] ✅ Restored real session: ILUIWU [09:11:05] [FAKE MODE] Loaded 50 messages (limited to page size) [09:11:05] [READBY_OPT] No message IDs to fetch - skipping server call [09:11:05] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [09:11:05] [AUTH] Cache had 51 messages, maxExistingId=28816, inserted 0 truly new [09:11:05] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>50=false, maxId=28816>28815=true, shouldScroll=true [09:11:05] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:11:05] [AUTH] UI update complete [09:11:05] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:11:05] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:11:05] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:11:05] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:11:05] [FAKE MODE] Enriched 0/0 unsettled messages with readBy data [09:11:05] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:11:05] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:11:05] [SCROLL] 💓 alive, visible=43...51, rows=52, estHeight=0.0, heightCalls=123 [09:11:05] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:11:05] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:11:05] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:11:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28816, 28815, 28814, 28813, 28812] [09:11:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:11:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:05] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:11:05] [SCROLL] wasNearBottom=true, threshold=758, offset=3890, contentH=4648, boundsH=758, forceScroll=true [09:11:05] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:11:05] [USER] ✅ User registered successfully [09:11:05] [PUSH] User registration after token update: success [09:11:05] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [09:11:05] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3890, currentOffset=3890 [09:11:05] [SCROLL] Scrolling to 3890, animated=false [09:11:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:11:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:11:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:11:05] HELLO → sent (cached token, role=query) [09:11:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:11:05] [WS] Query connection failed - cleaning up all agent connections and views [09:11:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:11:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:11:05] [CLEANUP] ======================================== [09:11:05] [CLEANUP] Cleaning up all agent connections and views [09:11:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:05] [CLEANUP] Stopped and removed 0 video connections [09:11:05] [CLEANUP] Removed 0 video views [09:11:05] [CLEANUP] Removed 0 feed scroll views [09:11:05] [CLEANUP] Removed 0 status labels [09:11:05] [CLEANUP] Reset agent query state [09:11:05] [CLEANUP] Updated page indicator [09:11:05] [CLEANUP] Rebuilt video layout [09:11:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:05] [CLEANUP] ======================================== [09:11:05] [SERVER] Starting reconnect polling (5s interval) [09:11:05] [CLEANUP] ======================================== [09:11:05] [CLEANUP] Cleaning up all agent connections and views [09:11:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:05] [CLEANUP] Stopped and removed 0 video connections [09:11:05] [CLEANUP] Removed 0 video views [09:11:05] [CLEANUP] Removed 0 feed scroll views [09:11:05] [CLEANUP] Removed 0 status labels [09:11:05] [CLEANUP] Reset agent query state [09:11:05] [CLEANUP] Updated page indicator [09:11:05] [CLEANUP] Rebuilt video layout [09:11:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:05] [CLEANUP] ======================================== [09:11:05] [SERVER] Starting reconnect polling (5s interval) [09:11:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:11:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:11:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:11:07] HELLO → sent (cached token, role=query) [09:11:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:11:07] [WS] Query connection failed - cleaning up all agent connections and views [09:11:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:11:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:11:07] [CLEANUP] ======================================== [09:11:07] [CLEANUP] Cleaning up all agent connections and views [09:11:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:07] [CLEANUP] Stopped and removed 0 video connections [09:11:07] [CLEANUP] Removed 0 video views [09:11:07] [CLEANUP] Removed 0 feed scroll views [09:11:07] [CLEANUP] Removed 0 status labels [09:11:07] [CLEANUP] Reset agent query state [09:11:07] [CLEANUP] Updated page indicator [09:11:07] [CLEANUP] Rebuilt video layout [09:11:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:07] [CLEANUP] ======================================== [09:11:07] [SERVER] Starting reconnect polling (5s interval) [09:11:07] [CLEANUP] ======================================== [09:11:07] [CLEANUP] Cleaning up all agent connections and views [09:11:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:07] [CLEANUP] Stopped and removed 0 video connections [09:11:07] [CLEANUP] Removed 0 video views [09:11:07] [CLEANUP] Removed 0 feed scroll views [09:11:07] [CLEANUP] Removed 0 status labels [09:11:07] [CLEANUP] Reset agent query state [09:11:07] [CLEANUP] Updated page indicator [09:11:07] [CLEANUP] Rebuilt video layout [09:11:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:07] [CLEANUP] ======================================== [09:11:07] [SERVER] Starting reconnect polling (5s interval) [09:11:07] [DOUBLE_TAP] Adding heart reaction to message 28816 [09:11:07] [DOUBLE_TAP] Action: add (alreadyReactedWithHeart: false) [09:11:07] [DOUBLE_TAP] Heart reaction added successfully (status: ok) [09:11:07] [REACTION_SCROLL] =====ENTER path=heart action=add msgId=28816 [09:11:07] [REACTION_SCROLL] state offsetY=3890 bounds=758 adjTop=0 adjBot=0 contentH=4648 estH=0 [09:11:07] [REACTION_SCROLL] rows oldCount=52 newCount=52 reactedRow=51 reactedVisible=true [09:11:07] [REACTION_SCROLL] reacted rectMinY=4559 rectH=77 cellFrameMinY=4559 cellFrameH=77 [09:11:07] [REACTION_SCROLL] anchor row=43 minY=3875 VPY=-15 visibleCount=9 visibleRows=[43, 44, 45, 46, 47, 48, 49, 50, 51] [09:11:07] [REACTION_SCROLL] scrollState dragging=false decel=false tracking=false [09:11:07] [REACTION_SCROLL] after reloadRows offsetΔ=0 contentHΔ=20 [09:11:07] [REACTION_SCROLL] after layoutIfNeeded offsetΔFromSave=0 contentHDelta=20 [09:11:07] [REACTION_SCROLL] reactedAfter rectMinY=4559 rectH=97 rectMinYΔ=0 rectHΔ=20 [09:11:07] [REACTION_SCROLL] reactedCellFrameAfter minY=4559 h=97 [09:11:07] [REACTION_SCROLL] anchor rectMinYAfter=3875 drift=0 [09:11:07] [REACTION_SCROLL] math rawTarget=3890 maxOffsetY=3910 clamped=3890 clampedAgainstRaw=0 [09:11:07] [REACTION_SCROLL] no offset change (within 0.5pt, current=3890) [09:11:07] [REACTION_SCROLL] finalOffset=3890 totalΔFromSave=0 [09:11:08] [REACTION_SCROLL] =====EXIT [09:11:08] [LOCK] Lock button tapped - locking app immediately [09:11:08] [LOCK] Received lock app notification [09:11:08] [LIFECYCLE] App resigning active - cleared crash flag [09:11:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:11:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:11:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:11:08] HELLO → sent (cached token, role=query) [09:11:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:11:08] [WS] Query connection failed - cleaning up all agent connections and views [09:11:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:11:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:11:08] [CLEANUP] ======================================== [09:11:08] [CLEANUP] Cleaning up all agent connections and views [09:11:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:08] [CLEANUP] Stopped and removed 0 video connections [09:11:08] [CLEANUP] Removed 0 video views [09:11:08] [CLEANUP] Removed 0 feed scroll views [09:11:08] [CLEANUP] Removed 0 status labels [09:11:08] [CLEANUP] Reset agent query state [09:11:08] [CLEANUP] Updated page indicator [09:11:08] [CLEANUP] Rebuilt video layout [09:11:08] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:08] [CLEANUP] ======================================== [09:11:08] [SERVER] Starting reconnect polling (5s interval) [09:11:08] [CLEANUP] ======================================== [09:11:08] [CLEANUP] Cleaning up all agent connections and views [09:11:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:11:08] [CLEANUP] Stopped and removed 0 video connections [09:11:08] [CLEANUP] Removed 0 video views [09:11:08] [CLEANUP] Removed 0 feed scroll views [09:11:08] [CLEANUP] Removed 0 status labels [09:11:08] [CLEANUP] Reset agent query state [09:11:08] [CLEANUP] Updated page indicator [09:11:08] [CLEANUP] Rebuilt video layout [09:11:08] [CLEANUP] ✅ All agent connections and views cleaned up [09:11:08] [CLEANUP] ======================================== [09:11:08] [SERVER] Starting reconnect polling (5s interval) [09:11:09] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [09:11:09] [SECURITY] sceneDidEnterBackground - isAuthenticated=false [09:11:09] [SECURITY] ⚠️ NOT saving timestamp - isAuthenticated is false [09:11:09] [LIFECYCLE] App entering background - cleared crash flag [09:11:09] [CLIENT_SIG] Disconnecting [09:11:09] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:11:09] [DB] ✅ Chat database flushed (WAL checkpoint) before background [09:11:09] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:11:09] [LIFECYCLE] Background snapshot: count=50, maxId=28816 [09:11:09] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [09:11:09] [WS] Canceling WebSocket for query connection to iosILUIWU [09:11:09] In cleanupPeer [09:11:09] In cleanupPeer [09:11:09] [LIFECYCLE] WebRTC audio disabled [09:11:09] [LIFECYCLE] AVAudioSession deactivated [09:11:09] [LIFECYCLE] All connections stopped [09:11:09] [CLIENT_SIG] WebSocket closed with code 1001 [09:11:09] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:11:09] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:11:09] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:11:09] [SERVER] Stopped reconnect polling [09:11:09] [WS] URLSession invalidated successfully [09:11:09] Will request stop of video 0 [09:11:09] Will request stop of video 0 [09:11:09] [PIP] Removing 0 tracks from PiP for connection 0 [09:11:09] [PIP] ✅ All tracks removed for connection 0 [09:11:09] [PIP] Removing 0 tracks from PiP for connection 0 [09:11:09] [PIP] ✅ All tracks removed for connection 0 [09:12:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:03] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:03] [PUSH] Notification tapped - session_id: ILUIWU [09:12:03] [PUSH] Max message_id before tap: 28819 [09:12:03] [PUSH] Stored pending session: ILUIWU [09:12:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:03 +0000 [09:12:03] [PUSH_TRACE] ⬇️ Processing embedded message_id=28819 [09:12:03] [PUSH_EMBED] 📩 Received embedded message: id=28819, type=0, sender=Esra [09:12:03] [PUSH_TRACE] ⬇️ Message details: text="I have a dentist appointment at 17:30🥲...", datesent=2026-04-23 07:11:56 [09:12:03] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:12:03] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28819 [09:12:03] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28819 [09:12:03] [PUSH_EMBED] ✅ Saved message 28819 to local DB (sync) [09:12:03] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28819 [09:12:03] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28819 [09:12:03] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28819 [09:12:03] [PUSH_TRACE] 📦 Cache state: valid=false, count=0, IDs=[] [09:12:03] [PUSH_EMBED] Created new cache with embedded message 28819 [09:12:03] [PUSH_TRACE] 📦 ✅ Created new cache with message 28819 [09:12:03] [PUSH_TRACE] 📦 EXITING cache update queue for message 28819 [09:12:03] [PUSH_EMBED] Fetching evolution data for message 28819 in background [09:12:03] [PUSH_EMBED] ✅ Fully processed message 28819 [09:12:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28819 [09:12:03] [PUSH] Embedded message handled instantly on tap [09:12:03] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:12:03] [PUSH] Fetching server messages since_id=28819 to catch coalesced notifications on tap [09:12:03] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:12:03] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28819 to catch coalesced notifications [09:12:03] [PUSH_PRELOAD] Fetching messages for instant display cache [09:12:03] [LIFECYCLE] App entering foreground - restoring connections [09:12:03] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [09:12:03] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:12:03] [PUSH_TRACE] 🔄 FOREGROUND: memory has 50 msgs, IDs=[28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808, 28807] [09:12:03] [PUSH_TRACE] 🔄 FOREGROUND: cache has 1 msgs, valid=true, IDs=[28819] [09:12:03] [UPLOAD_RETRY] No pending uploads to retry [09:12:03] [NETWORK] Status changed: connected [09:12:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:12:03] [READBY_OPT] No message IDs to fetch - skipping server call [09:12:03] [LIFECYCLE] WebRTC audio re-enabled [09:12:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:12:03] [CLIENT_SIG] Skipping connect - app in background (state=2) [09:12:03] [VIEWER] Reconnecting after background - querying agents [09:12:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=running [09:12:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:12:03] [UNSENT_RETRY] Checking for unsent messages... [09:12:03] [PENDING_UPLOAD] Total pending upload messages: 0 [09:12:03] [UNSENT_RETRY] No unsent messages found [09:12:03] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:12:03] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:12:03] [PUSH_TRACE] 👁️ Received message id=28819, text="I have a dentist appointment a..." [09:12:03] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:12:03] [PUSH_TRACE] 👁️ BEFORE insert: 50 messages, first 5 IDs: [28816, 28815, 28814, 28813, 28812] [09:12:03] [PUSH_TRACE] 👁️ Inserted message 28819 at index 0 [09:12:03] [PUSH_UI] Inserted message 28819 into UI (now 51 messages) [09:12:03] [PUSH_TRACE] 👁️ AFTER insert: 51 messages, first 5 IDs: [28819, 28816, 28815, 28814, 28813] [09:12:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:03] [PUSH_TRACE] 👁️ handlePushMessageReceived END - success [09:12:03] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [09:12:03] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [09:12:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28819, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [09:12:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=6046 vccs=0 [09:12:03] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28819 [09:12:03] [PUSH] handlePollEventsNotification userInfo: [:] [09:12:03] [PUSH] No message_id in userInfo [09:12:03] [PUSH] No operation_type in userInfo [09:12:03] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:12:03] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=1, IDs=[28819] [09:12:03] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28819, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [09:12:03] [FAST_REFRESH] Already have 51 messages in memory [09:12:03] [FAST_REFRESH] maxMemoryId=28819, maxLocalId=28819 [09:12:03] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:12:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:03] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:12:03] [READBY_OPT] No message IDs to fetch - skipping server call [09:12:03] [GAP_FIX] Incremental sync will use since_id=28816 (background max=28816, current DB max=28819) [09:12:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:12:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28819 [09:12:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:12:03] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=51>50=true, maxId=28819>28816=true, shouldScroll=true [09:12:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:03] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:12:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:03] [CLIENT_SIG] WebSocket opened [09:12:03] HELLO → sent (cached token, role=query) [09:12:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:12:03] [CLIENT_SIG] Connected! clientId=fWurS7X4FTlC2Stl [09:12:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:03] [WS] Query connection failed - cleaning up all agent connections and views [09:12:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:03] [CLEANUP] ======================================== [09:12:03] [CLEANUP] Cleaning up all agent connections and views [09:12:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:03] [CLEANUP] Stopped and removed 0 video connections [09:12:03] [CLEANUP] Removed 0 video views [09:12:03] [CLEANUP] Removed 0 feed scroll views [09:12:03] [CLEANUP] Removed 0 status labels [09:12:03] [CLEANUP] Reset agent query state [09:12:03] [CLEANUP] Updated page indicator [09:12:03] [CLEANUP] Rebuilt video layout [09:12:03] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:03] [CLEANUP] ======================================== [09:12:03] [SERVER] Starting reconnect polling (5s interval) [09:12:03] [CLEANUP] ======================================== [09:12:03] [CLEANUP] Cleaning up all agent connections and views [09:12:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:03] [CLEANUP] Stopped and removed 0 video connections [09:12:03] [CLEANUP] Removed 0 video views [09:12:03] [CLEANUP] Removed 0 feed scroll views [09:12:03] [CLEANUP] Removed 0 status labels [09:12:03] [CLEANUP] Reset agent query state [09:12:03] [CLEANUP] Updated page indicator [09:12:03] [CLEANUP] Rebuilt video layout [09:12:03] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:03] [CLEANUP] ======================================== [09:12:03] [SERVER] Starting reconnect polling (5s interval) [09:12:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=114 [09:12:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28819, 28816, 28815, 28814, 28813] [09:12:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:12:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [09:12:03] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:12:03] [SCROLL] wasNearBottom=true, threshold=758, offset=3890, contentH=4668, boundsH=758, forceScroll=true [09:12:03] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:12:03] [SCROLL] 💓 alive, visible=43...51, rows=53, estHeight=0.0, heightCalls=0 [09:12:03] [PUSH_EMBED] Got evolution data for message 28819, saving to local DB [09:12:03] [PUSH_EMBED] Saved evolution data for message 28819 [09:12:03] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28816 → 28819 [09:12:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [09:12:03] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3962, currentOffset=3962 [09:12:03] [SCROLL] Scrolling to 3962, animated=false [09:12:03] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:12:03] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:12:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:04] [INCREMENTAL_SYNC] ✅ Found 3 new messages [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 3 new messages, IDs=[28819, 28818, 28817] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:04] [PUSH_PRELOAD] No messages or parse error [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28819, 28816, 28815, 28814, 28813, 28812, 28811, 28810, 28809, 28808] [09:12:04] [PUSH] Server fetch on tap completed (success=false) [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28818 [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28817 [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 2 new, total 53, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=3 [09:12:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:12:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6046 vccs=0 [09:12:04] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28819 [09:12:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28819, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:11:56"; "file_name" = ""; "is_encrypted" = 0; message = "I have a dentist appointment at 17:30\Ud83e\Udd72"; "message_id" = 28819; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28818; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): Esra, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("timer"): 0, AnyHashable("message"): I have a dentist appointment at 17:30🥲, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("file_name"): , AnyHashable("operation_type"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 3; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("datesent"): 2026-04-23 07:11:56] [09:12:04] [PUSH_EMBED_VC] Message 28819 already in memory - skipping [09:12:04] [PUSH] ⚡ Embedded message handled directly in ViewController [09:12:04] [PUSH] Parsed message_id: 28819 [09:12:04] [PUSH] Parsed operation_type: 0 [09:12:04] [PUSH] Taking direct action: opType=0, messageId=28819 [09:12:04] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28819 [09:12:04] [PUSH] ⚡ Message 28819 already in memory - skipping duplicate notification entirely [09:12:04] [GAP_FIX] Post-action sync: using background max 28816 to catch coalesced messages [09:12:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28819 [09:12:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:12:04] [FAST_REFRESH] Incremental sync complete - 53 messages [09:12:04] [INCREMENTAL_SYNC] ✅ Found 3 new messages [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 3 new messages, IDs=[28819, 28818, 28817] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=3 [09:12:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:12:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [09:12:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28819, 28818, 28817, 28816, 28815] [09:12:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:12:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:12:04] [SCROLL] wasNearBottom=true, threshold=758, offset=3962, contentH=4720, boundsH=758, forceScroll=true [09:12:04] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:12:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [09:12:04] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:12:04] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:12:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6046 vccs=0 [09:12:04] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28819 [09:12:04] [PUSH] handlePollEventsNotification userInfo: [:] [09:12:04] [PUSH] No message_id in userInfo [09:12:04] [PUSH] No operation_type in userInfo [09:12:04] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:12:04] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=1, IDs=[28819] [09:12:04] [PUSH_TRACE] 📬 POLL: memory state: count=53, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [FAST_REFRESH] Already have 53 messages in memory [09:12:04] [FAST_REFRESH] maxMemoryId=28819, maxLocalId=28819 [09:12:04] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:12:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:12:04] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:12:04] [READBY_OPT] No message IDs to fetch - skipping server call [09:12:04] [GAP_FIX] Incremental sync will use since_id=28816 (background max=28816, current DB max=28819) [09:12:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28819 [09:12:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:12:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=true, nearBottom=true), maxY=4154, currentOffset=4154 [09:12:04] [SCROLL] Scrolling to 4154, animated=false [09:12:04] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:12:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:12:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:04] [INCREMENTAL_SYNC] ✅ Found 3 new messages [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 3 new messages, IDs=[28819, 28818, 28817] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:04] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=3 [09:12:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:12:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:04] [FAST_REFRESH] Incremental sync complete - 53 messages [09:12:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=125 [09:12:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28819, 28818, 28817, 28816, 28815] [09:12:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:12:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:04] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:12:04] [SCROLL] wasNearBottom=true, threshold=758, offset=4154, contentH=4912, boundsH=758, forceScroll=true [09:12:04] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:12:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [09:12:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=true, nearBottom=true), maxY=4154, currentOffset=4154 [09:12:04] [SCROLL] Scrolling to 4154, animated=false [09:12:05] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:12:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:05] [PIN_AUTH] Correct PIN [09:12:05] [SECURITY] Restored real session: ILUIWU [09:12:05] [SECURITY] Restored real session: ILUIWU [09:12:05] [CLIENT_SIG] Event received: type=3 messageId=28819 [09:12:05] [WS_EVENT] Received event: type=3, messageId=28819 [09:12:05] [WS_EVENT] Read receipt for message 28819 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:05] HELLO → sent (cached token, role=query) [09:12:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:05] [WS] Query connection failed - cleaning up all agent connections and views [09:12:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:05] [CLEANUP] ======================================== [09:12:05] [CLEANUP] Cleaning up all agent connections and views [09:12:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:05] [CLEANUP] Stopped and removed 0 video connections [09:12:05] [CLEANUP] Removed 0 video views [09:12:05] [CLEANUP] Removed 0 feed scroll views [09:12:05] [CLEANUP] Removed 0 status labels [09:12:05] [CLEANUP] Reset agent query state [09:12:05] [CLEANUP] Updated page indicator [09:12:05] [CLEANUP] Rebuilt video layout [09:12:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:05] [CLEANUP] ======================================== [09:12:05] [SERVER] Starting reconnect polling (5s interval) [09:12:05] [CLEANUP] ======================================== [09:12:05] [CLEANUP] Cleaning up all agent connections and views [09:12:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:05] [CLEANUP] Stopped and removed 0 video connections [09:12:05] [CLEANUP] Removed 0 video views [09:12:05] [CLEANUP] Removed 0 feed scroll views [09:12:05] [CLEANUP] Removed 0 status labels [09:12:05] [CLEANUP] Reset agent query state [09:12:05] [CLEANUP] Updated page indicator [09:12:05] [CLEANUP] Rebuilt video layout [09:12:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:05] [CLEANUP] ======================================== [09:12:05] [SERVER] Starting reconnect polling (5s interval) [09:12:05] [LOCK] ✅ PIN auth callback - setting isAuthenticated = true [09:12:05] [FAKE_AI] cancel() called, wasRunning=false [09:12:05] [FAKE MODE] Exiting fake mode, restoring real session [09:12:05] [SECURITY] Restored real session: ILUIWU [09:12:05] [SECURITY] Saved real session: ILUIWU [09:12:05] [FAKE MODE] ✅ Restored real session: ILUIWU [09:12:05] [FAKE MODE] Loaded 50 messages (limited to page size) [09:12:05] [READBY_OPT] No message IDs to fetch - skipping server call [09:12:05] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [09:12:05] [AUTH] Cache had 1 messages, maxExistingId=28819, inserted 0 truly new [09:12:05] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>50=false, maxId=28819>28816=true, shouldScroll=true [09:12:05] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:12:05] [AUTH] UI update complete [09:12:05] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:12:05] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:12:05] [FAKE MODE] Enriched 0/0 unsettled messages with readBy data [09:12:05] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:12:05] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:05] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:12:05] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:12:05] [SCROLL] 💓 alive, visible=42...51, rows=52, estHeight=0.0, heightCalls=187 [09:12:05] [USER] ✅ User registered successfully [09:12:05] [PUSH] User registration after token update: success [09:12:05] [CLIENT_SIG] Event received: type=3 messageId=28817 [09:12:05] [WS_EVENT] Received event: type=3, messageId=28817 [09:12:05] [WS_EVENT] Read receipt for message 28817 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:05] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:12:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28819, 28818, 28817, 28816, 28815] [09:12:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:12:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:05] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:12:05] [SCROLL] wasNearBottom=true, threshold=758, offset=3973, contentH=4731, boundsH=758, forceScroll=true [09:12:05] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:12:05] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:12:05] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3973, currentOffset=3973 [09:12:05] [SCROLL] Scrolling to 3973, animated=false [09:12:05] [PUSH] Silent push received [09:12:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:05 +0000, appState=0, message_id=nil, type=nil [09:12:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:05 +0000 [09:12:05] [PUSH_EMBED] No embedded message_data in notification [09:12:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:12:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [09:12:05] [PUSH] No embedded data, pre-loading messages from server [09:12:05] [PUSH_PRELOAD] Fetching messages for instant display cache [09:12:05] [CLIENT_SIG] Event received: type=3 messageId=28818 [09:12:05] [WS_EVENT] Received event: type=3, messageId=28818 [09:12:05] [WS_EVENT] Read receipt for message 28818 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:12:06] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:06] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:06] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:12:06] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:12:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:12:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:06] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [09:12:06] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:12:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:12:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6048 vccs=0 [09:12:06] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28819 [09:12:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28818, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [09:12:06] [PUSH] Parsed message_id: 28818 [09:12:06] [PUSH] Parsed operation_type: 3 [09:12:06] [PUSH] Taking direct action: opType=3, messageId=28818 [09:12:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28818 [09:12:06] [GAP_FIX] Post-action sync: using background max 28816 to catch coalesced messages [09:12:06] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:12:06] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28819 [09:12:06] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:12:06] [INCREMENTAL_SYNC] ✅ Found 3 new messages [09:12:06] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 3 new messages, IDs=[28819, 28818, 28817] [09:12:06] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:06] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:06] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:06] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 50, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:06] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=3 [09:12:06] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:12:06] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:12:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28819, 28818, 28817, 28816, 28815] [09:12:06] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:12:06] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:06] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:12:06] [SCROLL] wasNearBottom=true, threshold=758, offset=3973, contentH=4731, boundsH=758, forceScroll=false [09:12:06] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:12:06] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:12:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:07] HELLO → sent (cached token, role=query) [09:12:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:07] [WS] Query connection failed - cleaning up all agent connections and views [09:12:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:07] [CLEANUP] ======================================== [09:12:07] [CLEANUP] Cleaning up all agent connections and views [09:12:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:07] [CLEANUP] Stopped and removed 0 video connections [09:12:07] [CLEANUP] Removed 0 video views [09:12:07] [CLEANUP] Removed 0 feed scroll views [09:12:07] [CLEANUP] Removed 0 status labels [09:12:07] [CLEANUP] Reset agent query state [09:12:07] [CLEANUP] Updated page indicator [09:12:07] [CLEANUP] Rebuilt video layout [09:12:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:07] [CLEANUP] ======================================== [09:12:07] [SERVER] Starting reconnect polling (5s interval) [09:12:07] [CLEANUP] ======================================== [09:12:07] [CLEANUP] Cleaning up all agent connections and views [09:12:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:07] [CLEANUP] Stopped and removed 0 video connections [09:12:07] [CLEANUP] Removed 0 video views [09:12:07] [CLEANUP] Removed 0 feed scroll views [09:12:07] [CLEANUP] Removed 0 status labels [09:12:07] [CLEANUP] Reset agent query state [09:12:07] [CLEANUP] Updated page indicator [09:12:07] [CLEANUP] Rebuilt video layout [09:12:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:07] [CLEANUP] ======================================== [09:12:07] [SERVER] Starting reconnect polling (5s interval) [09:12:08] [MENU] dismissAnyExistingMenu called [09:12:08] [MENU] dismissAnyExistingMenu completed [09:12:08] [SCROLL_BEGIN_DRAG] messagesTable offsetY=3973, insetTop=0, topDistance=3973, rows=52, prefetchedCount=0 [09:12:08] [SCROLL] 💓 alive, visible=42...51, rows=52, estHeight=0.0, heightCalls=1 [09:12:08] [SCROLL_WILL_END] velocity=(0.000, 1.133), currentY=3975, targetY=3973, movingTowardTop=true, decelNow=false, dragging=false [09:12:08] [SCROLL_WILL_END] captured upward momentum velocityY=1.1332885380371427 [09:12:08] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=3975, topInset=0, pendingVelocityY=1.1332885380371427, targetNearTop=3975 [09:12:08] [SCROLL_END_DECEL] messagesTable offsetY=3973, insetTop=0, pendingVelocityY=1.1332885380371427 [09:12:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:08] HELLO → sent (cached token, role=query) [09:12:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:08] [WS] Query connection failed - cleaning up all agent connections and views [09:12:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:08] [CLEANUP] ======================================== [09:12:08] [CLEANUP] Cleaning up all agent connections and views [09:12:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:08] [CLEANUP] Stopped and removed 0 video connections [09:12:08] [CLEANUP] Removed 0 video views [09:12:08] [CLEANUP] Removed 0 feed scroll views [09:12:08] [CLEANUP] Removed 0 status labels [09:12:08] [CLEANUP] Reset agent query state [09:12:08] [CLEANUP] Updated page indicator [09:12:08] [CLEANUP] Rebuilt video layout [09:12:08] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:08] [CLEANUP] ======================================== [09:12:08] [SERVER] Starting reconnect polling (5s interval) [09:12:08] [CLEANUP] ======================================== [09:12:08] [CLEANUP] Cleaning up all agent connections and views [09:12:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:08] [CLEANUP] Stopped and removed 0 video connections [09:12:08] [CLEANUP] Removed 0 video views [09:12:08] [CLEANUP] Removed 0 feed scroll views [09:12:08] [CLEANUP] Removed 0 status labels [09:12:08] [CLEANUP] Reset agent query state [09:12:08] [CLEANUP] Updated page indicator [09:12:08] [CLEANUP] Rebuilt video layout [09:12:08] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:08] [CLEANUP] ======================================== [09:12:08] [SERVER] Starting reconnect polling (5s interval) [09:12:10] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:10] HELLO → sent (cached token, role=query) [09:12:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:10] [WS] Query connection failed - cleaning up all agent connections and views [09:12:10] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:10] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:10] [CLEANUP] ======================================== [09:12:10] [CLEANUP] Cleaning up all agent connections and views [09:12:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:10] [CLEANUP] Stopped and removed 0 video connections [09:12:10] [CLEANUP] Removed 0 video views [09:12:10] [CLEANUP] Removed 0 feed scroll views [09:12:10] [CLEANUP] Removed 0 status labels [09:12:10] [CLEANUP] Reset agent query state [09:12:10] [CLEANUP] Updated page indicator [09:12:10] [CLEANUP] Rebuilt video layout [09:12:10] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:10] [CLEANUP] ======================================== [09:12:10] [SERVER] Starting reconnect polling (5s interval) [09:12:10] [CLEANUP] ======================================== [09:12:10] [CLEANUP] Cleaning up all agent connections and views [09:12:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:10] [CLEANUP] Stopped and removed 0 video connections [09:12:10] [CLEANUP] Removed 0 video views [09:12:10] [CLEANUP] Removed 0 feed scroll views [09:12:10] [CLEANUP] Removed 0 status labels [09:12:10] [CLEANUP] Reset agent query state [09:12:10] [CLEANUP] Updated page indicator [09:12:10] [CLEANUP] Rebuilt video layout [09:12:10] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:10] [CLEANUP] ======================================== [09:12:10] [SERVER] Starting reconnect polling (5s interval) [09:12:10] [MENU] dismissAnyExistingMenu called [09:12:10] [MENU] dismissAnyExistingMenu completed [09:12:10] [EMOJI_PICKER] Starting emoji picker for message 28817 [09:12:10] [MENU] Created button 'Reply' at index 0 [09:12:10] [MENU] Created button 'Copy' at index 1 [09:12:10] [MENU] Created button 'Delete' at index 2 [09:12:10] [MENU] Menu added at y=516.0 [09:12:11] [EMOJI_PICKER] ✅ Fetched 6 recent emojis [09:12:11] [EMOJI_PICKER] ✅ Creating picker with 6 recent emojis [09:12:11] [EMOJI_PICKER] ✅ Picker shown at y=360.0 [09:12:11] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:12:11] [CLIENT_SIG] Event received: type=0 messageId=28820 [09:12:11] [WS_EVENT] Received event: type=0, messageId=28820 [09:12:11] [WS_EVENT] 📨 New message notification (msgId=28820) - triggering incremental refresh, currentMsgCount=50 [09:12:11] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:12:11] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28819, maxMemoryId=28819 [09:12:11] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28819 [09:12:11] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:12:11] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28820] [09:12:11] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:11] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28820 [09:12:11] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 51, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:11] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:12:11] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:11] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [09:12:11] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:12:11] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28820, 28819, 28818, 28817, 28816] [09:12:11] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:12:11] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:11] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:12:11] [SCROLL] wasNearBottom=true, threshold=758, offset=3973, contentH=4731, boundsH=758, forceScroll=false [09:12:11] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:12:11] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28819 → 28820 [09:12:11] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [09:12:11] [SCROLL] 💓 alive, visible=42...52, rows=53, estHeight=0.0, heightCalls=118 [09:12:11] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4025, currentOffset=4025 [09:12:11] [SCROLL] Scrolling to 4025, animated=true [09:12:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:12] HELLO → sent (cached token, role=query) [09:12:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:12] [WS] Query connection failed - cleaning up all agent connections and views [09:12:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:12] [CLEANUP] ======================================== [09:12:12] [CLEANUP] Cleaning up all agent connections and views [09:12:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:12] [CLEANUP] Stopped and removed 0 video connections [09:12:12] [CLEANUP] Removed 0 video views [09:12:12] [CLEANUP] Removed 0 feed scroll views [09:12:12] [CLEANUP] Removed 0 status labels [09:12:12] [CLEANUP] Reset agent query state [09:12:12] [CLEANUP] Updated page indicator [09:12:12] [CLEANUP] Rebuilt video layout [09:12:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:12] [CLEANUP] ======================================== [09:12:12] [SERVER] Starting reconnect polling (5s interval) [09:12:12] [CLEANUP] ======================================== [09:12:12] [CLEANUP] Cleaning up all agent connections and views [09:12:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:12] [CLEANUP] Stopped and removed 0 video connections [09:12:12] [CLEANUP] Removed 0 video views [09:12:12] [CLEANUP] Removed 0 feed scroll views [09:12:12] [CLEANUP] Removed 0 status labels [09:12:12] [CLEANUP] Reset agent query state [09:12:12] [CLEANUP] Updated page indicator [09:12:12] [CLEANUP] Rebuilt video layout [09:12:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:12] [CLEANUP] ======================================== [09:12:12] [SERVER] Starting reconnect polling (5s interval) [09:12:12] [REACTION] add 👄 to message 28817 (alreadyReacted: false) [09:12:12] [MENU] dismissAnyExistingMenu called [09:12:12] [MENU] Found menu with tag 9999, removing [09:12:12] [MENU] Removing blur effect [09:12:12] [MENU] Removing floating message snapshot [09:12:12] [MENU] Dismissing emoji picker [09:12:12] [MENU] Recorded dismissal time for debounce [09:12:12] [MENU] dismissAnyExistingMenu completed [09:12:12] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [09:12:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6055 vccs=0 [09:12:12] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28820 [09:12:12] [PUSH] handlePollEventsNotification userInfo: [:] [09:12:12] [PUSH] No message_id in userInfo [09:12:12] [PUSH] No operation_type in userInfo [09:12:12] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:12:12] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:12] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [FAST_REFRESH] Already have 51 messages in memory [09:12:12] [FAST_REFRESH] maxMemoryId=28820, maxLocalId=28820 [09:12:12] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:12:12] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:12] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:12:12] [READBY_OPT] No message IDs to fetch - skipping server call [09:12:12] [GAP_FIX] Incremental sync will use since_id=28816 (background max=28816, current DB max=28820) [09:12:12] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:12:12] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28816, maxMemoryId=28820 [09:12:12] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28816 [09:12:12] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:12:12] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:12] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:12:12] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 07:12:12 +0000 - type: unknown, operation_type: 0, message_id: 28820, session_id: ILUIWU, state: 0 [09:12:12] [PUSH_DEBUG] Full userInfo: [AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-23 07:12:11, AnyHashable("message"): Are you home baby?, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28820, AnyHashable("sender_name"): Esra, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:12:11"; "file_name" = ""; "is_encrypted" = 0; message = "Are you home baby?"; "message_id" = 28820; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28819; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] [09:12:12] [PUSH] App active - suppressing notification UI, posting internal event [09:12:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:12 +0000 [09:12:12] [PUSH_TRACE] ⬇️ Processing embedded message_id=28820 [09:12:12] [PUSH_EMBED] 📩 Received embedded message: id=28820, type=0, sender=Esra [09:12:12] [PUSH_TRACE] ⬇️ Message details: text="Are you home baby?...", datesent=2026-04-23 07:12:11 [09:12:12] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:12:12] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_EMBED] ✅ Saved message 28820 to local DB (sync) [09:12:12] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28820 [09:12:12] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28820 [09:12:12] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811, 28810] [09:12:12] [PUSH_EMBED] Inserted message 28820 into existing cache (now 51 messages) [09:12:12] [PUSH_TRACE] 📦 ✅ Inserted message 28820, cache now has IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [PUSH_TRACE] 📦 EXITING cache update queue for message 28820 [09:12:12] [PUSH_EMBED] Fetching evolution data for message 28820 in background [09:12:12] [PUSH_EMBED] ✅ Fully processed message 28820 [09:12:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28820 [09:12:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6055 vccs=0 [09:12:12] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28820 [09:12:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-23 07:12:11, AnyHashable("message"): Are you home baby?, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28820, AnyHashable("sender_name"): Esra, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:12:11"; "file_name" = ""; "is_encrypted" = 0; message = "Are you home baby?"; "message_id" = 28820; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28819; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] [09:12:12] [PUSH_EMBED_VC] Message 28820 already in memory - skipping [09:12:12] [PUSH] ⚡ Embedded message handled directly in ViewController [09:12:12] [PUSH] Parsed message_id: 28820 [09:12:12] [PUSH] Parsed operation_type: 0 [09:12:12] [PUSH] Taking direct action: opType=0, messageId=28820 [09:12:12] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28820 [09:12:12] [PUSH] ⚡ Message 28820 already in memory - skipping duplicate notification entirely [09:12:12] [GAP_FIX] Post-action sync: using background max 28816 to catch coalesced messages [09:12:12] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:12:12] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:12:12] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:12:12] [PUSH_TRACE] 👁️ Received message id=28820, text="Are you home baby?..." [09:12:12] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:12:12] [PUSH_UI] Message 28820 already in memory - skipping insert [09:12:12] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:12:12] [PUSH] Silent push received [09:12:12] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:12 +0000, appState=0, message_id=28820, type=nil [09:12:12] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:12 +0000 [09:12:12] [PUSH_TRACE] ⬇️ Processing embedded message_id=28820 [09:12:12] [PUSH_EMBED] 📩 Received embedded message: id=28820, type=0, sender=Esra [09:12:12] [PUSH_TRACE] ⬇️ Message details: text="Are you home baby?...", datesent=2026-04-23 07:12:11 [09:12:12] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:12:12] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_EMBED] ✅ Saved message 28820 to local DB (sync) [09:12:12] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28820 [09:12:12] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28820 [09:12:12] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28820 [09:12:12] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [PUSH_TRACE] 📦 ⚠️ Message 28820 already in cache, skipping insert [09:12:12] [PUSH_TRACE] 📦 EXITING cache update queue for message 28820 [09:12:12] [PUSH_EMBED] Fetching evolution data for message 28820 in background [09:12:12] [PUSH_EMBED] ✅ Fully processed message 28820 [09:12:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28820 [09:12:12] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811], handled=true [09:12:12] [PUSH] Embedded message handled instantly from silent push [09:12:12] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:12:12] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28820 [09:12:12] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:12:12] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:12:12] [PUSH_TRACE] 👁️ Received message id=28820, text="Are you home baby?..." [09:12:12] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:12:12] [PUSH_UI] Message 28820 already in memory - skipping insert [09:12:12] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:12:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6055 vccs=0 [09:12:12] [GAP_FIX] maxMessageIdAtBackground=28816, currentMaxLocalId=28820 [09:12:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 0; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-23 07:12:11, AnyHashable("message"): Are you home baby?, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("sender_name"): Esra, AnyHashable("message_id"): 28820, AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:12:11"; "file_name" = ""; "is_encrypted" = 0; message = "Are you home baby?"; "message_id" = 28820; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28819; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] [09:12:12] [PUSH_EMBED_VC] Message 28820 already in memory - skipping [09:12:12] [PUSH] ⚡ Embedded message handled directly in ViewController [09:12:12] [PUSH] Parsed message_id: 28820 [09:12:12] [PUSH] Parsed operation_type: 0 [09:12:12] [PUSH] Taking direct action: opType=0, messageId=28820 [09:12:12] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28820 [09:12:12] [PUSH] ⚡ Message 28820 already in memory - skipping duplicate notification entirely [09:12:12] [GAP_FIX] Post-action sync: using background max 28816 to catch coalesced messages [09:12:12] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:12:12] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:12:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28820, 28819, 28818, 28817, 28816] [09:12:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:12:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:12] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:12:12] [SCROLL] wasNearBottom=true, threshold=758, offset=4025, contentH=4783, boundsH=758, forceScroll=true [09:12:12] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:12:12] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [09:12:12] [LIFECYCLE] App resigning active - cleared crash flag [09:12:12] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4025, currentOffset=4025 [09:12:12] [SCROLL] Scrolling to 4025, animated=false [09:12:13] [PUSH] Silent push received [09:12:13] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:12:13 +0000, appState=1, message_id=nil, type=nil [09:12:13] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:12:13 +0000 [09:12:13] [PUSH_EMBED] No embedded message_data in notification [09:12:13] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:12:13] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811], handled=false [09:12:13] [PUSH] No embedded data, pre-loading messages from server [09:12:13] [PUSH_PRELOAD] Fetching messages for instant display cache [09:12:13] [REACTION] Added 👄 reaction to message 28817 [09:12:13] [REACTION_SCROLL] =====ENTER path=picker action=add msgId=28817 emoji=👄 [09:12:13] [REACTION_SCROLL] state offsetY=4025 bounds=758 adjTop=0 adjBot=0 contentH=4783 estH=0 [09:12:13] [REACTION_SCROLL] rows oldCount=53 newCount=53 reactedRow=49 reactedVisible=true [09:12:13] [REACTION_SCROLL] reacted rectMinY=4475 rectH=96 cellFrameMinY=4475 cellFrameH=96 [09:12:13] [REACTION_SCROLL] anchor row=42 minY=3951 VPY=-74 visibleCount=11 visibleRows=[42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52] [09:12:13] [REACTION_SCROLL] scrollState dragging=false decel=false tracking=false [09:12:13] [REACTION_SCROLL] after reloadRows offsetΔ=0 contentHΔ=20 [09:12:13] [REACTION_SCROLL] after layoutIfNeeded offsetΔFromSave=0 contentHDelta=20 [09:12:13] [REACTION_SCROLL] reactedAfter rectMinY=4475 rectH=116 rectMinYΔ=0 rectHΔ=20 [09:12:13] [REACTION_SCROLL] reactedCellFrameAfter minY=4475 h=116 [09:12:13] [REACTION_SCROLL] anchor rectMinYAfter=3951 drift=0 [09:12:13] [REACTION_SCROLL] math rawTarget=4025 maxOffsetY=4045 clamped=4025 clampedAgainstRaw=0 [09:12:13] [REACTION_SCROLL] no offset change (within 0.5pt, current=4025) [09:12:13] [REACTION_SCROLL] finalOffset=4025 totalΔFromSave=0 [09:12:13] [PUSH_EMBED] Got evolution data for message 28820, saving to local DB [09:12:13] [PUSH_EMBED] Saved evolution data for message 28820 [09:12:13] [PUSH_EMBED] Got evolution data for message 28820, saving to local DB [09:12:13] [PUSH_EMBED] Saved evolution data for message 28820 [09:12:13] [INCREMENTAL_SYNC] ✅ Found 4 new messages [09:12:13] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 4 new messages, IDs=[28820, 28819, 28818, 28817] [09:12:13] [REPLY_LOAD] ViewController+Database mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:13] [REPLY_LOAD] ViewController+Database mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:13] [PARSE_REACTIONS] Message 28817 has 1 reactions: ["👄"] [09:12:13] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=4 [09:12:13] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:12:13] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:12:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:12:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28820 [09:12:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:12:13] [FAST_REFRESH] Incremental sync complete - 51 messages [09:12:13] [CLIENT_SIG] Event received: type=3 messageId=28820 [09:12:13] [WS_EVENT] Received event: type=3, messageId=28820 [09:12:13] [WS_EVENT] Read receipt for message 28820 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:12:13] [INCREMENTAL_SYNC] ✅ No new messages [09:12:13] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [09:12:13] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:12:13] [SECURITY] Saved background timestamp [09:12:13] [LIFECYCLE] App entering background - cleared crash flag [09:12:13] [CLIENT_SIG] Disconnecting [09:12:13] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:12:13] [DB] ✅ Chat database flushed (WAL checkpoint) before background [09:12:13] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [LIFECYCLE] Background snapshot: count=51, maxId=28820 [09:12:13] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [09:12:13] [WS] Canceling WebSocket for query connection to iosILUIWU [09:12:13] In cleanupPeer [09:12:13] In cleanupPeer [09:12:13] [LIFECYCLE] WebRTC audio disabled [09:12:13] [LIFECYCLE] AVAudioSession deactivated [09:12:13] [LIFECYCLE] All connections stopped [09:12:13] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:12:13] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:12:13] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:12:13] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:12:13] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:12:13] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:12:13] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28729] [09:12:13] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28729] [09:12:13] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:12:13] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:12:13] [CLIENT_SIG] WebSocket closed with code 1001 [09:12:13] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:12:13] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:12:13] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:12:13] [SERVER] Stopped reconnect polling [09:12:13] [WS] URLSession invalidated successfully [09:12:13] Will request stop of video 0 [09:12:13] Will request stop of video 0 [09:12:13] [REACTION_SCROLL] =====EXIT [09:12:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:12:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:12:13] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=6056 vccs=0 [09:12:13] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28820 [09:12:13] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28820, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3] [09:12:13] [PUSH] Parsed message_id: 28820 [09:12:13] [PUSH] Parsed operation_type: 3 [09:12:13] [PUSH] Taking direct action: opType=3, messageId=28820 [09:12:13] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28820 [09:12:13] [GAP_FIX] Post-action sync: using background max 28820 to catch coalesced messages [09:12:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:12:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28820 [09:12:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:12:13] [PIP] Removing 0 tracks from PiP for connection 0 [09:12:13] [PIP] ✅ All tracks removed for connection 0 [09:12:13] [PIP] Removing 0 tracks from PiP for connection 0 [09:12:13] [PIP] ✅ All tracks removed for connection 0 [09:12:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=118 [09:12:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28820, 28819, 28818, 28817, 28816] [09:12:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:12:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:12:13] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:12:13] [SCROLL] wasNearBottom=true, threshold=758, offset=4025, contentH=4803, boundsH=758, forceScroll=false [09:12:13] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:12:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [09:12:13] [INCREMENTAL_SYNC] ✅ No new messages [09:12:13] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4045, currentOffset=4025 [09:12:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:12:13] HELLO → sent (cached token, role=query) [09:12:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:12:14] [WS] Query connection failed - cleaning up all agent connections and views [09:12:14] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:12:14] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:12:14] [CLEANUP] ======================================== [09:12:14] [CLEANUP] Cleaning up all agent connections and views [09:12:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:14] [CLEANUP] Stopped and removed 0 video connections [09:12:14] [CLEANUP] Removed 0 video views [09:12:14] [CLEANUP] Removed 0 feed scroll views [09:12:14] [CLEANUP] Removed 0 status labels [09:12:14] [CLEANUP] Reset agent query state [09:12:14] [CLEANUP] Updated page indicator [09:12:14] [CLEANUP] Rebuilt video layout [09:12:14] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:14] [CLEANUP] ======================================== [09:12:14] [SERVER] Skipping reconnect polling - app is in background [09:12:14] [CLEANUP] ======================================== [09:12:14] [CLEANUP] Cleaning up all agent connections and views [09:12:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:12:14] [CLEANUP] Stopped and removed 0 video connections [09:12:14] [CLEANUP] Removed 0 video views [09:12:14] [CLEANUP] Removed 0 feed scroll views [09:12:14] [CLEANUP] Removed 0 status labels [09:12:14] [CLEANUP] Reset agent query state [09:12:14] [CLEANUP] Updated page indicator [09:12:14] [CLEANUP] Rebuilt video layout [09:12:14] [CLEANUP] ✅ All agent connections and views cleaned up [09:12:14] [CLEANUP] ======================================== [09:12:14] [SERVER] Skipping reconnect polling - app is in background [09:16:06] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [09:16:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:16:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6289 vccs=0 [09:16:06] [NETWORK] Status changed: connected [09:16:06] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:16:06] [PUSH] handlePollEventsNotification userInfo: [:] [09:16:06] [PUSH] No message_id in userInfo [09:16:06] [PUSH] No operation_type in userInfo [09:16:06] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:16:06] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:16:06] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:16:06] [FAST_REFRESH] Already have 51 messages in memory [09:16:06] [FAST_REFRESH] maxMemoryId=28820, maxLocalId=28821 [09:16:06] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28820) [09:16:06] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 52 total) [09:16:06] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:16:06] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:06] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:16:06] [READBY_OPT] No message IDs to fetch - skipping server call [09:16:06] [GAP_FIX] Incremental sync will use since_id=28820 (background max=28820, current DB max=28821) [09:16:06] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:16:06] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28821 [09:16:06] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:16:06] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:16:06] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:16:06] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:16:06] [PUSH] Silent push received [09:16:06] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:16:06 +0000, appState=2, message_id=28821, type=nil [09:16:06] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:16:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:16:06 +0000 [09:16:06] [PUSH_TRACE] ⬇️ Processing embedded message_id=28821 [09:16:06] [PUSH_EMBED] 📩 Received embedded message: id=28821, type=1, sender=Esra [09:16:06] [PUSH_TRACE] ⬇️ Message details: text="...", datesent=2026-04-23 07:16:04 [09:16:06] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:16:06] [PUSH_EMBED] Media message detected - deferring until media available: 2c2436d604281163.jpg [09:16:06] [PUSH_EMBED_MEDIA] Checking media availability (attempt 1/5): 2c2436d604281163.jpg [09:16:06] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811], handled=false [09:16:06] [PUSH] No embedded data, pre-loading messages from server [09:16:06] [PUSH_PRELOAD] Fetching messages for instant display cache [09:16:06] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:16:06] [PUSH] Silent push received [09:16:06] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:16:06 +0000, appState=2, message_id=nil, type=nil [09:16:06] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811] [09:16:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:16:06 +0000 [09:16:06] [PUSH_EMBED] No embedded message_data in notification [09:16:06] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:16:06] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812, 28811], handled=false [09:16:06] [PUSH] No embedded data, pre-loading messages from server [09:16:06] [PUSH_PRELOAD] Fetching messages for instant display cache [09:16:06] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:06] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:16:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:16:07] HELLO → sent (cached token, role=query) [09:16:07] [CLIENT_SIG] WebSocket opened [09:16:07] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:16:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:16:07] [WS] Query connection failed - cleaning up all agent connections and views [09:16:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:16:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:16:07] [CLEANUP] ======================================== [09:16:07] [CLEANUP] Cleaning up all agent connections and views [09:16:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:16:07] [CLEANUP] Stopped and removed 0 video connections [09:16:07] [CLEANUP] Removed 0 video views [09:16:07] [CLEANUP] Removed 0 feed scroll views [09:16:07] [CLEANUP] Removed 0 status labels [09:16:07] [CLEANUP] Reset agent query state [09:16:07] [CLEANUP] Updated page indicator [09:16:07] [CLEANUP] Rebuilt video layout [09:16:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:16:07] [CLEANUP] ======================================== [09:16:07] [SERVER] Skipping reconnect polling - app is in background [09:16:07] [CLEANUP] ======================================== [09:16:07] [CLEANUP] Cleaning up all agent connections and views [09:16:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:16:07] [CLEANUP] Stopped and removed 0 video connections [09:16:07] [CLEANUP] Removed 0 video views [09:16:07] [CLEANUP] Removed 0 feed scroll views [09:16:07] [CLEANUP] Removed 0 status labels [09:16:07] [CLEANUP] Reset agent query state [09:16:07] [CLEANUP] Updated page indicator [09:16:07] [CLEANUP] Rebuilt video layout [09:16:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:16:07] [CLEANUP] ======================================== [09:16:07] [SERVER] Skipping reconnect polling - app is in background [09:16:07] [CLIENT_SIG] Connected! clientId=zmjyYiXucqy_EVv7 [09:16:07] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [09:16:07] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=0 rawType=Optional raw=Optional(0) [09:16:07] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:16:07] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:16:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:16:07] [FAST_REFRESH] Incremental sync complete - 52 messages [09:16:07] [PUSH_EMBED_MEDIA] ✅ Media available on server: 2c2436d604281163.jpg [09:16:07] [PUSH_EMBED_MEDIA] Processing verified media message: 28821 [09:16:07] [PUSH_EMBED_MEDIA] Saved message 28821 to local DB [09:16:07] [PUSH_EMBED_MEDIA] Inserted message into existing cache [09:16:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6289 vccs=0 [09:16:07] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:16:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_data"): ["sender_id": "EDAD55A1-003F-415D-AA60-672B34B504FE", "message": "", "message_type": 1, "sender_name": "Esra", "datesent": "2026-04-23 07:16:04", "file_name": Optional("2c2436d604281163.jpg"), "message_id": 28821, "timer": 0]] [09:16:07] [PUSH_EMBED_VC] Message 28821 already in memory - skipping [09:16:07] [PUSH] ⚡ Embedded message handled directly in ViewController [09:16:07] [PUSH] No message_id in userInfo [09:16:07] [PUSH] No operation_type in userInfo [09:16:07] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:16:07] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=52, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 📬 POLL: memory state: count=52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [FAST_REFRESH] Already have 52 messages in memory [09:16:07] [FAST_REFRESH] maxMemoryId=28821, maxLocalId=28821 [09:16:07] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:16:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:16:07] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:16:07] [READBY_OPT] No message IDs to fetch - skipping server call [09:16:07] [GAP_FIX] Incremental sync will use since_id=28820 (background max=28820, current DB max=28821) [09:16:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28821 [09:16:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:16:07] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:16:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:16:07] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [09:16:07] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=0 rawType=Optional raw=Optional(0) [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:16:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:16:07] [FAST_REFRESH] Incremental sync complete - 52 messages [09:16:07] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:16:07] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:16:07] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:16:07] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:16:07] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28730, 28729] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28730, 28729] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:16:07] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [09:16:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:16:07] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:16:07] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:16:07] [SCROLL] wasNearBottom=true, threshold=758, offset=4025, contentH=4803, boundsH=758, forceScroll=false [09:16:07] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:16:07] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:16:07] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [09:16:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6290 vccs=0 [09:16:07] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:16:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28821, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("session_id"): ILUIWU] [09:16:07] [PUSH] Parsed message_id: 28821 [09:16:07] [PUSH] Parsed operation_type: 0 [09:16:07] [PUSH] Taking direct action: opType=0, messageId=28821 [09:16:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28821 [09:16:07] [PUSH] ⚡ Message 28821 already in memory - skipping duplicate notification entirely [09:16:07] [GAP_FIX] Post-action sync: using background max 28820 to catch coalesced messages [09:16:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28821 [09:16:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:16:07] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4120, currentOffset=4025 [09:16:07] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:16:07] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:16:07] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:16:07] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:16:07] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28730, 28729] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28730, 28729] [09:16:07] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:16:07] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:16:07] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [09:16:07] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=0 rawType=Optional raw=Optional(0) [09:16:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=1 secsSinceLastPong=6290 vccs=0 [09:16:07] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:16:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message"): , AnyHashable("file_name"): 2c2436d604281163.jpg, AnyHashable("datesent"): 2026-04-23 07:16:04, AnyHashable("sender_name"): Esra, AnyHashable("message_type"): 1, AnyHashable("timer"): 0, AnyHashable("message_data"): { "crypto_version" = 1; datesent = "2026-04-23 07:16:04"; "file_name" = "2c2436d604281163.jpg"; "is_encrypted" = 1; message = ""; "message_id" = 28821; "message_type" = 1; "mime_type" = "image/jpeg"; "plaintext_size" = 625641; "prev_session_message_id" = 28820; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = "t_2c2436d604281163.jpg"; timer = 0; "upload_status" = 1; }, AnyHashable("message_id"): 28821, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("thumb_file_name"): t_2c2436d604281163.jpg, AnyHashable("operation_type"): 0] [09:16:07] [PUSH_EMBED_VC] Message 28821 already in memory - skipping [09:16:07] [PUSH] ⚡ Embedded message handled directly in ViewController [09:16:07] [PUSH] Parsed message_id: 28821 [09:16:07] [PUSH] Parsed operation_type: 0 [09:16:07] [PUSH] Taking direct action: opType=0, messageId=28821 [09:16:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28821 [09:16:07] [PUSH] ⚡ Message 28821 already in memory - skipping duplicate notification entirely [09:16:07] [GAP_FIX] Post-action sync: using background max 28820 to catch coalesced messages [09:16:07] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:16:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:16:07] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:16:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:16:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28821, maxMemoryId=28821 [09:16:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28821 [09:16:07] [INCREMENTAL_SYNC] ✅ No new messages [09:16:07] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=65 [09:16:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:16:07] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:16:07] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:16:07] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:16:08] [SCROLL] wasNearBottom=true, threshold=758, offset=4025, contentH=4878, boundsH=758, forceScroll=false [09:16:08] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:16:08] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:23:01] [SECURITY] Timeout check: elapsed=648.3127279281616s, timeout=300.0s [09:23:01] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [09:23:01] [AUTH] ✅ All guards passed, showing privacy cover [09:23:01] [NETWORK] Status changed: connected [09:23:01] [LIFECYCLE] App entering foreground - restoring connections [09:23:01] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [09:23:01] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:23:01] [PUSH_TRACE] 🔄 FOREGROUND: memory has 52 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:01] [PUSH_TRACE] 🔄 FOREGROUND: cache has 52 msgs, valid=true, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:01] [LIFECYCLE] Away > 2 minutes (648s) - will scroll to bottom [09:23:01] [UPLOAD_RETRY] No pending uploads to retry [09:23:01] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:01] [READBY_OPT] No message IDs to fetch - skipping server call [09:23:01] [LIFECYCLE] WebRTC audio re-enabled [09:23:01] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:23:01] [CLIENT_SIG] Skipping connect - app in background (state=2) [09:23:01] [VIEWER] Reconnecting after background - querying agents [09:23:01] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:23:01] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:23:01] [UNSENT_RETRY] Checking for unsent messages... [09:23:01] [PENDING_UPLOAD] Total pending upload messages: 0 [09:23:01] [UNSENT_RETRY] No unsent messages found [09:23:01] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:01] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:01] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [09:23:01] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:23:01] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <62940768-E8B6-46F0-ABA4-17619A8B9EC0>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <62940768-E8B6-46F0-ABA4-17619A8B9EC0>.<1>} [09:23:01] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:23:01] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [09:23:01] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=52>51=true, maxId=28821>28820=true, shouldScroll=true [09:23:01] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:01] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:23:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:23:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:23:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:23:02] [SCROLL] wasNearBottom=true, threshold=758, offset=4025, contentH=4878, boundsH=758, forceScroll=true [09:23:02] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:23:02] [SCROLL] 💓 alive, visible=43...53, rows=54, estHeight=0.0, heightCalls=0 [09:23:02] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28820 → 28821 [09:23:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [09:23:02] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:23:02] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:23:02] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=6704 vccs=0 [09:23:02] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:23:02] [PUSH] handlePollEventsNotification userInfo: [:] [09:23:02] [PUSH] No message_id in userInfo [09:23:02] [PUSH] No operation_type in userInfo [09:23:02] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:23:02] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=52, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [PUSH_TRACE] 📬 POLL: memory state: count=52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [FAST_REFRESH] Already have 52 messages in memory [09:23:02] [FAST_REFRESH] maxMemoryId=28821, maxLocalId=28821 [09:23:02] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:23:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:02] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:23:02] [READBY_OPT] No message IDs to fetch - skipping server call [09:23:02] [GAP_FIX] Incremental sync will use since_id=28820 (background max=28820, current DB max=28821) [09:23:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:23:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28821 [09:23:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:23:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4120, currentOffset=4120 [09:23:02] [SCROLL] Scrolling to 4120, animated=false [09:23:02] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [09:23:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:02] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:23:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=65 [09:23:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:23:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:23:02] [SCROLL] wasNearBottom=true, threshold=758, offset=4120, contentH=4878, boundsH=758, forceScroll=true [09:23:02] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:23:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [09:23:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4120, currentOffset=4120 [09:23:02] [SCROLL] Scrolling to 4120, animated=false [09:23:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:02] HELLO → sent (cached token, role=query) [09:23:02] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:02] [WS] Query connection failed - cleaning up all agent connections and views [09:23:02] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:02] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:02] [CLEANUP] ======================================== [09:23:02] [CLEANUP] Cleaning up all agent connections and views [09:23:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:02] [CLEANUP] Stopped and removed 0 video connections [09:23:02] [CLEANUP] Removed 0 video views [09:23:02] [CLEANUP] Removed 0 feed scroll views [09:23:02] [CLEANUP] Removed 0 status labels [09:23:02] [CLEANUP] Reset agent query state [09:23:02] [CLEANUP] Updated page indicator [09:23:02] [CLEANUP] Rebuilt video layout [09:23:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:02] [CLEANUP] ======================================== [09:23:02] [SERVER] Starting reconnect polling (5s interval) [09:23:02] [CLEANUP] ======================================== [09:23:02] [CLEANUP] Cleaning up all agent connections and views [09:23:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:02] [CLEANUP] Stopped and removed 0 video connections [09:23:02] [CLEANUP] Removed 0 video views [09:23:02] [CLEANUP] Removed 0 feed scroll views [09:23:02] [CLEANUP] Removed 0 status labels [09:23:02] [CLEANUP] Reset agent query state [09:23:02] [CLEANUP] Updated page indicator [09:23:02] [CLEANUP] Rebuilt video layout [09:23:02] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:02] [CLEANUP] ======================================== [09:23:02] [SERVER] Starting reconnect polling (5s interval) [09:23:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:23:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [09:23:02] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=0 rawType=Optional raw=Optional(0) [09:23:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:23:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:02] [FAST_REFRESH] Incremental sync complete - 52 messages [09:23:02] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=65 [09:23:02] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:02] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:23:02] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:02] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:23:02] [SCROLL] wasNearBottom=true, threshold=758, offset=4120, contentH=4878, boundsH=758, forceScroll=true [09:23:02] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:23:02] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [09:23:02] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4120, currentOffset=4120 [09:23:02] [SCROLL] Scrolling to 4120, animated=false [09:23:03] [PIN_AUTH] Correct PIN [09:23:03] [SECURITY] Restored real session: ILUIWU [09:23:03] [SECURITY] Restored real session: ILUIWU [09:23:03] [FAKE_AI] cancel() called, wasRunning=false [09:23:03] [FAKE MODE] Exiting fake mode, restoring real session [09:23:03] [SECURITY] Restored real session: ILUIWU [09:23:03] [SECURITY] Saved real session: ILUIWU [09:23:03] [FAKE MODE] ✅ Restored real session: ILUIWU [09:23:03] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:23:03] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:23:03] [FAKE MODE] Loaded 50 messages (limited to page size) [09:23:03] [READBY_OPT] No message IDs to fetch - skipping server call [09:23:03] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [09:23:03] [AUTH] Cache had 52 messages, maxExistingId=28821, inserted 0 truly new [09:23:03] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>51=false, maxId=28821>28820=true, shouldScroll=true [09:23:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:23:03] [AUTH] UI update complete [09:23:03] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:23:03] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:23:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:23:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:23:03] [FAKE MODE] Enriched 0/0 unsettled messages with readBy data [09:23:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:23:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:23:03] [PUSH] Silent push received [09:23:03] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:23:03 +0000, appState=0, message_id=nil, type=nil [09:23:03] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:23:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:23:03 +0000 [09:23:03] [PUSH_EMBED] No embedded message_data in notification [09:23:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:23:03] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [09:23:03] [PUSH] No embedded data, pre-loading messages from server [09:23:03] [PUSH_PRELOAD] Fetching messages for instant display cache [09:23:03] [PUSH] Silent push received [09:23:03] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:23:03 +0000, appState=0, message_id=nil, type=nil [09:23:03] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:23:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:23:03 +0000 [09:23:03] [PUSH_EMBED] No embedded message_data in notification [09:23:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:23:03] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [09:23:03] [PUSH] No embedded data, pre-loading messages from server [09:23:03] [PUSH_PRELOAD] Fetching messages for instant display cache [09:23:03] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:03] [SCROLL] 💓 alive, visible=44...51, rows=52, estHeight=0.0, heightCalls=125 [09:23:03] DOWNLOADIIING t_2c2436d604281163.jpg [09:23:03] [USER] ✅ User registered successfully [09:23:03] [PUSH] User registration after token update: success [09:23:03] [CLIENT_SIG] WebSocket opened [09:23:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:23:03] [CLIENT_SIG] Connected! clientId=N1v4KhaeigMgSnAr [09:23:03] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:23:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:23:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:23:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:23:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:03] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:23:03] [SCROLL] wasNearBottom=true, threshold=758, offset=4101, contentH=4859, boundsH=758, forceScroll=true [09:23:03] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:23:03] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [09:23:03] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4101, currentOffset=4101 [09:23:03] [SCROLL] Scrolling to 4101, animated=false [09:23:03] [MEDIA_DOWNLOAD] ✅ t_2c2436d604281163.jpg complete [09:23:03] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:03] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 2c2436d604281163.jpg from downloaded: t_2c2436d604281163.jpg [09:23:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:23:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=164 [09:23:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:23:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:03] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:23:03] [SCROLL] wasNearBottom=true, threshold=758, offset=4101, contentH=4939, boundsH=758, forceScroll=true [09:23:03] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:23:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [09:23:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4181, currentOffset=4181 [09:23:04] [SCROLL] Scrolling to 4181, animated=false [09:23:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:04] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:23:04] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:23:04] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:23:04] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:23:04] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:23:04] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [09:23:04] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:23:04] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:23:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=6706 vccs=0 [09:23:04] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:23:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28821, AnyHashable("aps"): { "content-available" = 1; }] [09:23:04] [PUSH] Parsed message_id: 28821 [09:23:04] [PUSH] Parsed operation_type: 3 [09:23:04] [PUSH] Taking direct action: opType=3, messageId=28821 [09:23:04] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28821 [09:23:04] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:23:04] [GAP_FIX] Post-action sync: using background max 28820 to catch coalesced messages [09:23:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:23:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28820, maxMemoryId=28821 [09:23:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28820 [09:23:04] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:23:04] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:23:04] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:23:04] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:23:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:04] HELLO → sent (cached token, role=query) [09:23:04] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=50, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=0, IDs=[] [09:23:04] [PUSH_TRACE] 🔀 mergeMessages: merged.count=50, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:23:04] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:23:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=6706 vccs=0 [09:23:04] [GAP_FIX] maxMessageIdAtBackground=28820, currentMaxLocalId=28821 [09:23:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28821, AnyHashable("aps"): { "content-available" = 1; }] [09:23:04] [PUSH] Parsed message_id: 28821 [09:23:04] [PUSH] Parsed operation_type: 3 [09:23:04] [PUSH] Taking direct action: opType=3, messageId=28821 [09:23:04] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28821 [09:23:04] [GAP_FIX] Post-action sync: using background max 28820 to catch coalesced messages [09:23:04] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:23:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:04] [WS] Query connection failed - cleaning up all agent connections and views [09:23:04] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:04] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:04] [CLEANUP] ======================================== [09:23:04] [CLEANUP] Cleaning up all agent connections and views [09:23:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:04] [CLEANUP] Stopped and removed 0 video connections [09:23:04] [CLEANUP] Removed 0 video views [09:23:04] [CLEANUP] Removed 0 feed scroll views [09:23:04] [CLEANUP] Removed 0 status labels [09:23:04] [CLEANUP] Reset agent query state [09:23:04] [CLEANUP] Updated page indicator [09:23:04] [CLEANUP] Rebuilt video layout [09:23:04] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:04] [CLEANUP] ======================================== [09:23:04] [SERVER] Starting reconnect polling (5s interval) [09:23:04] [CLEANUP] ======================================== [09:23:04] [CLEANUP] Cleaning up all agent connections and views [09:23:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:04] [CLEANUP] Stopped and removed 0 video connections [09:23:04] [CLEANUP] Removed 0 video views [09:23:04] [CLEANUP] Removed 0 feed scroll views [09:23:04] [CLEANUP] Removed 0 status labels [09:23:04] [CLEANUP] Reset agent query state [09:23:04] [CLEANUP] Updated page indicator [09:23:04] [CLEANUP] Rebuilt video layout [09:23:04] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:04] [CLEANUP] ======================================== [09:23:04] [SERVER] Starting reconnect polling (5s interval) [09:23:04] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:23:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28821] [09:23:04] [USTATUS] DB_INSERT msgId=28821 file=2c2436d604281163.jpg parsed=0 rawType=Optional raw=Optional(0) [09:23:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 50 msgs, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 50, first 10 IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:23:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:23:04] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:23:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=50 [09:23:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28821, maxMemoryId=28821 [09:23:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28821 [09:23:04] [CLIENT_SIG] Event received: type=3 messageId=28821 [09:23:04] [WS_EVENT] Received event: type=3, messageId=28821 [09:23:04] [WS_EVENT] Read receipt for message 28821 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:23:04] [INCREMENTAL_SYNC] ✅ No new messages [09:23:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [09:23:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28821, 28820, 28819, 28818, 28817] [09:23:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:23:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:23:04] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:23:04] [SCROLL] wasNearBottom=true, threshold=758, offset=4181, contentH=4939, boundsH=758, forceScroll=true [09:23:04] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:23:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [09:23:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4181, currentOffset=4181 [09:23:04] [SCROLL] Scrolling to 4181, animated=false [09:23:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:05] HELLO → sent (cached token, role=query) [09:23:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:05] [WS] Query connection failed - cleaning up all agent connections and views [09:23:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:05] [CLEANUP] ======================================== [09:23:05] [CLEANUP] Cleaning up all agent connections and views [09:23:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:05] [CLEANUP] Stopped and removed 0 video connections [09:23:05] [CLEANUP] Removed 0 video views [09:23:05] [CLEANUP] Removed 0 feed scroll views [09:23:05] [CLEANUP] Removed 0 status labels [09:23:05] [CLEANUP] Reset agent query state [09:23:05] [CLEANUP] Updated page indicator [09:23:05] [CLEANUP] Rebuilt video layout [09:23:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:05] [CLEANUP] ======================================== [09:23:05] [SERVER] Starting reconnect polling (5s interval) [09:23:05] [CLEANUP] ======================================== [09:23:05] [CLEANUP] Cleaning up all agent connections and views [09:23:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:05] [CLEANUP] Stopped and removed 0 video connections [09:23:05] [CLEANUP] Removed 0 video views [09:23:05] [CLEANUP] Removed 0 feed scroll views [09:23:05] [CLEANUP] Removed 0 status labels [09:23:05] [CLEANUP] Reset agent query state [09:23:05] [CLEANUP] Updated page indicator [09:23:05] [CLEANUP] Rebuilt video layout [09:23:05] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:05] [CLEANUP] ======================================== [09:23:05] [SERVER] Starting reconnect polling (5s interval) [09:23:06] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:23:06] [SCROLL] 💓 alive, visible=45...51, rows=52, estHeight=0.0, heightCalls=59 [09:23:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:07] HELLO → sent (cached token, role=query) [09:23:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:07] [WS] Query connection failed - cleaning up all agent connections and views [09:23:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:07] [CLEANUP] ======================================== [09:23:07] [CLEANUP] Cleaning up all agent connections and views [09:23:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:07] [CLEANUP] Stopped and removed 0 video connections [09:23:07] [CLEANUP] Removed 0 video views [09:23:07] [CLEANUP] Removed 0 feed scroll views [09:23:07] [CLEANUP] Removed 0 status labels [09:23:07] [CLEANUP] Reset agent query state [09:23:07] [CLEANUP] Updated page indicator [09:23:07] [CLEANUP] Rebuilt video layout [09:23:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:07] [CLEANUP] ======================================== [09:23:07] [SERVER] Starting reconnect polling (5s interval) [09:23:07] [CLEANUP] ======================================== [09:23:07] [CLEANUP] Cleaning up all agent connections and views [09:23:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:07] [CLEANUP] Stopped and removed 0 video connections [09:23:07] [CLEANUP] Removed 0 video views [09:23:07] [CLEANUP] Removed 0 feed scroll views [09:23:07] [CLEANUP] Removed 0 status labels [09:23:07] [CLEANUP] Reset agent query state [09:23:07] [CLEANUP] Updated page indicator [09:23:07] [CLEANUP] Rebuilt video layout [09:23:07] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:07] [CLEANUP] ======================================== [09:23:07] [SERVER] Starting reconnect polling (5s interval) [09:23:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:09] HELLO → sent (cached token, role=query) [09:23:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:09] [WS] Query connection failed - cleaning up all agent connections and views [09:23:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:09] [CLEANUP] ======================================== [09:23:09] [CLEANUP] Cleaning up all agent connections and views [09:23:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:09] [CLEANUP] Stopped and removed 0 video connections [09:23:09] [CLEANUP] Removed 0 video views [09:23:09] [CLEANUP] Removed 0 feed scroll views [09:23:09] [CLEANUP] Removed 0 status labels [09:23:09] [CLEANUP] Reset agent query state [09:23:09] [CLEANUP] Updated page indicator [09:23:09] [CLEANUP] Rebuilt video layout [09:23:09] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:09] [CLEANUP] ======================================== [09:23:09] [SERVER] Starting reconnect polling (5s interval) [09:23:09] [CLEANUP] ======================================== [09:23:09] [CLEANUP] Cleaning up all agent connections and views [09:23:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:09] [CLEANUP] Stopped and removed 0 video connections [09:23:09] [CLEANUP] Removed 0 video views [09:23:09] [CLEANUP] Removed 0 feed scroll views [09:23:09] [CLEANUP] Removed 0 status labels [09:23:09] [CLEANUP] Reset agent query state [09:23:09] [CLEANUP] Updated page indicator [09:23:09] [CLEANUP] Rebuilt video layout [09:23:09] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:09] [CLEANUP] ======================================== [09:23:09] [SERVER] Starting reconnect polling (5s interval) [09:23:10] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:10] HELLO → sent (cached token, role=query) [09:23:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:10] [WS] Query connection failed - cleaning up all agent connections and views [09:23:10] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:10] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:10] [CLEANUP] ======================================== [09:23:10] [CLEANUP] Cleaning up all agent connections and views [09:23:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:10] [CLEANUP] Stopped and removed 0 video connections [09:23:10] [CLEANUP] Removed 0 video views [09:23:10] [CLEANUP] Removed 0 feed scroll views [09:23:10] [CLEANUP] Removed 0 status labels [09:23:10] [CLEANUP] Reset agent query state [09:23:10] [CLEANUP] Updated page indicator [09:23:10] [CLEANUP] Rebuilt video layout [09:23:10] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:10] [CLEANUP] ======================================== [09:23:10] [SERVER] Starting reconnect polling (5s interval) [09:23:10] [CLEANUP] ======================================== [09:23:10] [CLEANUP] Cleaning up all agent connections and views [09:23:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:10] [CLEANUP] Stopped and removed 0 video connections [09:23:10] [CLEANUP] Removed 0 video views [09:23:10] [CLEANUP] Removed 0 feed scroll views [09:23:10] [CLEANUP] Removed 0 status labels [09:23:10] [CLEANUP] Reset agent query state [09:23:10] [CLEANUP] Updated page indicator [09:23:10] [CLEANUP] Rebuilt video layout [09:23:10] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:10] [CLEANUP] ======================================== [09:23:10] [SERVER] Starting reconnect polling (5s interval) [09:23:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:12] HELLO → sent (cached token, role=query) [09:23:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:12] [WS] Query connection failed - cleaning up all agent connections and views [09:23:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:12] [CLEANUP] ======================================== [09:23:12] [CLEANUP] Cleaning up all agent connections and views [09:23:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:12] [CLEANUP] Stopped and removed 0 video connections [09:23:12] [CLEANUP] Removed 0 video views [09:23:12] [CLEANUP] Removed 0 feed scroll views [09:23:12] [CLEANUP] Removed 0 status labels [09:23:12] [CLEANUP] Reset agent query state [09:23:12] [CLEANUP] Updated page indicator [09:23:12] [CLEANUP] Rebuilt video layout [09:23:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:12] [CLEANUP] ======================================== [09:23:12] [SERVER] Starting reconnect polling (5s interval) [09:23:12] [CLEANUP] ======================================== [09:23:12] [CLEANUP] Cleaning up all agent connections and views [09:23:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:12] [CLEANUP] Stopped and removed 0 video connections [09:23:12] [CLEANUP] Removed 0 video views [09:23:12] [CLEANUP] Removed 0 feed scroll views [09:23:12] [CLEANUP] Removed 0 status labels [09:23:12] [CLEANUP] Reset agent query state [09:23:12] [CLEANUP] Updated page indicator [09:23:12] [CLEANUP] Rebuilt video layout [09:23:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:12] [CLEANUP] ======================================== [09:23:12] [SERVER] Starting reconnect polling (5s interval) [09:23:12] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [09:23:12] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [09:23:12] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=51 [09:23:12] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:23:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-5, 28821, 28820, 28819, 28818] [09:23:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:23:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-5, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [09:23:12] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:23:12] [SCROLL] wasNearBottom=true, threshold=447, offset=4492, contentH=4939, boundsH=447, forceScroll=false [09:23:12] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:23:12] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:12] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:12] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [09:23:12] [SCROLL] 💓 alive, visible=48...52, rows=53, estHeight=0.0, heightCalls=112 [09:23:12] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [09:23:12] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [09:23:13] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4569, currentOffset=4569 [09:23:13] [SCROLL] Scrolling to 4569, animated=true [09:23:13] [CLIENT_SIG] Event received: type=0 messageId=28822 [09:23:13] [WS_EVENT] Received event: type=0, messageId=28822 [09:23:13] [WS_EVENT] 📨 New message notification (msgId=28822) - triggering incremental refresh, currentMsgCount=51 [09:23:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:23:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28821, maxMemoryId=28821 [09:23:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28821 [09:23:13] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28822,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:23:13"} [09:23:13] [CHAT] receive_message.php JSON: ["message_type": 0, "session_id": ILUIWU, "datesent_utc": 2026-04-23 07:23:13, "message_id": 28822, "file_name": , "ok": 1] [09:23:13] [DB_UPGRADE] Upgrading message ID: -5 → 28822, preserveOriginalDate=false [09:23:13] [DB_UPGRADE] ✅ Upgraded -5 → 28822 with send_status=0, 1 row(s) affected [09:23:13] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 28822 [09:23:13] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 28822 [09:23:13] ReloadData 9 [09:23:13] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:13] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:23:13] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28822] [09:23:13] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [09:23:13] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [09:23:13] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:23:13] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:23:13] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [09:23:13] DOWNLOADIIING 2c2436d604281163.jpg [09:23:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=56 [09:23:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28822, 28821, 28820, 28819, 28818] [09:23:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:23:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813] [09:23:13] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:23:13] [SCROLL] wasNearBottom=true, threshold=447, offset=4569, contentH=5016, boundsH=447, forceScroll=true [09:23:13] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:23:13] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=56 [09:23:13] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4569, currentOffset=4569 [09:23:13] [SCROLL] Scrolling to 4569, animated=false [09:23:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:13] [MEDIA_DOWNLOAD] ✅ 2c2436d604281163.jpg complete [09:23:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:13] [MEDIA_DOWNLOAD] ✅ Set thumbnail for cell: 2c2436d604281163.jpg from downloaded: 2c2436d604281163.jpg [09:23:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:13] HELLO → sent (cached token, role=query) [09:23:13] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:13] [CAPTURE] Live-feed protection [fullscreen-media-state-changed] - fullscreen=false, isCaptured=false, secureReady=true [09:23:13] [CAPTURE] Refresh overlay [fullscreen-media-state-changed] - isCaptured: false, mediaFullscreen: true, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:23:13] [MEDIA_VIEWER] 🟢 Presenting viewer (download path) for msgId=28821, file=2c2436d604281163.jpg, timer=0 [09:23:13] [PRESENT] Releasing inputField first responder before presenting MediaViewerController [09:23:13] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= visibleOverlay=false [09:23:13] [MEDIA_ZOOM] 🔵 PRESENTING - container=(0.0, 0.0, 440.0, 956.0), hasImage=true [09:23:13] [MEDIA_ZOOM] startFrame=(21.0, 487.0, 157.5, 280.0), finalFrame=(0.0, 86.0, 440.0, 782.0) [09:23:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:13] [WS] Query connection failed - cleaning up all agent connections and views [09:23:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:13] [CLEANUP] ======================================== [09:23:13] [CLEANUP] Cleaning up all agent connections and views [09:23:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:13] [CLEANUP] Stopped and removed 0 video connections [09:23:13] [CLEANUP] Removed 0 video views [09:23:13] [CLEANUP] Removed 0 feed scroll views [09:23:13] [CLEANUP] Removed 0 status labels [09:23:13] [CLEANUP] Reset agent query state [09:23:13] [CLEANUP] Updated page indicator [09:23:13] [CLEANUP] Rebuilt video layout [09:23:13] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:13] [CLEANUP] ======================================== [09:23:13] [SERVER] Starting reconnect polling (5s interval) [09:23:13] [CLEANUP] ======================================== [09:23:13] [CLEANUP] Cleaning up all agent connections and views [09:23:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:13] [CLEANUP] Stopped and removed 0 video connections [09:23:13] [CLEANUP] Removed 0 video views [09:23:13] [CLEANUP] Removed 0 feed scroll views [09:23:13] [CLEANUP] Removed 0 status labels [09:23:13] [CLEANUP] Reset agent query state [09:23:13] [CLEANUP] Updated page indicator [09:23:13] [CLEANUP] Rebuilt video layout [09:23:13] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:13] [CLEANUP] ======================================== [09:23:13] [SERVER] Starting reconnect polling (5s interval) [09:23:14] [MEDIA_ZOOM] ✅ PRESENT animation complete - showing full viewer [09:23:14] [MEDIA_VIEWER] viewDidAppear - fullscreen media viewer visible [09:23:14] [MEDIA_VIEWER] allowDismissGesture = true (0.35s elapsed) [09:23:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:15] HELLO → sent (cached token, role=query) [09:23:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:15] [WS] Query connection failed - cleaning up all agent connections and views [09:23:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:15] [CLEANUP] ======================================== [09:23:15] [CLEANUP] Cleaning up all agent connections and views [09:23:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:15] [CLEANUP] Stopped and removed 0 video connections [09:23:15] [CLEANUP] Removed 0 video views [09:23:15] [CLEANUP] Removed 0 feed scroll views [09:23:15] [CLEANUP] Removed 0 status labels [09:23:15] [CLEANUP] Reset agent query state [09:23:15] [CLEANUP] Updated page indicator [09:23:15] [CLEANUP] Rebuilt video layout [09:23:15] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:15] [CLEANUP] ======================================== [09:23:15] [SERVER] Starting reconnect polling (5s interval) [09:23:15] [CLEANUP] ======================================== [09:23:15] [CLEANUP] Cleaning up all agent connections and views [09:23:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:15] [CLEANUP] Stopped and removed 0 video connections [09:23:15] [CLEANUP] Removed 0 video views [09:23:15] [CLEANUP] Removed 0 feed scroll views [09:23:15] [CLEANUP] Removed 0 status labels [09:23:15] [CLEANUP] Reset agent query state [09:23:15] [CLEANUP] Updated page indicator [09:23:15] [CLEANUP] Rebuilt video layout [09:23:15] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:15] [CLEANUP] ======================================== [09:23:15] [SERVER] Starting reconnect polling (5s interval) [09:23:17] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:17] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:17] HELLO → sent (cached token, role=query) [09:23:17] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:17] [WS] Query connection failed - cleaning up all agent connections and views [09:23:17] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:17] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:17] [CLEANUP] ======================================== [09:23:17] [CLEANUP] Cleaning up all agent connections and views [09:23:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:17] [CLEANUP] Stopped and removed 0 video connections [09:23:17] [CLEANUP] Removed 0 video views [09:23:17] [CLEANUP] Removed 0 feed scroll views [09:23:17] [CLEANUP] Removed 0 status labels [09:23:17] [CLEANUP] Reset agent query state [09:23:17] [CLEANUP] Updated page indicator [09:23:17] [CLEANUP] Rebuilt video layout [09:23:17] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:17] [CLEANUP] ======================================== [09:23:17] [SERVER] Starting reconnect polling (5s interval) [09:23:17] [CLEANUP] ======================================== [09:23:17] [CLEANUP] Cleaning up all agent connections and views [09:23:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:17] [CLEANUP] Stopped and removed 0 video connections [09:23:17] [CLEANUP] Removed 0 video views [09:23:17] [CLEANUP] Removed 0 feed scroll views [09:23:17] [CLEANUP] Removed 0 status labels [09:23:17] [CLEANUP] Reset agent query state [09:23:17] [CLEANUP] Updated page indicator [09:23:17] [CLEANUP] Rebuilt video layout [09:23:17] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:17] [CLEANUP] ======================================== [09:23:17] [SERVER] Starting reconnect polling (5s interval) [09:23:18] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:18] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:18] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:18] HELLO → sent (cached token, role=query) [09:23:19] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:19] [WS] Query connection failed - cleaning up all agent connections and views [09:23:19] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:19] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:19] [CLEANUP] ======================================== [09:23:19] [CLEANUP] Cleaning up all agent connections and views [09:23:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:19] [CLEANUP] Stopped and removed 0 video connections [09:23:19] [CLEANUP] Removed 0 video views [09:23:19] [CLEANUP] Removed 0 feed scroll views [09:23:19] [CLEANUP] Removed 0 status labels [09:23:19] [CLEANUP] Reset agent query state [09:23:19] [CLEANUP] Updated page indicator [09:23:19] [CLEANUP] Rebuilt video layout [09:23:19] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:19] [CLEANUP] ======================================== [09:23:19] [SERVER] Starting reconnect polling (5s interval) [09:23:19] [CLEANUP] ======================================== [09:23:19] [CLEANUP] Cleaning up all agent connections and views [09:23:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:19] [CLEANUP] Stopped and removed 0 video connections [09:23:19] [CLEANUP] Removed 0 video views [09:23:19] [CLEANUP] Removed 0 feed scroll views [09:23:19] [CLEANUP] Removed 0 status labels [09:23:19] [CLEANUP] Reset agent query state [09:23:19] [CLEANUP] Updated page indicator [09:23:19] [CLEANUP] Rebuilt video layout [09:23:19] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:19] [CLEANUP] ======================================== [09:23:19] [SERVER] Starting reconnect polling (5s interval) [09:23:19] [MEDIA_VIEWER] Pan gesture shouldBegin=true, velocity=(66.66000065076524, 346.63200338397604) [09:23:19] [MEDIA_VIEWER] Pan-to-dismiss triggered (dy=72.66666666666674, velocityY=2855.6957195176474) [09:23:19] [MEDIA_VIEWER] ❌ dismiss() CALLED - animated=true 0 Eye.debug.dylib 0x0000000102f714bc $s3Eye21MediaViewerControllerC7dismiss8animated10completionySb_yycSgtF + 136 1 Eye.debug.dylib 0x0000000102f7eabc $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCF + 2084 2 Eye.debug.dylib 0x0000000102f7edac $s3Eye21MediaViewerControllerC9handlePan33_791426CB2E96A6BD5D22046DA17161F6LLyySo22UIPanGestureRecognizerCFTo + 68 3 UIKitCore 0x00000001966d1b28 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5954344 4 UIKitCore 0x00000001966d1438 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5952568 5 UIKitCore 0x00000001966d11e4 32C1B300-A601-3E14-8B53-3419A2D2F234 + 5951972 6 UIKitCore 0x0000000196215a24 32C1B300-A601-3E14-8B53-3419A2D2F234 + 989732 7 UIKitCore 0x00000001961da310 32C1B300-A601-3E14-8B53-3419A2D2F234 + 746256 8 Gestures 0x000000019bdcb754 2441E699-9255-3327-A836-62B5C47B0C59 + 38740 9 Gestures 0x000000019be09c1c 2441E699-9255-3327-A836-62B5C47B0C59 + 293916 [09:23:19] [MEDIA_VIEWER] viewWillDisappear - animated=true [09:23:19] [MEDIA_ZOOM] 🔴 DISMISSING - zoom-out animation starting [09:23:19] [MEDIA_ZOOM] 🔴 DISMISS endFrame=(21.0, 487.0, 157.5, 280.0) [09:23:19] [MEDIA_ZOOM] ✅ DISMISS animation complete [09:23:19] [MEDIA_VIEWER] viewDidDisappear - fullscreen media viewer dismissed [09:23:19] [CAPTURE] Live-feed protection [fullscreen-media-state-changed] - fullscreen=false, isCaptured=false, secureReady=true [09:23:19] [CAPTURE] Refresh overlay [fullscreen-media-state-changed] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:23:19] [CAPTURE] Live-feed protection [downloaded-media-dismissed] - fullscreen=false, isCaptured=false, secureReady=true [09:23:19] [CAPTURE] Refresh overlay [downloaded-media-dismissed] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:23:20] [SCROLL] 💓 alive, visible=46...51, rows=53, estHeight=0.0, heightCalls=61 [09:23:20] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [09:23:20] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:20] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:20] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:20] HELLO → sent (cached token, role=query) [09:23:20] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:20] [WS] Query connection failed - cleaning up all agent connections and views [09:23:20] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:20] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:20] [CLEANUP] ======================================== [09:23:20] [CLEANUP] Cleaning up all agent connections and views [09:23:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:20] [CLEANUP] Stopped and removed 0 video connections [09:23:20] [CLEANUP] Removed 0 video views [09:23:20] [CLEANUP] Removed 0 feed scroll views [09:23:20] [CLEANUP] Removed 0 status labels [09:23:20] [CLEANUP] Reset agent query state [09:23:20] [CLEANUP] Updated page indicator [09:23:20] [CLEANUP] Rebuilt video layout [09:23:20] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:20] [CLEANUP] ======================================== [09:23:20] [SERVER] Starting reconnect polling (5s interval) [09:23:20] [CLEANUP] ======================================== [09:23:20] [CLEANUP] Cleaning up all agent connections and views [09:23:20] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:20] [CLEANUP] Stopped and removed 0 video connections [09:23:20] [CLEANUP] Removed 0 video views [09:23:20] [CLEANUP] Removed 0 feed scroll views [09:23:20] [CLEANUP] Removed 0 status labels [09:23:20] [CLEANUP] Reset agent query state [09:23:20] [CLEANUP] Updated page indicator [09:23:20] [CLEANUP] Rebuilt video layout [09:23:20] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:20] [CLEANUP] ======================================== [09:23:20] [SERVER] Starting reconnect polling (5s interval) [09:23:20] [SCROLL_END_DECEL] messagesTable offsetY=4569, insetTop=0, pendingVelocityY=1.1332885380371427 [09:23:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:22] HELLO → sent (cached token, role=query) [09:23:22] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:22] [WS] Query connection failed - cleaning up all agent connections and views [09:23:22] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:22] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:22] [CLEANUP] ======================================== [09:23:22] [CLEANUP] Cleaning up all agent connections and views [09:23:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:22] [CLEANUP] Stopped and removed 0 video connections [09:23:22] [CLEANUP] Removed 0 video views [09:23:22] [CLEANUP] Removed 0 feed scroll views [09:23:22] [CLEANUP] Removed 0 status labels [09:23:22] [CLEANUP] Reset agent query state [09:23:22] [CLEANUP] Updated page indicator [09:23:22] [CLEANUP] Rebuilt video layout [09:23:22] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:22] [CLEANUP] ======================================== [09:23:22] [SERVER] Starting reconnect polling (5s interval) [09:23:22] [CLEANUP] ======================================== [09:23:22] [CLEANUP] Cleaning up all agent connections and views [09:23:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:22] [CLEANUP] Stopped and removed 0 video connections [09:23:22] [CLEANUP] Removed 0 video views [09:23:22] [CLEANUP] Removed 0 feed scroll views [09:23:22] [CLEANUP] Removed 0 status labels [09:23:22] [CLEANUP] Reset agent query state [09:23:22] [CLEANUP] Updated page indicator [09:23:22] [CLEANUP] Rebuilt video layout [09:23:22] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:22] [CLEANUP] ======================================== [09:23:22] [SERVER] Starting reconnect polling (5s interval) [09:23:23] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:23] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:24] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:24] HELLO → sent (cached token, role=query) [09:23:24] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:24] [WS] Query connection failed - cleaning up all agent connections and views [09:23:24] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:24] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:24] [CLEANUP] ======================================== [09:23:24] [CLEANUP] Cleaning up all agent connections and views [09:23:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:24] [CLEANUP] Stopped and removed 0 video connections [09:23:24] [CLEANUP] Removed 0 video views [09:23:24] [CLEANUP] Removed 0 feed scroll views [09:23:24] [CLEANUP] Removed 0 status labels [09:23:24] [CLEANUP] Reset agent query state [09:23:24] [CLEANUP] Updated page indicator [09:23:24] [CLEANUP] Rebuilt video layout [09:23:24] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:24] [CLEANUP] ======================================== [09:23:24] [SERVER] Starting reconnect polling (5s interval) [09:23:24] [CLEANUP] ======================================== [09:23:24] [CLEANUP] Cleaning up all agent connections and views [09:23:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:24] [CLEANUP] Stopped and removed 0 video connections [09:23:24] [CLEANUP] Removed 0 video views [09:23:24] [CLEANUP] Removed 0 feed scroll views [09:23:24] [CLEANUP] Removed 0 status labels [09:23:24] [CLEANUP] Reset agent query state [09:23:24] [CLEANUP] Updated page indicator [09:23:24] [CLEANUP] Rebuilt video layout [09:23:24] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:24] [CLEANUP] ======================================== [09:23:24] [SERVER] Starting reconnect polling (5s interval) [09:23:25] [SCROLL] 💓 alive, visible=50...52, rows=53, estHeight=0.0, heightCalls=1 [09:23:25] [SCROLL_END_DECEL] messagesTable offsetY=4623, insetTop=0, pendingVelocityY=1.1332885380371427 [09:23:25] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:25] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:25] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:25] HELLO → sent (cached token, role=query) [09:23:25] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:25] [WS] Query connection failed - cleaning up all agent connections and views [09:23:25] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:25] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:25] [CLEANUP] ======================================== [09:23:25] [CLEANUP] Cleaning up all agent connections and views [09:23:25] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:25] [CLEANUP] Stopped and removed 0 video connections [09:23:25] [CLEANUP] Removed 0 video views [09:23:25] [CLEANUP] Removed 0 feed scroll views [09:23:25] [CLEANUP] Removed 0 status labels [09:23:25] [CLEANUP] Reset agent query state [09:23:25] [CLEANUP] Updated page indicator [09:23:25] [CLEANUP] Rebuilt video layout [09:23:25] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:25] [CLEANUP] ======================================== [09:23:25] [SERVER] Starting reconnect polling (5s interval) [09:23:25] [CLEANUP] ======================================== [09:23:25] [CLEANUP] Cleaning up all agent connections and views [09:23:25] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:25] [CLEANUP] Stopped and removed 0 video connections [09:23:25] [CLEANUP] Removed 0 video views [09:23:25] [CLEANUP] Removed 0 feed scroll views [09:23:25] [CLEANUP] Removed 0 status labels [09:23:25] [CLEANUP] Reset agent query state [09:23:25] [CLEANUP] Updated page indicator [09:23:25] [CLEANUP] Rebuilt video layout [09:23:25] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:25] [CLEANUP] ======================================== [09:23:25] [SERVER] Starting reconnect polling (5s interval) [09:23:27] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:27] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:27] HELLO → sent (cached token, role=query) [09:23:27] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:27] [WS] Query connection failed - cleaning up all agent connections and views [09:23:27] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:27] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:27] [CLEANUP] ======================================== [09:23:27] [CLEANUP] Cleaning up all agent connections and views [09:23:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:27] [CLEANUP] Stopped and removed 0 video connections [09:23:27] [CLEANUP] Removed 0 video views [09:23:27] [CLEANUP] Removed 0 feed scroll views [09:23:27] [CLEANUP] Removed 0 status labels [09:23:27] [CLEANUP] Reset agent query state [09:23:27] [CLEANUP] Updated page indicator [09:23:27] [CLEANUP] Rebuilt video layout [09:23:27] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:27] [CLEANUP] ======================================== [09:23:27] [SERVER] Starting reconnect polling (5s interval) [09:23:27] [CLEANUP] ======================================== [09:23:27] [CLEANUP] Cleaning up all agent connections and views [09:23:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:27] [CLEANUP] Stopped and removed 0 video connections [09:23:27] [CLEANUP] Removed 0 video views [09:23:27] [CLEANUP] Removed 0 feed scroll views [09:23:27] [CLEANUP] Removed 0 status labels [09:23:27] [CLEANUP] Reset agent query state [09:23:27] [CLEANUP] Updated page indicator [09:23:27] [CLEANUP] Rebuilt video layout [09:23:27] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:27] [CLEANUP] ======================================== [09:23:27] [SERVER] Starting reconnect polling (5s interval) [09:23:28] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [09:23:28] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [09:23:28] [SEND_MESSAGE] ✅ Added optimistic message id=-6 to arrays, newMsgCount=52 [09:23:28] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:23:28] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-6, 28822, 28821, 28820, 28819] [09:23:28] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:23:28] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-6, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [09:23:28] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:23:28] [SCROLL] wasNearBottom=true, threshold=375, offset=4623, contentH=5016, boundsH=375, forceScroll=false [09:23:28] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:23:28] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:28] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=56 [09:23:28] [SCROLL] 💓 alive, visible=51...53, rows=54, estHeight=0.0, heightCalls=110 [09:23:28] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [09:23:28] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [09:23:28] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4696, currentOffset=4696 [09:23:28] [SCROLL] Scrolling to 4696, animated=true [09:23:28] [CLIENT_SIG] Event received: type=0 messageId=28823 [09:23:28] [WS_EVENT] Received event: type=0, messageId=28823 [09:23:28] [WS_EVENT] 📨 New message notification (msgId=28823) - triggering incremental refresh, currentMsgCount=52 [09:23:28] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:23:28] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28822, maxMemoryId=28822 [09:23:28] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28822 [09:23:28] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28823,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:23:28"} [09:23:28] [CHAT] receive_message.php JSON: ["message_type": 0, "session_id": ILUIWU, "message_id": 28823, "ok": 1, "datesent_utc": 2026-04-23 07:23:28, "file_name": ] [09:23:28] [DB_UPGRADE] Upgrading message ID: -6 → 28823, preserveOriginalDate=false [09:23:28] [DB_UPGRADE] ✅ Upgraded -6 → 28823 with send_status=0, 1 row(s) affected [09:23:28] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -6 → 28823 [09:23:28] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -6 → 28823 [09:23:28] ReloadData 9 [09:23:28] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:28] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:29] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:23:29] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28823] [09:23:29] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [09:23:29] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [09:23:29] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:23:29] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:23:29] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [09:23:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:29] HELLO → sent (cached token, role=query) [09:23:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:29] [WS] Query connection failed - cleaning up all agent connections and views [09:23:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:29] [CLEANUP] ======================================== [09:23:29] [CLEANUP] Cleaning up all agent connections and views [09:23:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:29] [CLEANUP] Stopped and removed 0 video connections [09:23:29] [CLEANUP] Removed 0 video views [09:23:29] [CLEANUP] Removed 0 feed scroll views [09:23:29] [CLEANUP] Removed 0 status labels [09:23:29] [CLEANUP] Reset agent query state [09:23:29] [CLEANUP] Updated page indicator [09:23:29] [CLEANUP] Rebuilt video layout [09:23:29] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:29] [CLEANUP] ======================================== [09:23:29] [SERVER] Starting reconnect polling (5s interval) [09:23:29] [CLEANUP] ======================================== [09:23:29] [CLEANUP] Cleaning up all agent connections and views [09:23:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:29] [CLEANUP] Stopped and removed 0 video connections [09:23:29] [CLEANUP] Removed 0 video views [09:23:29] [CLEANUP] Removed 0 feed scroll views [09:23:29] [CLEANUP] Removed 0 status labels [09:23:29] [CLEANUP] Reset agent query state [09:23:29] [CLEANUP] Updated page indicator [09:23:29] [CLEANUP] Rebuilt video layout [09:23:29] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:29] [CLEANUP] ======================================== [09:23:29] [SERVER] Starting reconnect polling (5s interval) [09:23:29] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=58 [09:23:29] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28823, 28822, 28821, 28820, 28819] [09:23:29] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:23:29] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814] [09:23:29] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:23:29] [SCROLL] wasNearBottom=true, threshold=393, offset=4696, contentH=5089, boundsH=393, forceScroll=true [09:23:29] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:23:29] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:29] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:29] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=57 [09:23:29] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4696, currentOffset=4696 [09:23:29] [SCROLL] Scrolling to 4696, animated=false [09:23:30] [SCROLL] 💓 alive, visible=51...53, rows=54, estHeight=0.0, heightCalls=57 [09:23:30] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:30] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:30] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:30] HELLO → sent (cached token, role=query) [09:23:30] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:30] [WS] Query connection failed - cleaning up all agent connections and views [09:23:30] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:30] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:30] [CLEANUP] ======================================== [09:23:30] [CLEANUP] Cleaning up all agent connections and views [09:23:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:30] [CLEANUP] Stopped and removed 0 video connections [09:23:30] [CLEANUP] Removed 0 video views [09:23:30] [CLEANUP] Removed 0 feed scroll views [09:23:30] [CLEANUP] Removed 0 status labels [09:23:30] [CLEANUP] Reset agent query state [09:23:30] [CLEANUP] Updated page indicator [09:23:30] [CLEANUP] Rebuilt video layout [09:23:30] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:30] [CLEANUP] ======================================== [09:23:30] [SERVER] Starting reconnect polling (5s interval) [09:23:30] [CLEANUP] ======================================== [09:23:30] [CLEANUP] Cleaning up all agent connections and views [09:23:30] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:30] [CLEANUP] Stopped and removed 0 video connections [09:23:30] [CLEANUP] Removed 0 video views [09:23:30] [CLEANUP] Removed 0 feed scroll views [09:23:30] [CLEANUP] Removed 0 status labels [09:23:30] [CLEANUP] Reset agent query state [09:23:30] [CLEANUP] Updated page indicator [09:23:30] [CLEANUP] Rebuilt video layout [09:23:30] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:30] [CLEANUP] ======================================== [09:23:30] [SERVER] Starting reconnect polling (5s interval) [09:23:32] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:32] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:32] HELLO → sent (cached token, role=query) [09:23:32] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:32] [WS] Query connection failed - cleaning up all agent connections and views [09:23:32] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:32] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:32] [CLEANUP] ======================================== [09:23:32] [CLEANUP] Cleaning up all agent connections and views [09:23:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:32] [CLEANUP] Stopped and removed 0 video connections [09:23:32] [CLEANUP] Removed 0 video views [09:23:32] [CLEANUP] Removed 0 feed scroll views [09:23:32] [CLEANUP] Removed 0 status labels [09:23:32] [CLEANUP] Reset agent query state [09:23:32] [CLEANUP] Updated page indicator [09:23:32] [CLEANUP] Rebuilt video layout [09:23:32] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:32] [CLEANUP] ======================================== [09:23:32] [SERVER] Starting reconnect polling (5s interval) [09:23:32] [CLEANUP] ======================================== [09:23:32] [CLEANUP] Cleaning up all agent connections and views [09:23:32] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:32] [CLEANUP] Stopped and removed 0 video connections [09:23:32] [CLEANUP] Removed 0 video views [09:23:32] [CLEANUP] Removed 0 feed scroll views [09:23:32] [CLEANUP] Removed 0 status labels [09:23:32] [CLEANUP] Reset agent query state [09:23:32] [CLEANUP] Updated page indicator [09:23:32] [CLEANUP] Rebuilt video layout [09:23:32] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:32] [CLEANUP] ======================================== [09:23:32] [SERVER] Starting reconnect polling (5s interval) [09:23:33] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:33] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:33] HELLO → sent (cached token, role=query) [09:23:33] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:33] [WS] Query connection failed - cleaning up all agent connections and views [09:23:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:33] [CLEANUP] ======================================== [09:23:33] [CLEANUP] Cleaning up all agent connections and views [09:23:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:33] [CLEANUP] Stopped and removed 0 video connections [09:23:33] [CLEANUP] Removed 0 video views [09:23:33] [CLEANUP] Removed 0 feed scroll views [09:23:33] [CLEANUP] Removed 0 status labels [09:23:33] [CLEANUP] Reset agent query state [09:23:33] [CLEANUP] Updated page indicator [09:23:33] [CLEANUP] Rebuilt video layout [09:23:33] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:33] [CLEANUP] ======================================== [09:23:33] [SERVER] Starting reconnect polling (5s interval) [09:23:33] [CLEANUP] ======================================== [09:23:33] [CLEANUP] Cleaning up all agent connections and views [09:23:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:33] [CLEANUP] Stopped and removed 0 video connections [09:23:33] [CLEANUP] Removed 0 video views [09:23:33] [CLEANUP] Removed 0 feed scroll views [09:23:33] [CLEANUP] Removed 0 status labels [09:23:33] [CLEANUP] Reset agent query state [09:23:33] [CLEANUP] Updated page indicator [09:23:33] [CLEANUP] Rebuilt video layout [09:23:33] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:33] [CLEANUP] ======================================== [09:23:33] [SERVER] Starting reconnect polling (5s interval) [09:23:35] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:35] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:35] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:35] HELLO → sent (cached token, role=query) [09:23:35] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:35] [WS] Query connection failed - cleaning up all agent connections and views [09:23:35] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:35] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:35] [CLEANUP] ======================================== [09:23:35] [CLEANUP] Cleaning up all agent connections and views [09:23:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:35] [CLEANUP] Stopped and removed 0 video connections [09:23:35] [CLEANUP] Removed 0 video views [09:23:35] [CLEANUP] Removed 0 feed scroll views [09:23:35] [CLEANUP] Removed 0 status labels [09:23:35] [CLEANUP] Reset agent query state [09:23:35] [CLEANUP] Updated page indicator [09:23:35] [CLEANUP] Rebuilt video layout [09:23:35] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:35] [CLEANUP] ======================================== [09:23:35] [SERVER] Starting reconnect polling (5s interval) [09:23:35] [CLEANUP] ======================================== [09:23:35] [CLEANUP] Cleaning up all agent connections and views [09:23:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:35] [CLEANUP] Stopped and removed 0 video connections [09:23:35] [CLEANUP] Removed 0 video views [09:23:35] [CLEANUP] Removed 0 feed scroll views [09:23:35] [CLEANUP] Removed 0 status labels [09:23:35] [CLEANUP] Reset agent query state [09:23:35] [CLEANUP] Updated page indicator [09:23:35] [CLEANUP] Rebuilt video layout [09:23:35] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:35] [CLEANUP] ======================================== [09:23:35] [SERVER] Starting reconnect polling (5s interval) [09:23:37] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:37] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:37] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:37] HELLO → sent (cached token, role=query) [09:23:37] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:37] [WS] Query connection failed - cleaning up all agent connections and views [09:23:37] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:37] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:37] [CLEANUP] ======================================== [09:23:37] [CLEANUP] Cleaning up all agent connections and views [09:23:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:37] [CLEANUP] Stopped and removed 0 video connections [09:23:37] [CLEANUP] Removed 0 video views [09:23:37] [CLEANUP] Removed 0 feed scroll views [09:23:37] [CLEANUP] Removed 0 status labels [09:23:37] [CLEANUP] Reset agent query state [09:23:37] [CLEANUP] Updated page indicator [09:23:37] [CLEANUP] Rebuilt video layout [09:23:37] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:37] [CLEANUP] ======================================== [09:23:37] [SERVER] Starting reconnect polling (5s interval) [09:23:37] [CLEANUP] ======================================== [09:23:37] [CLEANUP] Cleaning up all agent connections and views [09:23:37] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:37] [CLEANUP] Stopped and removed 0 video connections [09:23:37] [CLEANUP] Removed 0 video views [09:23:37] [CLEANUP] Removed 0 feed scroll views [09:23:37] [CLEANUP] Removed 0 status labels [09:23:37] [CLEANUP] Reset agent query state [09:23:37] [CLEANUP] Updated page indicator [09:23:37] [CLEANUP] Rebuilt video layout [09:23:37] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:37] [CLEANUP] ======================================== [09:23:37] [SERVER] Starting reconnect polling (5s interval) [09:23:38] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:38] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:38] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:38] HELLO → sent (cached token, role=query) [09:23:38] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:38] [WS] Query connection failed - cleaning up all agent connections and views [09:23:38] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:38] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:38] [CLEANUP] ======================================== [09:23:38] [CLEANUP] Cleaning up all agent connections and views [09:23:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:38] [CLEANUP] Stopped and removed 0 video connections [09:23:38] [CLEANUP] Removed 0 video views [09:23:38] [CLEANUP] Removed 0 feed scroll views [09:23:38] [CLEANUP] Removed 0 status labels [09:23:38] [CLEANUP] Reset agent query state [09:23:38] [CLEANUP] Updated page indicator [09:23:38] [CLEANUP] Rebuilt video layout [09:23:38] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:38] [CLEANUP] ======================================== [09:23:38] [SERVER] Starting reconnect polling (5s interval) [09:23:38] [CLEANUP] ======================================== [09:23:38] [CLEANUP] Cleaning up all agent connections and views [09:23:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:38] [CLEANUP] Stopped and removed 0 video connections [09:23:38] [CLEANUP] Removed 0 video views [09:23:38] [CLEANUP] Removed 0 feed scroll views [09:23:38] [CLEANUP] Removed 0 status labels [09:23:38] [CLEANUP] Reset agent query state [09:23:38] [CLEANUP] Updated page indicator [09:23:38] [CLEANUP] Rebuilt video layout [09:23:38] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:38] [CLEANUP] ======================================== [09:23:38] [SERVER] Starting reconnect polling (5s interval) [09:23:40] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:40] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:40] HELLO → sent (cached token, role=query) [09:23:40] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:40] [WS] Query connection failed - cleaning up all agent connections and views [09:23:40] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:40] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:40] [CLEANUP] ======================================== [09:23:40] [CLEANUP] Cleaning up all agent connections and views [09:23:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:40] [CLEANUP] Stopped and removed 0 video connections [09:23:40] [CLEANUP] Removed 0 video views [09:23:40] [CLEANUP] Removed 0 feed scroll views [09:23:40] [CLEANUP] Removed 0 status labels [09:23:40] [CLEANUP] Reset agent query state [09:23:40] [CLEANUP] Updated page indicator [09:23:40] [CLEANUP] Rebuilt video layout [09:23:40] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:40] [CLEANUP] ======================================== [09:23:40] [SERVER] Starting reconnect polling (5s interval) [09:23:40] [CLEANUP] ======================================== [09:23:40] [CLEANUP] Cleaning up all agent connections and views [09:23:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:40] [CLEANUP] Stopped and removed 0 video connections [09:23:40] [CLEANUP] Removed 0 video views [09:23:40] [CLEANUP] Removed 0 feed scroll views [09:23:40] [CLEANUP] Removed 0 status labels [09:23:40] [CLEANUP] Reset agent query state [09:23:40] [CLEANUP] Updated page indicator [09:23:40] [CLEANUP] Rebuilt video layout [09:23:40] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:40] [CLEANUP] ======================================== [09:23:40] [SERVER] Starting reconnect polling (5s interval) [09:23:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:42] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:42] HELLO → sent (cached token, role=query) [09:23:42] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:42] [WS] Query connection failed - cleaning up all agent connections and views [09:23:42] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:42] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:42] [CLEANUP] ======================================== [09:23:42] [CLEANUP] Cleaning up all agent connections and views [09:23:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:42] [CLEANUP] Stopped and removed 0 video connections [09:23:42] [CLEANUP] Removed 0 video views [09:23:42] [CLEANUP] Removed 0 feed scroll views [09:23:42] [CLEANUP] Removed 0 status labels [09:23:42] [CLEANUP] Reset agent query state [09:23:42] [CLEANUP] Updated page indicator [09:23:42] [CLEANUP] Rebuilt video layout [09:23:42] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:42] [CLEANUP] ======================================== [09:23:42] [SERVER] Starting reconnect polling (5s interval) [09:23:42] [CLEANUP] ======================================== [09:23:42] [CLEANUP] Cleaning up all agent connections and views [09:23:42] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:42] [CLEANUP] Stopped and removed 0 video connections [09:23:42] [CLEANUP] Removed 0 video views [09:23:42] [CLEANUP] Removed 0 feed scroll views [09:23:42] [CLEANUP] Removed 0 status labels [09:23:42] [CLEANUP] Reset agent query state [09:23:42] [CLEANUP] Updated page indicator [09:23:42] [CLEANUP] Rebuilt video layout [09:23:42] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:42] [CLEANUP] ======================================== [09:23:42] [SERVER] Starting reconnect polling (5s interval) [09:23:43] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:43] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:43] HELLO → sent (cached token, role=query) [09:23:43] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:43] [WS] Query connection failed - cleaning up all agent connections and views [09:23:43] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:43] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:43] [CLEANUP] ======================================== [09:23:43] [CLEANUP] Cleaning up all agent connections and views [09:23:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:43] [CLEANUP] Stopped and removed 0 video connections [09:23:43] [CLEANUP] Removed 0 video views [09:23:43] [CLEANUP] Removed 0 feed scroll views [09:23:43] [CLEANUP] Removed 0 status labels [09:23:43] [CLEANUP] Reset agent query state [09:23:43] [CLEANUP] Updated page indicator [09:23:43] [CLEANUP] Rebuilt video layout [09:23:43] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:43] [CLEANUP] ======================================== [09:23:43] [SERVER] Starting reconnect polling (5s interval) [09:23:43] [CLEANUP] ======================================== [09:23:43] [CLEANUP] Cleaning up all agent connections and views [09:23:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:43] [CLEANUP] Stopped and removed 0 video connections [09:23:43] [CLEANUP] Removed 0 video views [09:23:43] [CLEANUP] Removed 0 feed scroll views [09:23:43] [CLEANUP] Removed 0 status labels [09:23:43] [CLEANUP] Reset agent query state [09:23:43] [CLEANUP] Updated page indicator [09:23:43] [CLEANUP] Rebuilt video layout [09:23:43] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:43] [CLEANUP] ======================================== [09:23:43] [SERVER] Starting reconnect polling (5s interval) [09:23:45] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:45] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:45] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:45] HELLO → sent (cached token, role=query) [09:23:45] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:45] [WS] Query connection failed - cleaning up all agent connections and views [09:23:45] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:45] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:45] [CLEANUP] ======================================== [09:23:45] [CLEANUP] Cleaning up all agent connections and views [09:23:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:45] [CLEANUP] Stopped and removed 0 video connections [09:23:45] [CLEANUP] Removed 0 video views [09:23:45] [CLEANUP] Removed 0 feed scroll views [09:23:45] [CLEANUP] Removed 0 status labels [09:23:45] [CLEANUP] Reset agent query state [09:23:45] [CLEANUP] Updated page indicator [09:23:45] [CLEANUP] Rebuilt video layout [09:23:45] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:45] [CLEANUP] ======================================== [09:23:45] [SERVER] Starting reconnect polling (5s interval) [09:23:45] [CLEANUP] ======================================== [09:23:45] [CLEANUP] Cleaning up all agent connections and views [09:23:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:45] [CLEANUP] Stopped and removed 0 video connections [09:23:45] [CLEANUP] Removed 0 video views [09:23:45] [CLEANUP] Removed 0 feed scroll views [09:23:45] [CLEANUP] Removed 0 status labels [09:23:45] [CLEANUP] Reset agent query state [09:23:45] [CLEANUP] Updated page indicator [09:23:45] [CLEANUP] Rebuilt video layout [09:23:45] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:45] [CLEANUP] ======================================== [09:23:45] [SERVER] Starting reconnect polling (5s interval) [09:23:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:47] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:47] HELLO → sent (cached token, role=query) [09:23:47] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:47] [WS] Query connection failed - cleaning up all agent connections and views [09:23:47] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:47] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:47] [CLEANUP] ======================================== [09:23:47] [CLEANUP] Cleaning up all agent connections and views [09:23:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:47] [CLEANUP] Stopped and removed 0 video connections [09:23:47] [CLEANUP] Removed 0 video views [09:23:47] [CLEANUP] Removed 0 feed scroll views [09:23:47] [CLEANUP] Removed 0 status labels [09:23:47] [CLEANUP] Reset agent query state [09:23:47] [CLEANUP] Updated page indicator [09:23:47] [CLEANUP] Rebuilt video layout [09:23:47] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:47] [CLEANUP] ======================================== [09:23:47] [SERVER] Starting reconnect polling (5s interval) [09:23:47] [CLEANUP] ======================================== [09:23:47] [CLEANUP] Cleaning up all agent connections and views [09:23:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:47] [CLEANUP] Stopped and removed 0 video connections [09:23:47] [CLEANUP] Removed 0 video views [09:23:47] [CLEANUP] Removed 0 feed scroll views [09:23:47] [CLEANUP] Removed 0 status labels [09:23:47] [CLEANUP] Reset agent query state [09:23:47] [CLEANUP] Updated page indicator [09:23:47] [CLEANUP] Rebuilt video layout [09:23:47] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:47] [CLEANUP] ======================================== [09:23:47] [SERVER] Starting reconnect polling (5s interval) [09:23:48] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:48] HELLO → sent (cached token, role=query) [09:23:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:48] [WS] Query connection failed - cleaning up all agent connections and views [09:23:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:48] [CLEANUP] ======================================== [09:23:48] [CLEANUP] Cleaning up all agent connections and views [09:23:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:48] [CLEANUP] Stopped and removed 0 video connections [09:23:48] [CLEANUP] Removed 0 video views [09:23:48] [CLEANUP] Removed 0 feed scroll views [09:23:48] [CLEANUP] Removed 0 status labels [09:23:48] [CLEANUP] Reset agent query state [09:23:48] [CLEANUP] Updated page indicator [09:23:48] [CLEANUP] Rebuilt video layout [09:23:48] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:48] [CLEANUP] ======================================== [09:23:48] [SERVER] Starting reconnect polling (5s interval) [09:23:48] [CLEANUP] ======================================== [09:23:48] [CLEANUP] Cleaning up all agent connections and views [09:23:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:48] [CLEANUP] Stopped and removed 0 video connections [09:23:48] [CLEANUP] Removed 0 video views [09:23:48] [CLEANUP] Removed 0 feed scroll views [09:23:48] [CLEANUP] Removed 0 status labels [09:23:48] [CLEANUP] Reset agent query state [09:23:48] [CLEANUP] Updated page indicator [09:23:48] [CLEANUP] Rebuilt video layout [09:23:48] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:48] [CLEANUP] ======================================== [09:23:48] [SERVER] Starting reconnect polling (5s interval) [09:23:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:50] HELLO → sent (cached token, role=query) [09:23:50] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:50] [WS] Query connection failed - cleaning up all agent connections and views [09:23:50] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:50] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:50] [CLEANUP] ======================================== [09:23:50] [CLEANUP] Cleaning up all agent connections and views [09:23:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:50] [CLEANUP] Stopped and removed 0 video connections [09:23:50] [CLEANUP] Removed 0 video views [09:23:50] [CLEANUP] Removed 0 feed scroll views [09:23:50] [CLEANUP] Removed 0 status labels [09:23:50] [CLEANUP] Reset agent query state [09:23:50] [CLEANUP] Updated page indicator [09:23:50] [CLEANUP] Rebuilt video layout [09:23:50] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:50] [CLEANUP] ======================================== [09:23:50] [SERVER] Starting reconnect polling (5s interval) [09:23:50] [CLEANUP] ======================================== [09:23:50] [CLEANUP] Cleaning up all agent connections and views [09:23:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:50] [CLEANUP] Stopped and removed 0 video connections [09:23:50] [CLEANUP] Removed 0 video views [09:23:50] [CLEANUP] Removed 0 feed scroll views [09:23:50] [CLEANUP] Removed 0 status labels [09:23:50] [CLEANUP] Reset agent query state [09:23:50] [CLEANUP] Updated page indicator [09:23:50] [CLEANUP] Rebuilt video layout [09:23:50] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:50] [CLEANUP] ======================================== [09:23:50] [SERVER] Starting reconnect polling (5s interval) [09:23:52] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:52] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:52] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:52] HELLO → sent (cached token, role=query) [09:23:52] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:52] [WS] Query connection failed - cleaning up all agent connections and views [09:23:52] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:52] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:52] [CLEANUP] ======================================== [09:23:52] [CLEANUP] Cleaning up all agent connections and views [09:23:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:52] [CLEANUP] Stopped and removed 0 video connections [09:23:52] [CLEANUP] Removed 0 video views [09:23:52] [CLEANUP] Removed 0 feed scroll views [09:23:52] [CLEANUP] Removed 0 status labels [09:23:52] [CLEANUP] Reset agent query state [09:23:52] [CLEANUP] Updated page indicator [09:23:52] [CLEANUP] Rebuilt video layout [09:23:52] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:52] [CLEANUP] ======================================== [09:23:52] [SERVER] Starting reconnect polling (5s interval) [09:23:52] [CLEANUP] ======================================== [09:23:52] [CLEANUP] Cleaning up all agent connections and views [09:23:52] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:52] [CLEANUP] Stopped and removed 0 video connections [09:23:52] [CLEANUP] Removed 0 video views [09:23:52] [CLEANUP] Removed 0 feed scroll views [09:23:52] [CLEANUP] Removed 0 status labels [09:23:52] [CLEANUP] Reset agent query state [09:23:52] [CLEANUP] Updated page indicator [09:23:52] [CLEANUP] Rebuilt video layout [09:23:52] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:52] [CLEANUP] ======================================== [09:23:52] [SERVER] Starting reconnect polling (5s interval) [09:23:53] [SCROLL] 💓 alive, visible=51...53, rows=54, estHeight=0.0, heightCalls=0 [09:23:53] [SCROLL_END_DECEL] messagesTable offsetY=4713, insetTop=0, pendingVelocityY=1.1332885380371427 [09:23:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:23:53] HELLO → sent (cached token, role=query) [09:23:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:23:53] [WS] Query connection failed - cleaning up all agent connections and views [09:23:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:23:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:23:53] [CLEANUP] ======================================== [09:23:53] [CLEANUP] Cleaning up all agent connections and views [09:23:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:53] [CLEANUP] Stopped and removed 0 video connections [09:23:53] [CLEANUP] Removed 0 video views [09:23:53] [CLEANUP] Removed 0 feed scroll views [09:23:53] [CLEANUP] Removed 0 status labels [09:23:53] [CLEANUP] Reset agent query state [09:23:53] [CLEANUP] Updated page indicator [09:23:53] [CLEANUP] Rebuilt video layout [09:23:53] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:53] [CLEANUP] ======================================== [09:23:53] [SERVER] Starting reconnect polling (5s interval) [09:23:53] [CLEANUP] ======================================== [09:23:53] [CLEANUP] Cleaning up all agent connections and views [09:23:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:53] [CLEANUP] Stopped and removed 0 video connections [09:23:53] [CLEANUP] Removed 0 video views [09:23:53] [CLEANUP] Removed 0 feed scroll views [09:23:53] [CLEANUP] Removed 0 status labels [09:23:53] [CLEANUP] Reset agent query state [09:23:53] [CLEANUP] Updated page indicator [09:23:53] [CLEANUP] Rebuilt video layout [09:23:53] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:53] [CLEANUP] ======================================== [09:23:53] [SERVER] Starting reconnect polling (5s interval) [09:23:54] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [09:23:54] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [09:23:54] [SEND_MESSAGE] ✅ Added optimistic message id=-7 to arrays, newMsgCount=53 [09:23:54] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [09:23:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-7, 28823, 28822, 28821, 28820] [09:23:54] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:23:54] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-7, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:23:54] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:23:54] [SCROLL] wasNearBottom=true, threshold=375, offset=4713, contentH=5089, boundsH=375, forceScroll=false [09:23:54] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:23:54] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:54] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:54] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [09:23:54] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [09:23:54] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [09:23:54] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4769, currentOffset=4769 [09:23:54] [SCROLL] Scrolling to 4769, animated=true [09:23:54] [CLIENT_SIG] Event received: type=0 messageId=28824 [09:23:54] [WS_EVENT] Received event: type=0, messageId=28824 [09:23:54] [WS_EVENT] 📨 New message notification (msgId=28824) - triggering incremental refresh, currentMsgCount=53 [09:23:54] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:23:54] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28823, maxMemoryId=28823 [09:23:54] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28823 [09:23:54] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28824,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:23:54"} [09:23:54] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 07:23:54, "message_id": 28824, "message_type": 0, "ok": 1, "file_name": , "session_id": ILUIWU] [09:23:54] [DB_UPGRADE] Upgrading message ID: -7 → 28824, preserveOriginalDate=false [09:23:54] [DB_UPGRADE] ✅ Upgraded -7 → 28824 with send_status=0, 1 row(s) affected [09:23:54] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -7 → 28824 [09:23:54] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -7 → 28824 [09:23:54] ReloadData 9 [09:23:54] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:54] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:54] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:23:54] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28824] [09:23:54] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:23:54] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:23:54] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:23:54] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:23:54] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [09:23:54] [LIFECYCLE] App resigning active - cleared crash flag [09:23:54] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=174 [09:23:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28824, 28823, 28822, 28821, 28820] [09:23:54] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:23:54] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:23:54] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:23:54] [SCROLL] wasNearBottom=true, threshold=393, offset=4769, contentH=5162, boundsH=393, forceScroll=true [09:23:54] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:23:54] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:23:54] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:23:54] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [09:23:54] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4769, currentOffset=4769 [09:23:54] [SCROLL] Scrolling to 4769, animated=false [09:23:55] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:23:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:23:55] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [09:23:55] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:23:55] [SECURITY] Saved background timestamp [09:23:55] [LIFECYCLE] App entering background - cleared crash flag [09:23:55] [CLIENT_SIG] Disconnecting [09:23:55] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:23:55] [DB] ✅ Chat database flushed (WAL checkpoint) before background [09:23:55] [PUSH_TRACE] 💤 BACKGROUND: memory has 53 messages, first 10 IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:23:55] [LIFECYCLE] Background snapshot: count=53, maxId=28824 [09:23:55] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:23:55] [WS] Canceling WebSocket for query connection to iosILUIWU [09:23:55] In cleanupPeer [09:23:55] In cleanupPeer [09:23:55] [LIFECYCLE] WebRTC audio disabled [09:23:55] [LIFECYCLE] AVAudioSession deactivated [09:23:55] [LIFECYCLE] All connections stopped [09:23:55] [CLIENT_SIG] WebSocket closed with code 1001 [09:23:55] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:23:55] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:23:55] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:23:55] [SERVER] Stopped reconnect polling [09:23:55] Will request stop of video 0 [09:23:55] Will request stop of video 0 [09:23:55] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:23:55] [WS] Query connection error - cleaning up all agent connections and views [09:23:55] [WS] Connection failed: cancelled [09:23:55] [WS] Query connection failed - cleaning up all agent connections and views [09:23:55] [SCROLL] 💓 alive, visible=51...54, rows=55, estHeight=0.0, heightCalls=59 [09:23:55] [PIP] Removing 0 tracks from PiP for connection 0 [09:23:55] [PIP] ✅ All tracks removed for connection 0 [09:23:55] [PIP] Removing 0 tracks from PiP for connection 0 [09:23:55] [PIP] ✅ All tracks removed for connection 0 [09:23:55] [CLEANUP] ======================================== [09:23:55] [CLEANUP] Cleaning up all agent connections and views [09:23:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:55] [CLEANUP] Stopped and removed 0 video connections [09:23:55] [CLEANUP] Removed 0 video views [09:23:55] [CLEANUP] Removed 0 feed scroll views [09:23:55] [CLEANUP] Removed 0 status labels [09:23:55] [CLEANUP] Reset agent query state [09:23:55] [CLEANUP] Updated page indicator [09:23:55] [CLEANUP] Rebuilt video layout [09:23:55] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:55] [CLEANUP] ======================================== [09:23:55] [SERVER] Skipping reconnect polling - app is in background [09:23:55] [WS] URLSession invalidated successfully [09:23:55] [CLEANUP] ======================================== [09:23:55] [CLEANUP] Cleaning up all agent connections and views [09:23:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:23:55] [CLEANUP] Stopped and removed 0 video connections [09:23:55] [CLEANUP] Removed 0 video views [09:23:55] [CLEANUP] Removed 0 feed scroll views [09:23:55] [CLEANUP] Removed 0 status labels [09:23:55] [CLEANUP] Reset agent query state [09:23:55] [CLEANUP] Updated page indicator [09:23:55] [CLEANUP] Rebuilt video layout [09:23:55] [CLEANUP] ✅ All agent connections and views cleaned up [09:23:55] [CLEANUP] ======================================== [09:23:55] [SERVER] Skipping reconnect polling - app is in background [09:33:08] [SECURITY] Timeout check: elapsed=553.6291000843048s, timeout=300.0s [09:33:08] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [09:33:08] [AUTH] ✅ All guards passed, showing privacy cover [09:33:08] [NETWORK] Status changed: connected [09:33:08] [SCROLL] 💓 alive, visible=47...54, rows=55, estHeight=0.0, heightCalls=0 [09:33:08] [LIFECYCLE] App entering foreground - restoring connections [09:33:08] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [09:33:08] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:33:08] [PUSH_TRACE] 🔄 FOREGROUND: memory has 53 msgs, IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:08] [PUSH_TRACE] 🔄 FOREGROUND: cache has 50 msgs, valid=true, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:33:08] [LIFECYCLE] Away > 2 minutes (553s) - will scroll to bottom [09:33:09] [UPLOAD_RETRY] No pending uploads to retry [09:33:09] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:33:09] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [09:33:09] [LIFECYCLE] WebRTC audio re-enabled [09:33:09] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:33:09] [CLIENT_SIG] Skipping connect - app in background (state=2) [09:33:09] [VIEWER] Reconnecting after background - querying agents [09:33:09] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=nil [09:33:09] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:33:09] [UNSENT_RETRY] Checking for unsent messages... [09:33:09] [PENDING_UPLOAD] Total pending upload messages: 0 [09:33:09] [UNSENT_RETRY] No unsent messages found [09:33:09] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:33:09] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:33:09] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:33:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=4 [09:33:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28824, 28823, 28822, 28821, 28820] [09:33:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:33:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:09] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:33:09] [SCROLL] wasNearBottom=true, threshold=758, offset=4404, contentH=5162, boundsH=758, forceScroll=false [09:33:09] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:33:09] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:33:09] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [09:33:09] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:33:09] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:09] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=7311 vccs=0 [09:33:09] [GAP_FIX] maxMessageIdAtBackground=28824, currentMaxLocalId=28824 [09:33:09] [PUSH] handlePollEventsNotification userInfo: [:] [09:33:09] [PUSH] No message_id in userInfo [09:33:09] [PUSH] No operation_type in userInfo [09:33:09] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:33:09] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28821, 28820, 28819, 28818, 28817, 28816, 28815, 28814, 28813, 28812] [09:33:09] [PUSH_TRACE] 📬 POLL: memory state: count=53, first 10 IDs=[28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:09] [FAST_REFRESH] Already have 53 messages in memory [09:33:09] [FAST_REFRESH] maxMemoryId=28824, maxLocalId=28824 [09:33:09] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:33:09] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:33:09] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:33:09] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [09:33:09] [GAP_FIX] Incremental sync will use since_id=28824 (background max=28824, current DB max=28824) [09:33:09] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [09:33:09] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28824, maxMemoryId=28824 [09:33:09] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28824 [09:33:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:33:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28824, 28823, 28822, 28821, 28820] [09:33:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:33:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:09] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:33:09] [SCROLL] wasNearBottom=true, threshold=758, offset=4404, contentH=5162, boundsH=758, forceScroll=false [09:33:09] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:33:09] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:33:09] [CLIENT_SIG] WebSocket opened [09:33:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:33:09] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:33:09] HELLO → sent (cached token, role=query) [09:33:09] [CLIENT_SIG] Connected! clientId=q05N33mEMmxshJuQ [09:33:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:33:09] [WS] Query connection failed - cleaning up all agent connections and views [09:33:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:33:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:33:09] [CLEANUP] ======================================== [09:33:09] [CLEANUP] Cleaning up all agent connections and views [09:33:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:09] [CLEANUP] Stopped and removed 0 video connections [09:33:09] [CLEANUP] Removed 0 video views [09:33:09] [CLEANUP] Removed 0 feed scroll views [09:33:09] [CLEANUP] Removed 0 status labels [09:33:09] [CLEANUP] Reset agent query state [09:33:09] [CLEANUP] Updated page indicator [09:33:09] [CLEANUP] Rebuilt video layout [09:33:09] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:09] [CLEANUP] ======================================== [09:33:09] [SERVER] Starting reconnect polling (5s interval) [09:33:09] [CLEANUP] ======================================== [09:33:09] [CLEANUP] Cleaning up all agent connections and views [09:33:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:09] [CLEANUP] Stopped and removed 0 video connections [09:33:09] [CLEANUP] Removed 0 video views [09:33:09] [CLEANUP] Removed 0 feed scroll views [09:33:09] [CLEANUP] Removed 0 status labels [09:33:09] [CLEANUP] Reset agent query state [09:33:09] [CLEANUP] Updated page indicator [09:33:09] [CLEANUP] Rebuilt video layout [09:33:09] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:09] [CLEANUP] ======================================== [09:33:09] [SERVER] Starting reconnect polling (5s interval) [09:33:09] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [09:33:09] [FOREGROUND] Enriched 0/3 unsettled messages with readBy data [09:33:09] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=53>53=false, maxId=28824>28824=false, shouldScroll=true [09:33:09] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:33:09] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:33:09] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:33:09] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [09:33:09] [FAST_REFRESH] Enriched 3/3 unsettled messages with readBy data [09:33:09] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [09:33:09] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:33:09] [INCREMENTAL_SYNC] ✅ No new messages [09:33:09] [FAST_REFRESH] Incremental sync complete - 53 messages [09:33:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:33:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28824, 28823, 28822, 28821, 28820] [09:33:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [09:33:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:09] [RELOAD_TAB] 📊 Building chatRows from 53 messages [09:33:09] [SCROLL] wasNearBottom=true, threshold=758, offset=4404, contentH=5162, boundsH=758, forceScroll=true [09:33:09] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [09:33:09] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:33:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:33:09] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [09:33:09] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4404, currentOffset=4404 [09:33:09] [SCROLL] Scrolling to 4404, animated=false [09:33:10] [PIN_AUTH] Correct PIN [09:33:10] [SECURITY] Restored real session: ILUIWU [09:33:10] [SECURITY] Restored real session: ILUIWU [09:33:10] [FAKE_AI] cancel() called, wasRunning=false [09:33:10] [FAKE MODE] Exiting fake mode, restoring real session [09:33:10] [SECURITY] Restored real session: ILUIWU [09:33:10] [SECURITY] Saved real session: ILUIWU [09:33:10] [FAKE MODE] ✅ Restored real session: ILUIWU [09:33:10] [FAKE MODE] Loaded 50 messages (limited to page size) [09:33:10] [READBY_OPT] Fetching readBy for 3 unsettled messages (targeted) [09:33:10] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [09:33:10] [AUTH] Cache had 50 messages, maxExistingId=28824, inserted 0 truly new [09:33:10] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>53=false, maxId=28824>28824=false, shouldScroll=false [09:33:10] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:33:10] [AUTH] UI update complete [09:33:10] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:33:10] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:33:10] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [09:33:10] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [09:33:10] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [09:33:10] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:33:10] [SCROLL] 💓 alive, visible=48...51, rows=52, estHeight=0.0, heightCalls=115 [09:33:10] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:33:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:33:10] [COMBINED_FETCH] Loaded 3 read receipts, 0 messages with reactions [09:33:10] [FAKE MODE] Enriched 3/3 unsettled messages with readBy data [09:33:10] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:33:10] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:33:10] [USER] ✅ User registered successfully [09:33:10] [PUSH] User registration after token update: success [09:33:10] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=4 [09:33:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28824, 28823, 28822, 28821, 28820] [09:33:10] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:33:10] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816, 28815] [09:33:10] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:33:10] [SCROLL] wasNearBottom=true, threshold=447, offset=4443, contentH=4890, boundsH=447, forceScroll=true [09:33:10] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:33:10] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:33:10] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:33:10] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=56 [09:33:10] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4443, currentOffset=4443 [09:33:10] [SCROLL] Scrolling to 4443, animated=false [09:33:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:33:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:33:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:33:11] HELLO → sent (cached token, role=query) [09:33:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:33:11] [WS] Query connection failed - cleaning up all agent connections and views [09:33:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:33:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:33:11] [CLEANUP] ======================================== [09:33:11] [CLEANUP] Cleaning up all agent connections and views [09:33:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:11] [CLEANUP] Stopped and removed 0 video connections [09:33:11] [CLEANUP] Removed 0 video views [09:33:11] [CLEANUP] Removed 0 feed scroll views [09:33:11] [CLEANUP] Removed 0 status labels [09:33:11] [CLEANUP] Reset agent query state [09:33:11] [CLEANUP] Updated page indicator [09:33:11] [CLEANUP] Rebuilt video layout [09:33:11] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:11] [CLEANUP] ======================================== [09:33:11] [SERVER] Starting reconnect polling (5s interval) [09:33:11] [CLEANUP] ======================================== [09:33:11] [CLEANUP] Cleaning up all agent connections and views [09:33:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:11] [CLEANUP] Stopped and removed 0 video connections [09:33:11] [CLEANUP] Removed 0 video views [09:33:11] [CLEANUP] Removed 0 feed scroll views [09:33:11] [CLEANUP] Removed 0 status labels [09:33:11] [CLEANUP] Reset agent query state [09:33:11] [CLEANUP] Updated page indicator [09:33:11] [CLEANUP] Rebuilt video layout [09:33:11] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:11] [CLEANUP] ======================================== [09:33:11] [SERVER] Starting reconnect polling (5s interval) [09:33:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:33:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:33:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:33:12] HELLO → sent (cached token, role=query) [09:33:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:33:12] [WS] Query connection failed - cleaning up all agent connections and views [09:33:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:33:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:33:12] [CLEANUP] ======================================== [09:33:12] [CLEANUP] Cleaning up all agent connections and views [09:33:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:12] [CLEANUP] Stopped and removed 0 video connections [09:33:12] [CLEANUP] Removed 0 video views [09:33:12] [CLEANUP] Removed 0 feed scroll views [09:33:12] [CLEANUP] Removed 0 status labels [09:33:12] [CLEANUP] Reset agent query state [09:33:12] [CLEANUP] Updated page indicator [09:33:12] [CLEANUP] Rebuilt video layout [09:33:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:12] [CLEANUP] ======================================== [09:33:12] [SERVER] Starting reconnect polling (5s interval) [09:33:12] [CLEANUP] ======================================== [09:33:12] [CLEANUP] Cleaning up all agent connections and views [09:33:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:12] [CLEANUP] Stopped and removed 0 video connections [09:33:12] [CLEANUP] Removed 0 video views [09:33:12] [CLEANUP] Removed 0 feed scroll views [09:33:12] [CLEANUP] Removed 0 status labels [09:33:12] [CLEANUP] Reset agent query state [09:33:12] [CLEANUP] Updated page indicator [09:33:12] [CLEANUP] Rebuilt video layout [09:33:12] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:12] [CLEANUP] ======================================== [09:33:12] [SERVER] Starting reconnect polling (5s interval) [09:33:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:33:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:33:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:33:14] HELLO → sent (cached token, role=query) [09:33:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:33:14] [WS] Query connection failed - cleaning up all agent connections and views [09:33:14] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [09:33:14] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [09:33:14] [CLEANUP] ======================================== [09:33:14] [CLEANUP] Cleaning up all agent connections and views [09:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:14] [CLEANUP] Stopped and removed 0 video connections [09:33:14] [CLEANUP] Removed 0 video views [09:33:14] [CLEANUP] Removed 0 feed scroll views [09:33:14] [CLEANUP] Removed 0 status labels [09:33:14] [CLEANUP] Reset agent query state [09:33:14] [CLEANUP] Updated page indicator [09:33:14] [CLEANUP] Rebuilt video layout [09:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:14] [CLEANUP] ======================================== [09:33:14] [SERVER] Starting reconnect polling (5s interval) [09:33:14] [CLEANUP] ======================================== [09:33:14] [CLEANUP] Cleaning up all agent connections and views [09:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:33:14] [CLEANUP] Stopped and removed 0 video connections [09:33:14] [CLEANUP] Removed 0 video views [09:33:14] [CLEANUP] Removed 0 feed scroll views [09:33:14] [CLEANUP] Removed 0 status labels [09:33:14] [CLEANUP] Reset agent query state [09:33:14] [CLEANUP] Updated page indicator [09:33:14] [CLEANUP] Rebuilt video layout [09:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [09:33:14] [CLEANUP] ======================================== [09:33:14] [SERVER] Starting reconnect polling (5s interval) [09:33:15] [MENU] dismissAnyExistingMenu called [09:33:15] [MENU] dismissAnyExistingMenu completed [09:33:15] [SCROLL_BEGIN_DRAG] messagesTable offsetY=4443, insetTop=0, topDistance=4443, rows=52, prefetchedCount=0 [09:33:15] [SCROLL] 💓 alive, visible=48...51, rows=52, estHeight=0.0, heightCalls=57 [09:33:16] [SCROLL_WILL_END] velocity=(0.000, -0.688), currentY=4132, targetY=3793, movingTowardTop=true, decelNow=false, dragging=true [09:33:16] [SCROLL_WILL_END] captured upward momentum velocityY=-0.6879372876127373 [09:33:16] [SCROLL_END_DRAG] messagesTable decelerate=true, offsetY=4132, topInset=0, pendingVelocityY=-0.6879372876127373, targetNearTop=4132 [09:33:16] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= 1212 (only with local thumbnails) [09:53:40] [GALLERY] First 5 after sort (newest first): [09:53:40] [GALLERY] 0: id=28740, date=2026-04-22 16:15:17, file=adbb72082c79fd33.jpg [09:53:40] [GALLERY] 1: id=28734, date=2026-04-22 16:14:41, file=653beabd4db198ba.jpg [09:53:40] [GALLERY] 2: id=28718, date=2026-04-22 12:02:50, file=5a447861140baa5d.jpg [09:53:40] [GALLERY] 3: id=28714, date=2026-04-22 10:16:33, file=e76ecd0d17b4f8dc.jpg [09:53:40] [GALLERY] 4: id=28713, date=2026-04-22 10:12:56, file=55cec5a39e78220e.jpg [09:53:40] [SCROLL] 💓 alive, visible=0...0, rows=0, estHeight=0.0, heightCalls=0 [09:53:40] [SCROLL_BTN] Showing button - 32pt from bottom > half 22pt [09:53:40] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:53:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28825, 28824, 28823, 28822, 28821] [09:53:40] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:53:40] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:53:40] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:53:40] [SCROLL] wasNearBottom=true, threshold=758, offset=0, contentH=64, boundsH=758, forceScroll=true [09:53:40] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:53:40] [EMOJI] ✅ Loaded 451 emoji-to-GIF mappings [09:53:40] [CELL_UPLOAD] configure: msgId=28740, file=adbb72082c79fd33.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=adbb72082c79fd33.jpg, overlayExists=true [09:53:40] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [09:53:40] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:53:40] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28824 → 28825 [09:53:40] [SERVER] Starting reconnect polling (5s interval) [09:53:40] [ICONS] Screen width: 440.0, Tab spacing: 75.5 [09:53:40] [ICONS] Offset applied: -14.6 [09:53:40] [ICONS] New left margin: 11.2, New right margin: 11.3 [09:53:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:53:40] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:53:40] Trying API base: https://crivello.dyndns.org:443/WebRTC/public/ [09:53:40] Token POST → https://crivello.dyndns.org:443/WebRTC/public/new_session.php?sid=iosILUIWU [09:53:40] [COMBINED_FETCH] Loaded 2 read receipts, 0 messages with reactions [09:53:40] [READBY_ENRICH] Enriched 2/2 unsettled messages with readBy data [09:53:40] [ICONS] Chat center: (31.2, 87.0) [09:53:40] [ICONS] Gallery center: (106.7, 87.0), deltaX: 75.5 [09:53:40] [ICONS] Camera center: (182.2, 87.0), deltaX: 75.5 [09:53:40] [ICONS] Settings center: (257.7, 87.0), deltaX: 75.5 [09:53:40] [ICONS] Lock centerX: 333.2, deltaX from Settings: 75.5 [09:53:40] [ICONS] Bell centerX: 408.7, deltaX from Lock: 75.5 [09:53:40] [ICONS] LEFT MARGIN (screen left to Chat left): 11.2 [09:53:40] [ICONS] RIGHT MARGIN (Bell right to screen right): 11.3 [09:53:40] [ICONS] Screen width: 440.0 [09:53:40] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:53:40] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3759, currentOffset=3759 [09:53:40] [SCROLL] Scrolling to 3759, animated=false [09:53:40] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [09:53:40] [PURGE] ⚠️ Media cache purge DISABLED for debugging [09:53:40] [UNSENT_RETRY] Checking for unsent messages... [09:53:40] [UPLOAD_RECOVERY] ========== CHECKING FOR MISSING UPLOADS ========== [09:53:40] [UPLOAD_RECOVERY] User ID: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF [09:53:40] [UPLOAD_RECOVERY] Session: ILUIWU [09:53:40] [UPLOAD_RECOVERY] ✅ No stuck uploads found [09:53:40] [UPLOAD_RECOVERY] Checking recent media messages on server... [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28718, file=5a447861140baa5d.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28714, file=e76ecd0d17b4f8dc.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28713, file=55cec5a39e78220e.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28702, file=7035e780531e78e1.mp4, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28699, file=2f5ae78d2850faab.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28640, file=f2317109ac17cc77.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28628, file=0d1b02a5c4f3382f.mp4, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28626, file=4d9299b5e3f3a7b2.mp4, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28623, file=b68d406973c2b694.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28617, file=4804eb8220be9527.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28518, file=3d48ecdbf17858a0.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] 📋 Recent media: msgId=28504, file=df692a622eff9fa3.jpg, upload_status=complete [09:53:40] [UPLOAD_RECOVERY] Verifying 12 media files exist on server... [09:53:40] [PENDING_UPLOAD] Total pending upload messages: 0 [09:53:40] [UNSENT_RETRY] No unsent messages found [09:53:40] new_session POST ok: token len=157 [09:53:40] HELLO → sent (fetched token, role=query) [09:53:40] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [09:53:40] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [09:53:40] [SIG] hello_ok received for query connection - ready to query agents [09:53:40] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [09:53:40] [SIG] get_agents request sent for sessionId=ILUIWU [09:53:40] [SIG] get_agents request sent for sessionId=iosILUIWU [09:53:40] [SERVER] Stopped reconnect polling [09:53:40] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:53:40] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [09:53:40] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [09:53:40] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:53:40] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [09:53:40] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [09:53:40] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [09:53:40] [SERVER] Starting reconnect polling (5s interval) [09:53:40] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=68 [09:53:40] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28825, 28824, 28823, 28822, 28821] [09:53:40] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [09:53:40] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:53:40] [RELOAD_TAB] 📊 Building chatRows from 50 messages [09:53:40] [SCROLL] wasNearBottom=true, threshold=758, offset=3759, contentH=4517, boundsH=758, forceScroll=true [09:53:40] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [09:53:40] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:53:40] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:53:40] [UPLOAD_RECOVERY] ✅ All media files verified on server [09:53:40] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [09:53:40] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3759, currentOffset=3759 [09:53:40] [SCROLL] Scrolling to 3759, animated=false [09:53:42] [PUSH] Silent push received [09:53:42] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:53:42 +0000, appState=0, message_id=nil, type=nil [09:53:42] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [09:53:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:53:42 +0000 [09:53:42] [PUSH_EMBED] No embedded message_data in notification [09:53:42] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:53:42] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [09:53:42] [PUSH] No embedded data, pre-loading messages from server [09:53:42] [PUSH_PRELOAD] Fetching messages for instant display cache [09:53:42] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:53:42] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:53:42] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:53:42] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:53:42] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:53:42] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:53:42] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:53:42] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [09:53:42] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [09:53:42] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:53:42] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:53:42] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:53:42] [GAP_FIX] maxMessageIdAtBackground=0, currentMaxLocalId=28825 [09:53:42] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28825, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [09:53:42] [PUSH] Parsed message_id: 28825 [09:53:42] [PUSH] Parsed operation_type: 3 [09:53:42] [PUSH] Taking direct action: opType=3, messageId=28825 [09:53:42] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28825 [09:53:43] [LIFECYCLE] App resigning active - cleared crash flag [09:53:43] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [09:53:43] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:53:43] [SECURITY] Saved background timestamp [09:53:43] [LIFECYCLE] App entering background - cleared crash flag [09:53:43] [CLIENT_SIG] Disconnecting [09:53:43] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:53:43] [DB] ✅ Chat database flushed (WAL checkpoint) before background [09:53:43] [PUSH_TRACE] 💤 BACKGROUND: memory has 50 messages, first 10 IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:53:43] [LIFECYCLE] Background snapshot: count=50, maxId=28825 [09:53:43] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:53:43] [WS] Canceling WebSocket for query connection to iosILUIWU [09:53:43] In cleanupPeer [09:53:43] In cleanupPeer [09:53:43] [LIFECYCLE] WebRTC audio disabled [09:53:43] [LIFECYCLE] AVAudioSession deactivated [09:53:43] [LIFECYCLE] All connections stopped [09:53:44] [CLIENT_SIG] WebSocket closed with code 1001 [09:53:44] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:53:44] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:53:44] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:53:44] [SERVER] Stopped reconnect polling [09:53:44] Will request stop of video 0 [09:53:44] Will request stop of video 0 [09:53:44] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:53:44] [WS] Query connection error - cleaning up all agent connections and views [09:53:44] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:53:44] [WS] Query connection failed - cleaning up all agent connections and views [09:53:44] [PIP] Removing 0 tracks from PiP for connection 0 [09:53:44] [PIP] ✅ All tracks removed for connection 0 [09:53:44] [PIP] Removing 0 tracks from PiP for connection 0 [09:53:44] [PIP] ✅ All tracks removed for connection 0 [09:53:44] [CLEANUP] ======================================== [09:53:44] [CLEANUP] Cleaning up all agent connections and views [09:53:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:53:44] [CLEANUP] Stopped and removed 0 video connections [09:53:44] [CLEANUP] Removed 0 video views [09:53:44] [CLEANUP] Removed 0 feed scroll views [09:53:44] [CLEANUP] Removed 0 status labels [09:53:44] [CLEANUP] Reset agent query state [09:53:44] [CLEANUP] Updated page indicator [09:53:44] [CLEANUP] Rebuilt video layout [09:53:44] [CLEANUP] ✅ All agent connections and views cleaned up [09:53:44] [CLEANUP] ======================================== [09:53:44] [SERVER] Skipping reconnect polling - app is in background [09:53:44] [WS] URLSession invalidated successfully [09:53:44] [CLEANUP] ======================================== [09:53:44] [CLEANUP] Cleaning up all agent connections and views [09:53:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:53:44] [CLEANUP] Stopped and removed 0 video connections [09:53:44] [CLEANUP] Removed 0 video views [09:53:44] [CLEANUP] Removed 0 feed scroll views [09:53:44] [CLEANUP] Removed 0 status labels [09:53:44] [CLEANUP] Reset agent query state [09:53:44] [CLEANUP] Updated page indicator [09:53:44] [CLEANUP] Rebuilt video layout [09:53:44] [CLEANUP] ✅ All agent connections and views cleaned up [09:53:44] [CLEANUP] ======================================== [09:53:44] [SERVER] Skipping reconnect polling - app is in background [09:54:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:54:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:54:04] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:04] [PUSH] Silent push received [09:54:04] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:04 +0000, appState=2, message_id=28826, type=nil [09:54:04] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:54:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:04 +0000 [09:54:04] [PUSH_TRACE] ⬇️ Processing embedded message_id=28826 [09:54:04] [PUSH_EMBED] 📩 Received embedded message: id=28826, type=0, sender=Esra [09:54:04] [PUSH_TRACE] ⬇️ Message details: text="Baby, Im getting notifications even I muted in app...", datesent=2026-04-23 07:54:03 [09:54:04] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:54:04] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28826 [09:54:04] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28826 [09:54:04] [PUSH_EMBED] ✅ Saved message 28826 to local DB (sync) [09:54:04] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28826 [09:54:04] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28826 [09:54:04] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28826 [09:54:04] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:54:04] [PUSH_EMBED] Inserted message 28826 into existing cache (now 51 messages) [09:54:04] [PUSH_TRACE] 📦 ✅ Inserted message 28826, cache now has IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [PUSH_TRACE] 📦 EXITING cache update queue for message 28826 [09:54:04] [PUSH_EMBED] Fetching evolution data for message 28826 in background [09:54:04] [PUSH_EMBED] ✅ Fully processed message 28826 [09:54:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28826 [09:54:04] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817], handled=true [09:54:04] [PUSH] Embedded message handled instantly from silent push [09:54:04] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [09:54:04] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28826 [09:54:04] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [09:54:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 50 msgs, IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:54:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:54:04] [GAP_FIX] maxMessageIdAtBackground=28825, currentMaxLocalId=28826 [09:54:04] [PUSH] handlePollEventsNotification userInfo: [:] [09:54:04] [PUSH] No message_id in userInfo [09:54:04] [PUSH] No operation_type in userInfo [09:54:04] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:54:04] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [PUSH_TRACE] 📬 POLL: memory state: count=50, first 10 IDs=[28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817, 28816] [09:54:04] [FAST_REFRESH] Already have 50 messages in memory [09:54:04] [FAST_REFRESH] maxMemoryId=28825, maxLocalId=28826 [09:54:04] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28825) [09:54:04] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 51 total) [09:54:04] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:54:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:04] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:54:04] [READBY_OPT] Fetching readBy for 2 unsettled messages (targeted) [09:54:04] [GAP_FIX] Incremental sync will use since_id=28825 (background max=28825, current DB max=28826) [09:54:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:54:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28825, maxMemoryId=28826 [09:54:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28825 [09:54:04] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:54:04] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:54:04] [PUSH_TRACE] 👁️ Received message id=28826, text="Baby, Im getting notifications..." [09:54:04] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:54:04] [PUSH_UI] Message 28826 already in memory - skipping insert [09:54:04] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:54:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:54:04] [GAP_FIX] maxMessageIdAtBackground=28825, currentMaxLocalId=28826 [09:54:04] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:54:03"; "file_name" = ""; "is_encrypted" = 0; message = "Baby, Im getting notifications even I muted in app. Same for you?"; "message_id" = 28826; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28825; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): Esra, AnyHashable("datesent"): 2026-04-23 07:54:03, AnyHashable("message_id"): 28826, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("thumb_file_name"): , AnyHashable("timer"): 0, AnyHashable("message"): Baby, Im getting notifications even I muted in app. Same for you?, AnyHashable("session_id"): ILUIWU, AnyHashable("message_type"): 0, AnyHashable("file_name"): , AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }] [09:54:04] [PUSH_EMBED_VC] Message 28826 already in memory - skipping [09:54:04] [PUSH] ⚡ Embedded message handled directly in ViewController [09:54:04] [PUSH] Parsed message_id: 28826 [09:54:04] [PUSH] Parsed operation_type: 0 [09:54:04] [PUSH] Taking direct action: opType=0, messageId=28826 [09:54:04] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28826 [09:54:04] [PUSH] ⚡ Message 28826 already in memory - skipping duplicate notification entirely [09:54:04] [GAP_FIX] Post-action sync: using background max 28825 to catch coalesced messages [09:54:04] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:54:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:54:04] [CLIENT_SIG] WebSocket opened [09:54:04] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:54:04] HELLO → sent (cached token, role=query) [09:54:04] [PUSH_EMBED] Got evolution data for message 28826, saving to local DB [09:54:04] [CLIENT_SIG] Connected! clientId=Bu7Joj0G5UYnSfWD [09:54:04] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [09:54:04] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [09:54:04] [SIG] hello_ok received for query connection - ready to query agents [09:54:04] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [09:54:04] [SIG] get_agents request sent for sessionId=ILUIWU [09:54:04] [SIG] get_agents request sent for sessionId=iosILUIWU [09:54:04] [SERVER] Stopped reconnect polling [09:54:04] [PUSH_EMBED] Saved evolution data for message 28826 [09:54:04] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:54:04] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [09:54:04] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:54:04] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:54:04] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:04] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [09:54:04] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:54:04] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [09:54:04] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [09:54:04] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [09:54:04] [SERVER] Skipping reconnect polling - app is in background [09:54:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [09:54:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28826, 28825, 28824, 28823, 28822] [09:54:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:54:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:54:04] [SCROLL] wasNearBottom=true, threshold=758, offset=3759, contentH=4517, boundsH=758, forceScroll=false [09:54:04] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:54:04] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:54:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28826] [09:54:04] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:04] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:54:04] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28825 → 28826 [09:54:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:54:04] [COMBINED_FETCH] Loaded 2 read receipts, 0 messages with reactions [09:54:04] [FAST_REFRESH] Enriched 2/2 unsettled messages with readBy data [09:54:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:54:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:04] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:54:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:54:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28826, maxMemoryId=28826 [09:54:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28826 [09:54:04] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=3832, currentOffset=3759 [09:54:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:04] [FAST_REFRESH] Incremental sync complete - 51 messages [09:54:05] [INCREMENTAL_SYNC] ✅ No new messages [09:54:05] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:54:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28826, 28825, 28824, 28823, 28822] [09:54:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:54:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:05] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:54:05] [SCROLL] wasNearBottom=true, threshold=758, offset=3759, contentH=4590, boundsH=758, forceScroll=false [09:54:05] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:54:05] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [09:54:05] [PUSH] Silent push received [09:54:05] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:05 +0000, appState=2, message_id=nil, type=nil [09:54:05] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:05 +0000 [09:54:05] [PUSH_EMBED] No embedded message_data in notification [09:54:05] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:54:05] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817], handled=false [09:54:05] [PUSH] No embedded data, pre-loading messages from server [09:54:05] [PUSH_PRELOAD] Fetching messages for instant display cache [09:54:06] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:54:06] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:54:06] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:54:06] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:54:06] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:54:06] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:54:06] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28735] [09:54:06] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28735] [09:54:06] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [09:54:06] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:54:06] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:54:06] [GAP_FIX] maxMessageIdAtBackground=28825, currentMaxLocalId=28826 [09:54:06] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28826, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [09:54:06] [PUSH] Parsed message_id: 28826 [09:54:06] [PUSH] Parsed operation_type: 3 [09:54:06] [PUSH] Taking direct action: opType=3, messageId=28826 [09:54:06] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28826 [09:54:06] [GAP_FIX] Post-action sync: using background max 28825 to catch coalesced messages [09:54:06] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:54:06] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28825, maxMemoryId=28826 [09:54:06] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28825 [09:54:06] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:54:06] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28826] [09:54:06] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:54:06] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:06] [CLIENT_SIG] Event received: type=3 messageId=28826 [09:54:06] [WS_EVENT] Received event: type=3, messageId=28826 [09:54:06] [WS_EVENT] Read receipt for message 28826 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:06] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:54:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28826, 28825, 28824, 28823, 28822] [09:54:06] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:54:06] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:06] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:54:06] [SCROLL] wasNearBottom=true, threshold=758, offset=3759, contentH=4590, boundsH=758, forceScroll=false [09:54:06] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:54:06] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:06] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:54:06] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [09:54:06] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=3832, currentOffset=3759 [09:54:06] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [09:54:06] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [09:54:07] [PUSH] Notification tapped - session_id: ILUIWU [09:54:07] [PUSH] Max message_id before tap: 28826 [09:54:07] [PUSH] Stored pending session: ILUIWU [09:54:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:07 +0000 [09:54:07] [PUSH_TRACE] ⬇️ Processing embedded message_id=28826 [09:54:07] [PUSH_EMBED] 📩 Received embedded message: id=28826, type=0, sender=Esra [09:54:07] [PUSH_TRACE] ⬇️ Message details: text="Baby, Im getting notifications even I muted in app...", datesent=2026-04-23 07:54:03 [09:54:07] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [09:54:07] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28826 [09:54:07] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28826 [09:54:07] [PUSH_EMBED] ✅ Saved message 28826 to local DB (sync) [09:54:07] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28826 [09:54:07] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28826 [09:54:07] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28826 [09:54:07] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:07] [PUSH_TRACE] 📦 ⚠️ Message 28826 already in cache, skipping insert [09:54:07] [PUSH_TRACE] 📦 EXITING cache update queue for message 28826 [09:54:07] [PUSH_EMBED] Fetching evolution data for message 28826 in background [09:54:07] [PUSH_EMBED] ✅ Fully processed message 28826 [09:54:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28826 [09:54:07] [PUSH] Embedded message handled instantly on tap [09:54:07] [SECURITY] Timeout check: elapsed=23.997786045074463s, timeout=300.0s [09:54:07] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [09:54:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [09:54:07] [LIFECYCLE] App entering foreground - restoring connections [09:54:07] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [09:54:07] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [09:54:07] [PUSH_TRACE] 🔄 FOREGROUND: memory has 51 msgs, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:07] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:07] [UPLOAD_RETRY] No pending uploads to retry [09:54:07] [PUSH] Fetching server messages since_id=28826 to catch coalesced notifications on tap [09:54:07] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28826 to catch coalesced notifications [09:54:07] [PUSH_PRELOAD] Fetching messages for instant display cache [09:54:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:07] [READBY_OPT] Fetching readBy for 2 unsettled messages (targeted) [09:54:07] [LIFECYCLE] WebRTC audio re-enabled [09:54:07] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [09:54:07] [CLIENT_SIG] Skipping connect - app in background (state=2) [09:54:07] [VIEWER] Reconnecting after background - querying agents [09:54:07] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=running [09:54:07] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [09:54:07] [UNSENT_RETRY] Checking for unsent messages... [09:54:07] [PENDING_UPLOAD] Total pending upload messages: 0 [09:54:07] [UNSENT_RETRY] No unsent messages found [09:54:07] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [09:54:07] [PUSH_TRACE] 👁️ handlePushMessageReceived START [09:54:07] [PUSH_TRACE] 👁️ Received message id=28826, text="Baby, Im getting notifications..." [09:54:07] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [09:54:07] [PUSH_UI] Message 28826 already in memory - skipping insert [09:54:07] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [09:54:07] [PUSH_EMBED] Got evolution data for message 28826, saving to local DB [09:54:07] [PUSH_EMBED] Saved evolution data for message 28826 [09:54:07] [COMBINED_FETCH] Loaded 2 read receipts, 0 messages with reactions [09:54:07] [FOREGROUND] Enriched 0/2 unsettled messages with readBy data [09:54:07] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=51>50=true, maxId=28826>28825=true, shouldScroll=true [09:54:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:08] [PUSH_PRELOAD] No messages or parse error [09:54:08] [PUSH] Server fetch on tap completed (success=false) [09:54:08] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:54:08] [GAP_FIX] maxMessageIdAtBackground=28825, currentMaxLocalId=28826 [09:54:08] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Baby, Im getting notifications even I muted in app. Same for you?, AnyHashable("operation_type"): 0, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28826, AnyHashable("datesent"): 2026-04-23 07:54:03, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 07:54:03"; "file_name" = ""; "is_encrypted" = 0; message = "Baby, Im getting notifications even I muted in app. Same for you?"; "message_id" = 28826; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28825; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): ] [09:54:08] [PUSH_EMBED_VC] Message 28826 already in memory - skipping [09:54:08] [PUSH] ⚡ Embedded message handled directly in ViewController [09:54:08] [PUSH] Parsed message_id: 28826 [09:54:08] [PUSH] Parsed operation_type: 0 [09:54:08] [PUSH] Taking direct action: opType=0, messageId=28826 [09:54:08] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28826 [09:54:08] [PUSH] ⚡ Message 28826 already in memory - skipping duplicate notification entirely [09:54:08] [GAP_FIX] Post-action sync: using background max 28825 to catch coalesced messages [09:54:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28825, maxMemoryId=28826 [09:54:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28825 [09:54:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28826] [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:54:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:08] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=62 [09:54:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28826, 28825, 28824, 28823, 28822] [09:54:08] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:54:08] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:54:08] [SCROLL] wasNearBottom=true, threshold=758, offset=3759, contentH=4590, boundsH=758, forceScroll=true [09:54:08] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:54:08] [SCROLL] 💓 alive, visible=45...52, rows=53, estHeight=0.0, heightCalls=0 [09:54:08] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:08] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:54:08] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [09:54:08] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3832, currentOffset=3832 [09:54:08] [SCROLL] Scrolling to 3832, animated=false [09:54:08] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [09:54:08] [SECURITY] Within timeout - cleared background flag [09:54:08] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [09:54:08] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=0 secsSinceLastPong=-1 vccs=0 [09:54:08] [GAP_FIX] maxMessageIdAtBackground=28825, currentMaxLocalId=28826 [09:54:08] [PUSH] handlePollEventsNotification userInfo: [:] [09:54:08] [PUSH] No message_id in userInfo [09:54:08] [PUSH] No operation_type in userInfo [09:54:08] [FAST_REFRESH] Evolution disabled - performing incremental sync [09:54:08] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [FAST_REFRESH] Already have 51 messages in memory [09:54:08] [FAST_REFRESH] maxMemoryId=28826, maxLocalId=28826 [09:54:08] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [09:54:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:08] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [09:54:08] [READBY_OPT] Fetching readBy for 2 unsettled messages (targeted) [09:54:08] [GAP_FIX] Incremental sync will use since_id=28825 (background max=28825, current DB max=28826) [09:54:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28825, maxMemoryId=28826 [09:54:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28825 [09:54:08] [COMBINED_FETCH] Loaded 2 read receipts, 0 messages with reactions [09:54:08] [FAST_REFRESH] Enriched 2/2 unsettled messages with readBy data [09:54:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28826] [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:54:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [09:54:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [09:54:08] [FAST_REFRESH] Incremental sync complete - 51 messages [09:54:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [09:54:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28826, 28825, 28824, 28823, 28822] [09:54:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [09:54:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:09] [RELOAD_TAB] 📊 Building chatRows from 51 messages [09:54:09] [SCROLL] wasNearBottom=true, threshold=758, offset=3832, contentH=4590, boundsH=758, forceScroll=true [09:54:09] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [09:54:09] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:09] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:54:09] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [09:54:09] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3832, currentOffset=3832 [09:54:09] [SCROLL] Scrolling to 3832, animated=false [09:54:11] [SCROLL] 💓 alive, visible=45...52, rows=53, estHeight=0.0, heightCalls=61 [09:54:24] [CAM_CONN] 💓 PING #1 sent — conn=iosILUIWU query=true secsSinceLastPong=-1 [09:54:24] [CAM_CONN] 💓 PONG #1 received — conn=iosILUIWU query=true rtt=44ms [09:54:26] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [09:54:26] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=51, isReloading=false [09:54:26] [SEND_MESSAGE] ✅ Added optimistic message id=-1 to arrays, newMsgCount=52 [09:54:26] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [09:54:26] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[-1, 28826, 28825, 28824, 28823] [09:54:26] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:54:26] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-1, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:26] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:54:26] [SCROLL] wasNearBottom=true, threshold=429, offset=4143, contentH=4590, boundsH=429, forceScroll=false [09:54:26] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:54:26] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [09:54:26] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [09:54:27] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [09:54:27] [SCROLL] 💓 alive, visible=47...53, rows=54, estHeight=0.0, heightCalls=114 [09:54:27] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [09:54:27] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [09:54:27] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4241, currentOffset=4241 [09:54:27] [SCROLL] Scrolling to 4241, animated=true [09:54:27] [CLIENT_SIG] Event received: type=0 messageId=28827 [09:54:27] [WS_EVENT] Received event: type=0, messageId=28827 [09:54:27] [WS_EVENT] 📨 New message notification (msgId=28827) - triggering incremental refresh, currentMsgCount=52 [09:54:27] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:54:27] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28826, maxMemoryId=28826 [09:54:27] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28826 [09:54:27] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28827,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 07:54:27"} [09:54:27] [CHAT] receive_message.php JSON: ["message_id": 28827, "message_type": 0, "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-04-23 07:54:27, "file_name": ] [09:54:27] [DB_UPGRADE] Upgrading message ID: -1 → 28827, preserveOriginalDate=false [09:54:27] [DB_UPGRADE] ✅ Upgraded -1 → 28827 with send_status=0, 1 row(s) affected [09:54:27] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -1 → 28827 [09:54:27] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -1 → 28827 [09:54:27] ReloadData 9 [09:54:27] [INCREMENTAL_SYNC] ✅ Found 1 new messages [09:54:27] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28827] [09:54:27] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:27] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:27] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [09:54:27] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [09:54:27] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=52 [09:54:27] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [09:54:27] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28827, 28826, 28825, 28824, 28823] [09:54:27] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [09:54:27] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:27] [RELOAD_TAB] 📊 Building chatRows from 52 messages [09:54:27] [SCROLL] wasNearBottom=true, threshold=447, offset=4241, contentH=4688, boundsH=447, forceScroll=true [09:54:27] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [09:54:27] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [09:54:27] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4241, currentOffset=4241 [09:54:27] [SCROLL] Scrolling to 4241, animated=false [09:54:27] [LIFECYCLE] App resigning active - cleared crash flag [09:54:28] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [09:54:28] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [09:54:28] [SECURITY] Saved background timestamp [09:54:28] [LIFECYCLE] App entering background - cleared crash flag [09:54:28] [CLIENT_SIG] Disconnecting [09:54:28] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [09:54:28] [DB] ✅ Chat database flushed (WAL checkpoint) before background [09:54:28] [PUSH_TRACE] 💤 BACKGROUND: memory has 52 messages, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:28] [LIFECYCLE] Background snapshot: count=52, maxId=28827 [09:54:28] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=0 [09:54:28] [WS] Canceling WebSocket for query connection to iosILUIWU [09:54:28] In cleanupPeer [09:54:28] In cleanupPeer [09:54:28] [LIFECYCLE] WebRTC audio disabled [09:54:28] [LIFECYCLE] AVAudioSession deactivated [09:54:28] [LIFECYCLE] All connections stopped [09:54:28] [CLIENT_SIG] WebSocket closed with code 1001 [09:54:28] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [09:54:28] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [09:54:28] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [09:54:28] [SERVER] Stopped reconnect polling [09:54:28] Will request stop of video 0 [09:54:28] Will request stop of video 0 [09:54:28] [WS] WebSocket task completed with error - isQueryOnly=true: cancelled [09:54:28] [WS] Query connection error - cleaning up all agent connections and views [09:54:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [09:54:28] [WS] Query connection failed - cleaning up all agent connections and views [09:54:28] [PIP] Removing 0 tracks from PiP for connection 0 [09:54:28] [PIP] ✅ All tracks removed for connection 0 [09:54:28] [PIP] Removing 0 tracks from PiP for connection 0 [09:54:28] [PIP] ✅ All tracks removed for connection 0 [09:54:28] [CLEANUP] ======================================== [09:54:28] [CLEANUP] Cleaning up all agent connections and views [09:54:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:54:28] [CLEANUP] Stopped and removed 0 video connections [09:54:28] [CLEANUP] Removed 0 video views [09:54:28] [CLEANUP] Removed 0 feed scroll views [09:54:28] [CLEANUP] Removed 0 status labels [09:54:28] [CLEANUP] Reset agent query state [09:54:28] [CLEANUP] Updated page indicator [09:54:28] [CLEANUP] Rebuilt video layout [09:54:28] [CLEANUP] ✅ All agent connections and views cleaned up [09:54:28] [CLEANUP] ======================================== [09:54:28] [WS] URLSession invalidated successfully [09:54:28] [CLEANUP] ======================================== [09:54:28] [CLEANUP] Cleaning up all agent connections and views [09:54:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [09:54:28] [CLEANUP] Stopped and removed 0 video connections [09:54:28] [CLEANUP] Removed 0 video views [09:54:28] [CLEANUP] Removed 0 feed scroll views [09:54:28] [CLEANUP] Removed 0 status labels [09:54:28] [CLEANUP] Reset agent query state [09:54:28] [CLEANUP] Updated page indicator [09:54:28] [CLEANUP] Rebuilt video layout [09:54:28] [CLEANUP] ✅ All agent connections and views cleaned up [09:54:28] [CLEANUP] ======================================== [09:54:28] [SERVER] Skipping reconnect polling - app is in background [09:54:34] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [09:54:34] [WS] Opening session at ws://crivello.dyndns.org:8081/ [09:54:34] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:34] [PUSH] Silent push received [09:54:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:34 +0000, appState=2, message_id=nil, type=nil [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:34 +0000 [09:54:34] [PUSH_EMBED] No embedded message_data in notification [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817], handled=false [09:54:34] [PUSH] No embedded data, pre-loading messages from server [09:54:34] [PUSH_PRELOAD] Fetching messages for instant display cache [09:54:34] [PUSH] Silent push received [09:54:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:34 +0000, appState=2, message_id=nil, type=nil [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:34 +0000 [09:54:34] [PUSH_EMBED] No embedded message_data in notification [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817], handled=false [09:54:34] [PUSH] No embedded data, pre-loading messages from server [09:54:34] [PUSH_PRELOAD] Fetching messages for instant display cache [09:54:34] [PUSH] Silent push received [09:54:34] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 07:54:34 +0000, appState=2, message_id=nil, type=nil [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 07:54:34 +0000 [09:54:34] [PUSH_EMBED] No embedded message_data in notification [09:54:34] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [09:54:34] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817], handled=false [09:54:34] [PUSH] No embedded data, pre-loading messages from server [09:54:34] [PUSH_PRELOAD] Fetching messages for instant display cache [09:54:34] [CLIENT_SIG] WebSocket opened [09:54:34] [CLIENT_SIG] HELLO sent as client for session ILUIWU [09:54:34] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [09:54:34] HELLO → sent (cached token, role=query) [09:54:34] [CLIENT_SIG] Connected! clientId=AQE6x-O2H7B-Xc5z [09:54:34] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [09:54:34] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:54:34] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [09:54:34] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [09:54:34] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [09:54:34] [SIG] hello_ok received for query connection - ready to query agents [09:54:34] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [09:54:34] [SIG] get_agents request sent for sessionId=ILUIWU [09:54:34] [SIG] get_agents request sent for sessionId=iosILUIWU [09:54:34] [SERVER] Stopped reconnect polling [09:54:34] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:54:34] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [09:54:34] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [09:54:34] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [09:54:34] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [09:54:34] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [09:54:34] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [09:54:34] [SERVER] Skipping reconnect polling - app is in background [09:54:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:54:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:54:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:54:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:54:34] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:54:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:54:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818, 28817] [09:54:34] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [09:54:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [09:54:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:34] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:54:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:54:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [09:54:34] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28827 [09:54:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28822] [09:54:34] [PUSH] Parsed message_id: 28822 [09:54:34] [PUSH] Parsed operation_type: 3 [09:54:34] [PUSH] Taking direct action: opType=3, messageId=28822 [09:54:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28822 [09:54:34] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [09:54:34] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:54:34] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [09:54:34] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [09:54:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:54:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:54:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:54:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:54:35] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:54:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:54:35] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [09:54:35] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [09:54:35] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [09:54:35] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [09:54:35] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [09:54:35] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [09:54:35] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [09:54:35] [INCREMENTAL_SYNC] ✅ No new messages [09:54:35] [CLIENT_SIG] Event received: type=3 messageId=28822 [09:54:35] [WS_EVENT] Received event: type=3, messageId=28822 [09:54:35] [WS_EVENT] Read receipt for message 28822 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:54:35] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [09:54:35] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28827 [09:54:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28827, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3] [09:54:35] [PUSH] Parsed message_id: 28827 [09:54:35] [PUSH] Parsed operation_type: 3 [09:54:35] [PUSH] Taking direct action: opType=3, messageId=28827 [09:54:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28827 [09:54:35] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [09:54:35] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:54:35] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [09:54:35] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=1 secsSinceLastPong=10 vccs=0 [09:54:35] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28827 [09:54:35] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28823] [09:54:35] [PUSH] Parsed message_id: 28823 [09:54:35] [PUSH] Parsed operation_type: 3 [09:54:35] [PUSH] Taking direct action: opType=3, messageId=28823 [09:54:35] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28823 [09:54:35] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [09:54:35] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [09:54:35] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [09:54:35] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [09:54:35] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [09:54:35] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [09:54:35] [CLIENT_SIG] Event received: type=3 messageId=28823 [09:54:35] [WS_EVENT] Received event: type=3, messageId=28823 [09:54:35] [WS_EVENT] Read receipt for message 28823 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [09:54:35] [INCREMENTAL_SYNC] ✅ No new messages [09:54:35] [CLIENT_SIG] Event received: type=3 messageId=28827 [09:54:35] [WS_EVENT] Received event: type=3, messageId=28827 [09:54:35] [WS_EVENT] Read receipt for message 28827 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:02:35] [NETWORK] Status changed: connected [10:02:35] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:02:35] [BACKGROUND] Background fetch triggered [10:02:35] [BACKGROUND] Fetching recent messages for pre-cache [10:02:35] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [10:02:35] [WS] Query connection failed - cleaning up all agent connections and views [10:02:35] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [10:02:35] [WS] Query connection error - cleaning up all agent connections and views [10:02:35] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [10:02:35] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:02:35] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <3D4BBBEA-2EF8-4115-BC2B-50234DA21069>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <3D4BBBEA-2EF8-4115-BC2B-50234DA21069>.<1>} [10:02:35] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:02:35] [CLIENT_SIG] Send error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [10:02:35] [CLEANUP] ======================================== [10:02:35] [CLEANUP] Cleaning up all agent connections and views [10:02:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:02:35] [CLEANUP] Stopped and removed 0 video connections [10:02:35] [CLEANUP] Removed 0 video views [10:02:35] [CLEANUP] Removed 0 feed scroll views [10:02:35] [CLEANUP] Removed 0 status labels [10:02:35] [CLEANUP] Reset agent query state [10:02:35] [CLEANUP] Updated page indicator [10:02:35] [CLEANUP] Rebuilt video layout [10:02:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:02:35] [CLEANUP] ======================================== [10:02:35] [SERVER] Skipping reconnect polling - app is in background [10:02:35] [CLEANUP] ======================================== [10:02:35] [CLEANUP] Cleaning up all agent connections and views [10:02:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:02:35] [CLEANUP] Stopped and removed 0 video connections [10:02:35] [CLEANUP] Removed 0 video views [10:02:35] [CLEANUP] Removed 0 feed scroll views [10:02:35] [CLEANUP] Removed 0 status labels [10:02:35] [CLEANUP] Reset agent query state [10:02:35] [CLEANUP] Updated page indicator [10:02:35] [CLEANUP] Rebuilt video layout [10:02:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:02:35] [CLEANUP] ======================================== [10:02:35] [SERVER] Skipping reconnect polling - app is in background [10:02:36] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [10:02:36] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:02:36] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:02:36] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:02:36] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:02:36] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:02:36] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:02:36] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:02:36] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [10:02:36] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [10:02:36] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:02:36] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [10:02:36] [BACKGROUND] Pre-downloaded 0 thumbnails [10:02:36] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [10:02:37] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:02:37] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:02:37] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:02:37] HELLO → sent (cached token, role=query) [10:02:37] [WS] 💓 Started ping heartbeat (20s) — isQueryOnly=true, connectionStr=iosILUIWU [10:02:37] [CAM_CONN] ✅ hello_ok — conn=iosILUIWU role=query serverSid=iosILUIWU query=true agentOnlineFlag=false [10:02:37] [SIG] hello_ok received for query connection - ready to query agents [10:02:37] [CAM_CONN] 🔎 onQueryHelloOk — sending get_agents for base=ILUIWU and iOS=iosILUIWU via conn=iosILUIWU [10:02:37] [SIG] get_agents request sent for sessionId=ILUIWU [10:02:37] [SIG] get_agents request sent for sessionId=iosILUIWU [10:02:37] [SERVER] Stopped reconnect polling [10:02:37] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:02:37] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=2 accumulated=0 tab=0 [10:02:37] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=1 [10:02:37] [CAM_CONN] 📋 agents_list — count=0 via=iosILUIWU agents=[] [10:02:37] [CAM_CONN] ▶️ handleAgentsList ENTER count=0 pendingQueries=1 accumulated=0 tab=0 [10:02:37] [CAM_CONN] 📥 handleAgentsList accumulated=0, remaining=0 [10:02:37] [CAM_CONN] 🧮 handleAgentsList processing 0 accumulated agents [10:02:37] [SERVER] Skipping reconnect polling - app is in background [10:10:45] [CAM_CONN] 💓 PING #2 sent — conn=iosILUIWU query=true secsSinceLastPong=980 [10:10:45] [CAM_CONN] ⚠️ ZOMBIE SUSPECTED — no pong in 980s, conn=iosILUIWU query=true [10:10:45] [BACKGROUND] Background fetch triggered [10:10:45] [BACKGROUND] Fetching recent messages for pre-cache [10:10:45] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:10:45] [NETWORK] Status changed: connected [10:10:45] [WS] Connection failed: The operation couldn’t be completed. Software caused connection abort [10:10:45] [WS] Query connection failed - cleaning up all agent connections and views [10:10:45] [WS] WebSocket task completed with error - isQueryOnly=true: The operation couldn’t be completed. Software caused connection abort [10:10:45] [WS] Query connection error - cleaning up all agent connections and views [10:10:45] [CLEANUP] ======================================== [10:10:45] [CLEANUP] Cleaning up all agent connections and views [10:10:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:10:45] [CLEANUP] Stopped and removed 0 video connections [10:10:45] [CLEANUP] Removed 0 video views [10:10:45] [CLEANUP] Removed 0 feed scroll views [10:10:45] [CLEANUP] Removed 0 status labels [10:10:45] [CLEANUP] Reset agent query state [10:10:45] [CLEANUP] Updated page indicator [10:10:45] [CLEANUP] Rebuilt video layout [10:10:45] [CLEANUP] ✅ All agent connections and views cleaned up [10:10:45] [CLEANUP] ======================================== [10:10:45] [SERVER] Skipping reconnect polling - app is in background [10:10:45] [CLEANUP] ======================================== [10:10:45] [CLEANUP] Cleaning up all agent connections and views [10:10:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:10:45] [CLEANUP] Stopped and removed 0 video connections [10:10:45] [CLEANUP] Removed 0 video views [10:10:45] [CLEANUP] Removed 0 feed scroll views [10:10:45] [CLEANUP] Removed 0 status labels [10:10:45] [CLEANUP] Reset agent query state [10:10:45] [CLEANUP] Updated page indicator [10:10:45] [CLEANUP] Rebuilt video layout [10:10:45] [CLEANUP] ✅ All agent connections and views cleaned up [10:10:45] [CLEANUP] ======================================== [10:10:45] [SERVER] Skipping reconnect polling - app is in background [10:10:45] [CLIENT_SIG] WebSocket opened [10:10:45] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:10:45] [CLIENT_SIG] Connected! clientId=fe2AF1sREwMLoA02 [10:10:45] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:10:45] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:10:46] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [10:10:46] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:10:46] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:10:46] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:10:46] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:10:46] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:10:46] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:10:46] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:10:46] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [10:10:46] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [10:10:46] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:10:46] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [10:10:46] [BACKGROUND] Pre-downloaded 0 thumbnails [10:10:46] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [10:10:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:10:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:10:47] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:10:47] HELLO → sent (cached token, role=query) [10:10:47] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:10:47] [WS] Query connection failed - cleaning up all agent connections and views [10:10:47] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:10:47] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:10:47] [CLEANUP] ======================================== [10:10:47] [CLEANUP] Cleaning up all agent connections and views [10:10:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:10:47] [CLEANUP] Stopped and removed 0 video connections [10:10:47] [CLEANUP] Removed 0 video views [10:10:47] [CLEANUP] Removed 0 feed scroll views [10:10:47] [CLEANUP] Removed 0 status labels [10:10:47] [CLEANUP] Reset agent query state [10:10:47] [CLEANUP] Updated page indicator [10:10:47] [CLEANUP] Rebuilt video layout [10:10:47] [CLEANUP] ✅ All agent connections and views cleaned up [10:10:47] [CLEANUP] ======================================== [10:10:47] [SERVER] Skipping reconnect polling - app is in background [10:10:47] [CLEANUP] ======================================== [10:10:47] [CLEANUP] Cleaning up all agent connections and views [10:10:47] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:10:47] [CLEANUP] Stopped and removed 0 video connections [10:10:47] [CLEANUP] Removed 0 video views [10:10:47] [CLEANUP] Removed 0 feed scroll views [10:10:47] [CLEANUP] Removed 0 status labels [10:10:47] [CLEANUP] Reset agent query state [10:10:47] [CLEANUP] Updated page indicator [10:10:47] [CLEANUP] Rebuilt video layout [10:10:47] [CLEANUP] ✅ All agent connections and views cleaned up [10:10:47] [CLEANUP] ======================================== [10:10:47] [SERVER] Skipping reconnect polling - app is in background [10:19:07] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:19:07] [BACKGROUND] Background fetch triggered [10:19:07] [BACKGROUND] Fetching recent messages for pre-cache [10:19:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:19:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:19:07] [NETWORK] Status changed: connected [10:19:07] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask <523E92D0-E223-4E79-A510-E757C9321E00>.<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask <523E92D0-E223-4E79-A510-E757C9321E00>.<1>, NSLocalizedDescription=The network connection was lost.} [10:19:07] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:19:07] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [10:19:07] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:19:07] [BACKGROUND] Background fetch triggered [10:19:07] [BACKGROUND] Fetching recent messages for pre-cache [10:19:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:19:07] HELLO → sent (cached token, role=query) [10:19:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:19:08] [WS] Query connection failed - cleaning up all agent connections and views [10:19:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:19:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:19:08] [CLEANUP] ======================================== [10:19:08] [CLEANUP] Cleaning up all agent connections and views [10:19:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:19:08] [CLEANUP] Stopped and removed 0 video connections [10:19:08] [CLEANUP] Removed 0 video views [10:19:08] [CLEANUP] Removed 0 feed scroll views [10:19:08] [CLEANUP] Removed 0 status labels [10:19:08] [CLEANUP] Reset agent query state [10:19:08] [CLEANUP] Updated page indicator [10:19:08] [CLEANUP] Rebuilt video layout [10:19:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:19:08] [CLEANUP] ======================================== [10:19:08] [SERVER] Skipping reconnect polling - app is in background [10:19:08] [CLEANUP] ======================================== [10:19:08] [CLEANUP] Cleaning up all agent connections and views [10:19:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:19:08] [CLEANUP] Stopped and removed 0 video connections [10:19:08] [CLEANUP] Removed 0 video views [10:19:08] [CLEANUP] Removed 0 feed scroll views [10:19:08] [CLEANUP] Removed 0 status labels [10:19:08] [CLEANUP] Reset agent query state [10:19:08] [CLEANUP] Updated page indicator [10:19:08] [CLEANUP] Rebuilt video layout [10:19:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:19:08] [CLEANUP] ======================================== [10:19:08] [SERVER] Skipping reconnect polling - app is in background [10:26:39] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:26:39] [BACKGROUND] Fetch error: The request timed out. [10:26:39] [BACKGROUND] Fetch error: The request timed out. [10:26:39] [BACKGROUND] Background fetch triggered [10:26:39] [BACKGROUND] Fetching recent messages for pre-cache [10:26:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:26:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:26:39] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:26:39] [NETWORK] Status changed: connected [10:26:40] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:26:40] HELLO → sent (cached token, role=query) [10:26:40] [CLIENT_SIG] WebSocket opened [10:26:40] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:26:40] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:26:40] [WS] Query connection failed - cleaning up all agent connections and views [10:26:40] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:26:40] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:26:40] [CLEANUP] ======================================== [10:26:40] [CLEANUP] Cleaning up all agent connections and views [10:26:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:26:40] [CLEANUP] Stopped and removed 0 video connections [10:26:40] [CLEANUP] Removed 0 video views [10:26:40] [CLEANUP] Removed 0 feed scroll views [10:26:40] [CLEANUP] Removed 0 status labels [10:26:40] [CLEANUP] Reset agent query state [10:26:40] [CLEANUP] Updated page indicator [10:26:40] [CLEANUP] Rebuilt video layout [10:26:40] [CLEANUP] ✅ All agent connections and views cleaned up [10:26:40] [CLEANUP] ======================================== [10:26:40] [SERVER] Skipping reconnect polling - app is in background [10:26:40] [CLEANUP] ======================================== [10:26:40] [CLEANUP] Cleaning up all agent connections and views [10:26:40] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:26:40] [CLEANUP] Stopped and removed 0 video connections [10:26:40] [CLEANUP] Removed 0 video views [10:26:40] [CLEANUP] Removed 0 feed scroll views [10:26:40] [CLEANUP] Removed 0 status labels [10:26:40] [CLEANUP] Reset agent query state [10:26:40] [CLEANUP] Updated page indicator [10:26:40] [CLEANUP] Rebuilt video layout [10:26:40] [CLEANUP] ✅ All agent connections and views cleaned up [10:26:40] [CLEANUP] ======================================== [10:26:40] [SERVER] Skipping reconnect polling - app is in background [10:26:40] [CLIENT_SIG] Connected! clientId=7IsZbOQmz-SKz7GO [10:26:40] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:26:40] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:26:40] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:26:40] [BACKGROUND] Fetched 50 messages - saving to DB and pre-caching [10:26:40] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:26:40] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:26:40] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:26:40] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:26:40] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:26:40] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:26:40] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:26:40] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28736, 28735] [10:26:40] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28736, 28735] [10:26:40] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:26:40] [BACKGROUND] Pre-cached 52 ChatMessage objects for instant display (preserved 2 from push) [10:26:40] [BACKGROUND] Pre-downloaded 0 thumbnails [10:26:40] [BACKGROUND] ✅ Background fetch complete with thumbnail pre-download [10:27:49] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:27:49] [SECURITY] Timeout check: elapsed=2001.4991612434387s, timeout=300.0s [10:27:49] [NETWORK] Status changed: connected [10:27:49] [SECURITY] sceneWillEnterForeground - timeout exceeded, showing lock screen immediately [10:27:49] [AUTH] ✅ All guards passed, showing privacy cover [10:27:49] [SCROLL] 💓 alive, visible=47...53, rows=54, estHeight=0.0, heightCalls=60 [10:27:49] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:49] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:27:49] [LIFECYCLE] App entering foreground - restoring connections [10:27:49] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [10:27:49] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:27:49] [PUSH_TRACE] 🔄 FOREGROUND: memory has 52 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:49] [PUSH_TRACE] 🔄 FOREGROUND: cache has 52 msgs, valid=true, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:49] [LIFECYCLE] Away > 2 minutes (2001s) - will scroll to bottom [10:27:49] [UPLOAD_RETRY] No pending uploads to retry [10:27:49] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:27:49] [READBY_OPT] No message IDs to fetch - skipping server call [10:27:49] [LIFECYCLE] WebRTC audio re-enabled [10:27:49] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:27:49] [CLIENT_SIG] Skipping connect - app in background (state=2) [10:27:49] [VIEWER] Reconnecting after background - querying agents [10:27:49] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [10:27:49] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:27:49] [UNSENT_RETRY] Checking for unsent messages... [10:27:49] [PENDING_UPLOAD] Total pending upload messages: 0 [10:27:49] [UNSENT_RETRY] No unsent messages found [10:27:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:50] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [10:27:50] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:27:50] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} [10:27:50] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:27:50] [CLIENT_SIG] Send error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [10:27:50] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [10:27:50] [LIFECYCLE] scrollToBottomIfNeeded time=true, count=52>52=false, maxId=28827>28827=false, shouldScroll=true [10:27:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:27:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:27:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:50] HELLO → sent (cached token, role=query) [10:27:50] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:50] [WS] Query connection failed - cleaning up all agent connections and views [10:27:50] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:50] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:50] [CLEANUP] ======================================== [10:27:50] [CLEANUP] Cleaning up all agent connections and views [10:27:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:50] [CLEANUP] Stopped and removed 0 video connections [10:27:50] [CLEANUP] Removed 0 video views [10:27:50] [CLEANUP] Removed 0 feed scroll views [10:27:50] [CLEANUP] Removed 0 status labels [10:27:50] [CLEANUP] Reset agent query state [10:27:50] [CLEANUP] Updated page indicator [10:27:50] [CLEANUP] Rebuilt video layout [10:27:50] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:50] [CLEANUP] ======================================== [10:27:50] [SERVER] Starting reconnect polling (5s interval) [10:27:50] [CLEANUP] ======================================== [10:27:50] [CLEANUP] Cleaning up all agent connections and views [10:27:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:50] [CLEANUP] Stopped and removed 0 video connections [10:27:50] [CLEANUP] Removed 0 video views [10:27:50] [CLEANUP] Removed 0 feed scroll views [10:27:50] [CLEANUP] Removed 0 status labels [10:27:50] [CLEANUP] Reset agent query state [10:27:50] [CLEANUP] Updated page indicator [10:27:50] [CLEANUP] Rebuilt video layout [10:27:50] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:50] [CLEANUP] ======================================== [10:27:50] [SERVER] Starting reconnect polling (5s interval) [10:27:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=1 [10:27:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28827, 28826, 28825, 28824, 28823] [10:27:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:27:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:50] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:27:50] [SCROLL] wasNearBottom=true, threshold=758, offset=3930, contentH=4688, boundsH=758, forceScroll=true [10:27:50] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:27:50] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:27:50] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:27:50] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3930, currentOffset=3930 [10:27:50] [SCROLL] Scrolling to 3930, animated=false [10:27:50] [SECURITY] sceneDidBecomeActive - isAuthenticated=false, didEnterBackground=false [10:27:50] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:27:50] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:50] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2005 vccs=0 [10:27:50] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28827 [10:27:50] [PUSH] handlePollEventsNotification userInfo: [:] [10:27:50] [PUSH] No message_id in userInfo [10:27:50] [PUSH] No operation_type in userInfo [10:27:50] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:27:50] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=52, IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:50] [PUSH_TRACE] 📬 POLL: memory state: count=52, first 10 IDs=[28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:50] [FAST_REFRESH] Already have 52 messages in memory [10:27:50] [FAST_REFRESH] maxMemoryId=28827, maxLocalId=28827 [10:27:50] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:27:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:27:50] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:27:50] [READBY_OPT] No message IDs to fetch - skipping server call [10:27:50] [GAP_FIX] Incremental sync will use since_id=28827 (background max=28827, current DB max=28827) [10:27:50] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:27:50] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [10:27:50] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [10:27:50] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:27:50] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:27:50] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:27:50] [INCREMENTAL_SYNC] ✅ No new messages [10:27:50] [FAST_REFRESH] Incremental sync complete - 52 messages [10:27:50] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:27:50] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28827, 28826, 28825, 28824, 28823] [10:27:50] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:27:50] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:50] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:27:50] [SCROLL] wasNearBottom=true, threshold=758, offset=3930, contentH=4688, boundsH=758, forceScroll=true [10:27:50] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:27:50] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:50] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:27:50] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:27:50] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=3930, currentOffset=3930 [10:27:50] [SCROLL] Scrolling to 3930, animated=false [10:27:51] [PIN_AUTH] Correct PIN [10:27:51] [SECURITY] Restored real session: ILUIWU [10:27:51] [SECURITY] Restored real session: ILUIWU [10:27:51] [FAKE_AI] cancel() called, wasRunning=false [10:27:51] [FAKE MODE] Exiting fake mode, restoring real session [10:27:51] [SECURITY] Restored real session: ILUIWU [10:27:51] [SECURITY] Saved real session: ILUIWU [10:27:51] [FAKE MODE] ✅ Restored real session: ILUIWU [10:27:51] [FAKE MODE] Loaded 50 messages (limited to page size) [10:27:51] [READBY_OPT] Fetching readBy for 4 unsettled messages (targeted) [10:27:51] [AUTH] Authentication completed - updating UI only (data already fetched in foreground handler) [10:27:51] [AUTH] Cache had 52 messages, maxExistingId=28827, inserted 0 truly new [10:27:51] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=50>52=false, maxId=28827>28827=false, shouldScroll=false [10:27:51] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:27:51] [AUTH] UI update complete [10:27:51] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:27:51] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:27:51] [PUSH] register_device.php HTTP 200: {"status":"ok","session_id":"ILUIWU","token":"6c0571d5e4b29f63eac8424c26f3737968330e20febf8cd9a320b0952fc80c1c","role":"viewer","muted":0,"removed_from_other_channels":0} [10:27:51] [USER] Registering user: 3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, name: Laurent [10:27:51] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [10:27:51] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:27:51] [SCROLL] 💓 alive, visible=45...51, rows=52, estHeight=0.0, heightCalls=113 [10:27:51] [CELL_UPLOAD] configure: msgId=28821, file=2c2436d604281163.jpg, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, isMyMessage=false, hasFilename=true, isGiphy=false, uploadStatus=0 [10:27:51] [CELL_UPLOAD] setUploadStatus(complete, progress=0.0) for file=2c2436d604281163.jpg, overlayExists=true [10:27:51] [COMBINED_FETCH] Loaded 4 read receipts, 1 messages with reactions [10:27:51] [FAKE MODE] Enriched 4/4 unsettled messages with readBy data [10:27:51] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=50 [10:27:51] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:27:51] [USER] ✅ User registered successfully [10:27:51] [PUSH] User registration after token update: success [10:27:51] [CLIENT_SIG] WebSocket opened [10:27:51] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:27:51] [CLIENT_SIG] Connected! clientId=kTJEOdZiHGnqLvpa [10:27:51] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:27:51] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:27:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:51] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=7 [10:27:51] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=50, first5Ids=[28827, 28826, 28825, 28824, 28823] [10:27:51] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 50 messages [10:27:51] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819, 28818] [10:27:51] [RELOAD_TAB] 📊 Building chatRows from 50 messages [10:27:51] [SCROLL] wasNearBottom=true, threshold=447, offset=4227, contentH=4674, boundsH=447, forceScroll=true [10:27:51] [RELOAD_TAB] 📊 Built 52 chatRows, estHeight=0.0 [10:27:51] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=58 [10:27:51] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4247, currentOffset=4247 [10:27:51] [SCROLL] Scrolling to 4247, animated=false [10:27:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:51] HELLO → sent (cached token, role=query) [10:27:51] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:51] [WS] Query connection failed - cleaning up all agent connections and views [10:27:51] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:51] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:51] [CLEANUP] ======================================== [10:27:51] [CLEANUP] Cleaning up all agent connections and views [10:27:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:51] [CLEANUP] Stopped and removed 0 video connections [10:27:51] [CLEANUP] Removed 0 video views [10:27:51] [CLEANUP] Removed 0 feed scroll views [10:27:51] [CLEANUP] Removed 0 status labels [10:27:51] [CLEANUP] Reset agent query state [10:27:51] [CLEANUP] Updated page indicator [10:27:51] [CLEANUP] Rebuilt video layout [10:27:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:51] [CLEANUP] ======================================== [10:27:51] [SERVER] Starting reconnect polling (5s interval) [10:27:51] [CLEANUP] ======================================== [10:27:51] [CLEANUP] Cleaning up all agent connections and views [10:27:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:51] [CLEANUP] Stopped and removed 0 video connections [10:27:51] [CLEANUP] Removed 0 video views [10:27:51] [CLEANUP] Removed 0 feed scroll views [10:27:51] [CLEANUP] Removed 0 status labels [10:27:51] [CLEANUP] Reset agent query state [10:27:51] [CLEANUP] Updated page indicator [10:27:51] [CLEANUP] Rebuilt video layout [10:27:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:51] [CLEANUP] ======================================== [10:27:51] [SERVER] Starting reconnect polling (5s interval) [10:27:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:53] HELLO → sent (cached token, role=query) [10:27:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:53] [WS] Query connection failed - cleaning up all agent connections and views [10:27:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:53] [CLEANUP] ======================================== [10:27:53] [CLEANUP] Cleaning up all agent connections and views [10:27:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:53] [CLEANUP] Stopped and removed 0 video connections [10:27:53] [CLEANUP] Removed 0 video views [10:27:53] [CLEANUP] Removed 0 feed scroll views [10:27:53] [CLEANUP] Removed 0 status labels [10:27:53] [CLEANUP] Reset agent query state [10:27:53] [CLEANUP] Updated page indicator [10:27:53] [CLEANUP] Rebuilt video layout [10:27:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:53] [CLEANUP] ======================================== [10:27:53] [SERVER] Starting reconnect polling (5s interval) [10:27:53] [CLEANUP] ======================================== [10:27:53] [CLEANUP] Cleaning up all agent connections and views [10:27:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:53] [CLEANUP] Stopped and removed 0 video connections [10:27:53] [CLEANUP] Removed 0 video views [10:27:53] [CLEANUP] Removed 0 feed scroll views [10:27:53] [CLEANUP] Removed 0 status labels [10:27:53] [CLEANUP] Reset agent query state [10:27:53] [CLEANUP] Updated page indicator [10:27:53] [CLEANUP] Rebuilt video layout [10:27:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:53] [CLEANUP] ======================================== [10:27:53] [SERVER] Starting reconnect polling (5s interval) [10:27:54] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:27:54] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:54] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:54] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:54] HELLO → sent (cached token, role=query) [10:27:54] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:54] [WS] Query connection failed - cleaning up all agent connections and views [10:27:54] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:54] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:54] [CLEANUP] ======================================== [10:27:54] [CLEANUP] Cleaning up all agent connections and views [10:27:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:54] [CLEANUP] Stopped and removed 0 video connections [10:27:54] [CLEANUP] Removed 0 video views [10:27:54] [CLEANUP] Removed 0 feed scroll views [10:27:54] [CLEANUP] Removed 0 status labels [10:27:54] [CLEANUP] Reset agent query state [10:27:54] [CLEANUP] Updated page indicator [10:27:54] [CLEANUP] Rebuilt video layout [10:27:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:54] [CLEANUP] ======================================== [10:27:54] [SERVER] Starting reconnect polling (5s interval) [10:27:54] [CLEANUP] ======================================== [10:27:54] [CLEANUP] Cleaning up all agent connections and views [10:27:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:54] [CLEANUP] Stopped and removed 0 video connections [10:27:54] [CLEANUP] Removed 0 video views [10:27:54] [CLEANUP] Removed 0 feed scroll views [10:27:54] [CLEANUP] Removed 0 status labels [10:27:54] [CLEANUP] Reset agent query state [10:27:54] [CLEANUP] Updated page indicator [10:27:54] [CLEANUP] Rebuilt video layout [10:27:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:54] [CLEANUP] ======================================== [10:27:54] [SERVER] Starting reconnect polling (5s interval) [10:27:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:56] HELLO → sent (cached token, role=query) [10:27:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:56] [WS] Query connection failed - cleaning up all agent connections and views [10:27:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:56] [CLEANUP] ======================================== [10:27:56] [CLEANUP] Cleaning up all agent connections and views [10:27:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:56] [CLEANUP] Stopped and removed 0 video connections [10:27:56] [CLEANUP] Removed 0 video views [10:27:56] [CLEANUP] Removed 0 feed scroll views [10:27:56] [CLEANUP] Removed 0 status labels [10:27:56] [CLEANUP] Reset agent query state [10:27:56] [CLEANUP] Updated page indicator [10:27:56] [CLEANUP] Rebuilt video layout [10:27:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:56] [CLEANUP] ======================================== [10:27:56] [SERVER] Starting reconnect polling (5s interval) [10:27:56] [CLEANUP] ======================================== [10:27:56] [CLEANUP] Cleaning up all agent connections and views [10:27:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:56] [CLEANUP] Stopped and removed 0 video connections [10:27:56] [CLEANUP] Removed 0 video views [10:27:56] [CLEANUP] Removed 0 feed scroll views [10:27:56] [CLEANUP] Removed 0 status labels [10:27:56] [CLEANUP] Reset agent query state [10:27:56] [CLEANUP] Updated page indicator [10:27:56] [CLEANUP] Rebuilt video layout [10:27:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:56] [CLEANUP] ======================================== [10:27:56] [SERVER] Starting reconnect polling (5s interval) [10:27:58] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:58] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:58] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:58] HELLO → sent (cached token, role=query) [10:27:58] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:27:58] [WS] Query connection failed - cleaning up all agent connections and views [10:27:58] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:27:58] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:27:58] [CLEANUP] ======================================== [10:27:58] [CLEANUP] Cleaning up all agent connections and views [10:27:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:58] [CLEANUP] Stopped and removed 0 video connections [10:27:58] [CLEANUP] Removed 0 video views [10:27:58] [CLEANUP] Removed 0 feed scroll views [10:27:58] [CLEANUP] Removed 0 status labels [10:27:58] [CLEANUP] Reset agent query state [10:27:58] [CLEANUP] Updated page indicator [10:27:58] [CLEANUP] Rebuilt video layout [10:27:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:58] [CLEANUP] ======================================== [10:27:58] [SERVER] Starting reconnect polling (5s interval) [10:27:58] [CLEANUP] ======================================== [10:27:58] [CLEANUP] Cleaning up all agent connections and views [10:27:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:27:58] [CLEANUP] Stopped and removed 0 video connections [10:27:58] [CLEANUP] Removed 0 video views [10:27:58] [CLEANUP] Removed 0 feed scroll views [10:27:58] [CLEANUP] Removed 0 status labels [10:27:58] [CLEANUP] Reset agent query state [10:27:58] [CLEANUP] Updated page indicator [10:27:58] [CLEANUP] Rebuilt video layout [10:27:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:27:58] [CLEANUP] ======================================== [10:27:58] [SERVER] Starting reconnect polling (5s interval) [10:27:59] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:27:59] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:27:59] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:27:59] HELLO → sent (cached token, role=query) [10:28:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:00] [WS] Query connection failed - cleaning up all agent connections and views [10:28:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:00] [CLEANUP] ======================================== [10:28:00] [CLEANUP] Cleaning up all agent connections and views [10:28:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:00] [CLEANUP] Stopped and removed 0 video connections [10:28:00] [CLEANUP] Removed 0 video views [10:28:00] [CLEANUP] Removed 0 feed scroll views [10:28:00] [CLEANUP] Removed 0 status labels [10:28:00] [CLEANUP] Reset agent query state [10:28:00] [CLEANUP] Updated page indicator [10:28:00] [CLEANUP] Rebuilt video layout [10:28:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:00] [CLEANUP] ======================================== [10:28:00] [SERVER] Starting reconnect polling (5s interval) [10:28:00] [CLEANUP] ======================================== [10:28:00] [CLEANUP] Cleaning up all agent connections and views [10:28:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:00] [CLEANUP] Stopped and removed 0 video connections [10:28:00] [CLEANUP] Removed 0 video views [10:28:00] [CLEANUP] Removed 0 feed scroll views [10:28:00] [CLEANUP] Removed 0 status labels [10:28:00] [CLEANUP] Reset agent query state [10:28:00] [CLEANUP] Updated page indicator [10:28:00] [CLEANUP] Rebuilt video layout [10:28:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:00] [CLEANUP] ======================================== [10:28:00] [SERVER] Starting reconnect polling (5s interval) [10:28:00] [CAM_CONN] 💓 skip ping — ws not running (state=completed) conn=iosILUIWU query=true [10:28:01] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:01] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:01] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:01] HELLO → sent (cached token, role=query) [10:28:01] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:01] [WS] Query connection failed - cleaning up all agent connections and views [10:28:01] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:01] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:01] [CLEANUP] ======================================== [10:28:01] [CLEANUP] Cleaning up all agent connections and views [10:28:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:01] [CLEANUP] Stopped and removed 0 video connections [10:28:01] [CLEANUP] Removed 0 video views [10:28:01] [CLEANUP] Removed 0 feed scroll views [10:28:01] [CLEANUP] Removed 0 status labels [10:28:01] [CLEANUP] Reset agent query state [10:28:01] [CLEANUP] Updated page indicator [10:28:01] [CLEANUP] Rebuilt video layout [10:28:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:01] [CLEANUP] ======================================== [10:28:01] [SERVER] Starting reconnect polling (5s interval) [10:28:01] [CLEANUP] ======================================== [10:28:01] [CLEANUP] Cleaning up all agent connections and views [10:28:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:01] [CLEANUP] Stopped and removed 0 video connections [10:28:01] [CLEANUP] Removed 0 video views [10:28:01] [CLEANUP] Removed 0 feed scroll views [10:28:01] [CLEANUP] Removed 0 status labels [10:28:01] [CLEANUP] Reset agent query state [10:28:01] [CLEANUP] Updated page indicator [10:28:01] [CLEANUP] Rebuilt video layout [10:28:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:01] [CLEANUP] ======================================== [10:28:01] [SERVER] Starting reconnect polling (5s interval) [10:28:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:03] HELLO → sent (cached token, role=query) [10:28:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:03] [WS] Query connection failed - cleaning up all agent connections and views [10:28:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:03] [CLEANUP] ======================================== [10:28:03] [CLEANUP] Cleaning up all agent connections and views [10:28:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:03] [CLEANUP] Stopped and removed 0 video connections [10:28:03] [CLEANUP] Removed 0 video views [10:28:03] [CLEANUP] Removed 0 feed scroll views [10:28:03] [CLEANUP] Removed 0 status labels [10:28:03] [CLEANUP] Reset agent query state [10:28:03] [CLEANUP] Updated page indicator [10:28:03] [CLEANUP] Rebuilt video layout [10:28:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:03] [CLEANUP] ======================================== [10:28:03] [SERVER] Starting reconnect polling (5s interval) [10:28:03] [CLEANUP] ======================================== [10:28:03] [CLEANUP] Cleaning up all agent connections and views [10:28:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:03] [CLEANUP] Stopped and removed 0 video connections [10:28:03] [CLEANUP] Removed 0 video views [10:28:03] [CLEANUP] Removed 0 feed scroll views [10:28:03] [CLEANUP] Removed 0 status labels [10:28:03] [CLEANUP] Reset agent query state [10:28:03] [CLEANUP] Updated page indicator [10:28:03] [CLEANUP] Rebuilt video layout [10:28:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:03] [CLEANUP] ======================================== [10:28:03] [SERVER] Starting reconnect polling (5s interval) [10:28:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:04] HELLO → sent (cached token, role=query) [10:28:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:04] [WS] Query connection failed - cleaning up all agent connections and views [10:28:04] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:04] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:04] [CLEANUP] ======================================== [10:28:04] [CLEANUP] Cleaning up all agent connections and views [10:28:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:04] [CLEANUP] Stopped and removed 0 video connections [10:28:04] [CLEANUP] Removed 0 video views [10:28:04] [CLEANUP] Removed 0 feed scroll views [10:28:04] [CLEANUP] Removed 0 status labels [10:28:04] [CLEANUP] Reset agent query state [10:28:04] [CLEANUP] Updated page indicator [10:28:04] [CLEANUP] Rebuilt video layout [10:28:04] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:04] [CLEANUP] ======================================== [10:28:04] [SERVER] Starting reconnect polling (5s interval) [10:28:04] [CLEANUP] ======================================== [10:28:04] [CLEANUP] Cleaning up all agent connections and views [10:28:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:04] [CLEANUP] Stopped and removed 0 video connections [10:28:04] [CLEANUP] Removed 0 video views [10:28:04] [CLEANUP] Removed 0 feed scroll views [10:28:04] [CLEANUP] Removed 0 status labels [10:28:04] [CLEANUP] Reset agent query state [10:28:04] [CLEANUP] Updated page indicator [10:28:05] [CLEANUP] Rebuilt video layout [10:28:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:05] [CLEANUP] ======================================== [10:28:05] [SERVER] Starting reconnect polling (5s interval) [10:28:06] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:06] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:06] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:28:06] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:06] HELLO → sent (cached token, role=query) [10:28:06] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:06] [WS] Query connection failed - cleaning up all agent connections and views [10:28:06] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:06] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:06] [CLEANUP] ======================================== [10:28:06] [CLEANUP] Cleaning up all agent connections and views [10:28:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:06] [CLEANUP] Stopped and removed 0 video connections [10:28:06] [CLEANUP] Removed 0 video views [10:28:06] [CLEANUP] Removed 0 feed scroll views [10:28:06] [CLEANUP] Removed 0 status labels [10:28:06] [CLEANUP] Reset agent query state [10:28:06] [CLEANUP] Updated page indicator [10:28:06] [CLEANUP] Rebuilt video layout [10:28:06] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:06] [CLEANUP] ======================================== [10:28:06] [SERVER] Starting reconnect polling (5s interval) [10:28:06] [CLEANUP] ======================================== [10:28:06] [CLEANUP] Cleaning up all agent connections and views [10:28:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:06] [CLEANUP] Stopped and removed 0 video connections [10:28:06] [CLEANUP] Removed 0 video views [10:28:06] [CLEANUP] Removed 0 feed scroll views [10:28:06] [CLEANUP] Removed 0 status labels [10:28:06] [CLEANUP] Reset agent query state [10:28:06] [CLEANUP] Updated page indicator [10:28:06] [CLEANUP] Rebuilt video layout [10:28:06] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:06] [CLEANUP] ======================================== [10:28:06] [SERVER] Starting reconnect polling (5s interval) [10:28:06] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:28:06] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=50, isReloading=false [10:28:06] [SEND_MESSAGE] ✅ Added optimistic message id=-2 to arrays, newMsgCount=51 [10:28:06] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=58 [10:28:06] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[-2, 28827, 28826, 28825, 28824] [10:28:06] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:28:06] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-2, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:06] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:28:06] [SCROLL] wasNearBottom=true, threshold=429, offset=4247, contentH=4694, boundsH=429, forceScroll=false [10:28:06] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:28:06] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:28:06] [SCROLL] 💓 alive, visible=46...52, rows=53, estHeight=0.0, heightCalls=112 [10:28:06] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:28:06] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:28:06] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4320, currentOffset=4320 [10:28:06] [SCROLL] Scrolling to 4320, animated=true [10:28:07] [CLIENT_SIG] Event received: type=0 messageId=28828 [10:28:07] [WS_EVENT] Received event: type=0, messageId=28828 [10:28:07] [WS_EVENT] 📨 New message notification (msgId=28828) - triggering incremental refresh, currentMsgCount=51 [10:28:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:28:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28827 [10:28:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [10:28:07] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28828,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:28:07"} [10:28:07] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 08:28:07, "ok": 1, "session_id": ILUIWU, "message_id": 28828, "file_name": , "message_type": 0] [10:28:07] [DB_UPGRADE] Upgrading message ID: -2 → 28828, preserveOriginalDate=false [10:28:07] [DB_UPGRADE] ✅ Upgraded -2 → 28828 with send_status=0, 1 row(s) affected [10:28:07] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -2 → 28828 [10:28:07] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -2 → 28828 [10:28:07] ReloadData 9 [10:28:07] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:28:07] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28828] [10:28:07] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:07] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:07] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:28:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:28:07] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=51 [10:28:07] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:28:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28828, 28827, 28826, 28825, 28824] [10:28:07] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:28:07] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:07] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:28:07] [SCROLL] wasNearBottom=true, threshold=447, offset=4320, contentH=4767, boundsH=447, forceScroll=true [10:28:07] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:28:07] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=59 [10:28:07] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4320, currentOffset=4320 [10:28:07] [SCROLL] Scrolling to 4320, animated=false [10:28:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:08] HELLO → sent (cached token, role=query) [10:28:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:08] [WS] Query connection failed - cleaning up all agent connections and views [10:28:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:08] [CLEANUP] ======================================== [10:28:08] [CLEANUP] Cleaning up all agent connections and views [10:28:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:08] [CLEANUP] Stopped and removed 0 video connections [10:28:08] [CLEANUP] Removed 0 video views [10:28:08] [CLEANUP] Removed 0 feed scroll views [10:28:08] [CLEANUP] Removed 0 status labels [10:28:08] [CLEANUP] Reset agent query state [10:28:08] [CLEANUP] Updated page indicator [10:28:08] [CLEANUP] Rebuilt video layout [10:28:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:08] [CLEANUP] ======================================== [10:28:08] [SERVER] Starting reconnect polling (5s interval) [10:28:08] [CLEANUP] ======================================== [10:28:08] [CLEANUP] Cleaning up all agent connections and views [10:28:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:08] [CLEANUP] Stopped and removed 0 video connections [10:28:08] [CLEANUP] Removed 0 video views [10:28:08] [CLEANUP] Removed 0 feed scroll views [10:28:08] [CLEANUP] Removed 0 status labels [10:28:08] [CLEANUP] Reset agent query state [10:28:08] [CLEANUP] Updated page indicator [10:28:08] [CLEANUP] Rebuilt video layout [10:28:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:08] [CLEANUP] ======================================== [10:28:08] [SERVER] Starting reconnect polling (5s interval) [10:28:08] [PUSH] Silent push received [10:28:08] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:28:08 +0000, appState=0, message_id=nil, type=nil [10:28:08] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=0, IDs=[] [10:28:08] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:28:08 +0000 [10:28:08] [PUSH_EMBED] No embedded message_data in notification [10:28:08] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:28:08] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=0, IDs=[], handled=false [10:28:08] [PUSH] No embedded data, pre-loading messages from server [10:28:08] [PUSH_PRELOAD] Fetching messages for instant display cache [10:28:08] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:28:08] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:28:08] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:28:08] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:28:08] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:28:08] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:28:08] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:08] [PUSH_TRACE] 🔀 mergeMessages: Different session (nil vs ILUIWU), replacing cache [10:28:08] [PUSH_PRELOAD] ⚡ Pre-cached 50 messages for instant display (preserved 0 from push) [10:28:08] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:28:08] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:08] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2023 vccs=0 [10:28:08] [GAP_FIX] maxMessageIdAtBackground=28827, currentMaxLocalId=28828 [10:28:08] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28828, AnyHashable("session_id"): ILUIWU] [10:28:08] [PUSH] Parsed message_id: 28828 [10:28:08] [PUSH] Parsed operation_type: 3 [10:28:08] [PUSH] Taking direct action: opType=3, messageId=28828 [10:28:08] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28828 [10:28:08] [GAP_FIX] Post-action sync: using background max 28827 to catch coalesced messages [10:28:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=51 [10:28:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28827, maxMemoryId=28828 [10:28:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28827 [10:28:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:28:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28828] [10:28:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 51 msgs, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:28:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=51 [10:28:09] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=59 [10:28:09] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=51, first5Ids=[28828, 28827, 28826, 28825, 28824] [10:28:09] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 51 messages [10:28:09] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:09] [RELOAD_TAB] 📊 Building chatRows from 51 messages [10:28:09] [SCROLL] wasNearBottom=true, threshold=447, offset=4320, contentH=4767, boundsH=447, forceScroll=false [10:28:09] [RELOAD_TAB] 📊 Built 53 chatRows, estHeight=0.0 [10:28:09] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:28:09] [CLIENT_SIG] Event received: type=3 messageId=28828 [10:28:09] [WS_EVENT] Received event: type=3, messageId=28828 [10:28:09] [WS_EVENT] Read receipt for message 28828 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:28:09] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:09] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:09] HELLO → sent (cached token, role=query) [10:28:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:09] [WS] Query connection failed - cleaning up all agent connections and views [10:28:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:09] [CLEANUP] ======================================== [10:28:09] [CLEANUP] Cleaning up all agent connections and views [10:28:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:09] [CLEANUP] Stopped and removed 0 video connections [10:28:09] [CLEANUP] Removed 0 video views [10:28:09] [CLEANUP] Removed 0 feed scroll views [10:28:09] [CLEANUP] Removed 0 status labels [10:28:09] [CLEANUP] Reset agent query state [10:28:09] [CLEANUP] Updated page indicator [10:28:09] [CLEANUP] Rebuilt video layout [10:28:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:09] [CLEANUP] ======================================== [10:28:09] [SERVER] Starting reconnect polling (5s interval) [10:28:09] [CLEANUP] ======================================== [10:28:09] [CLEANUP] Cleaning up all agent connections and views [10:28:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:09] [CLEANUP] Stopped and removed 0 video connections [10:28:09] [CLEANUP] Removed 0 video views [10:28:09] [CLEANUP] Removed 0 feed scroll views [10:28:09] [CLEANUP] Removed 0 status labels [10:28:09] [CLEANUP] Reset agent query state [10:28:09] [CLEANUP] Updated page indicator [10:28:09] [CLEANUP] Rebuilt video layout [10:28:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:09] [CLEANUP] ======================================== [10:28:09] [SERVER] Starting reconnect polling (5s interval) [10:28:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:11] HELLO → sent (cached token, role=query) [10:28:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:11] [WS] Query connection failed - cleaning up all agent connections and views [10:28:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:11] [CLEANUP] ======================================== [10:28:11] [CLEANUP] Cleaning up all agent connections and views [10:28:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:11] [CLEANUP] Stopped and removed 0 video connections [10:28:11] [CLEANUP] Removed 0 video views [10:28:11] [CLEANUP] Removed 0 feed scroll views [10:28:11] [CLEANUP] Removed 0 status labels [10:28:11] [CLEANUP] Reset agent query state [10:28:11] [CLEANUP] Updated page indicator [10:28:11] [CLEANUP] Rebuilt video layout [10:28:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:11] [CLEANUP] ======================================== [10:28:11] [SERVER] Starting reconnect polling (5s interval) [10:28:11] [CLEANUP] ======================================== [10:28:11] [CLEANUP] Cleaning up all agent connections and views [10:28:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:11] [CLEANUP] Stopped and removed 0 video connections [10:28:11] [CLEANUP] Removed 0 video views [10:28:11] [CLEANUP] Removed 0 feed scroll views [10:28:11] [CLEANUP] Removed 0 status labels [10:28:11] [CLEANUP] Reset agent query state [10:28:11] [CLEANUP] Updated page indicator [10:28:11] [CLEANUP] Rebuilt video layout [10:28:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:11] [CLEANUP] ======================================== [10:28:11] [SERVER] Starting reconnect polling (5s interval) [10:28:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:13] HELLO → sent (cached token, role=query) [10:28:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:13] [WS] Query connection failed - cleaning up all agent connections and views [10:28:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:13] [CLEANUP] ======================================== [10:28:13] [CLEANUP] Cleaning up all agent connections and views [10:28:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:13] [CLEANUP] Stopped and removed 0 video connections [10:28:13] [CLEANUP] Removed 0 video views [10:28:13] [CLEANUP] Removed 0 feed scroll views [10:28:13] [CLEANUP] Removed 0 status labels [10:28:13] [CLEANUP] Reset agent query state [10:28:13] [CLEANUP] Updated page indicator [10:28:13] [CLEANUP] Rebuilt video layout [10:28:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:13] [CLEANUP] ======================================== [10:28:13] [SERVER] Starting reconnect polling (5s interval) [10:28:13] [CLEANUP] ======================================== [10:28:13] [CLEANUP] Cleaning up all agent connections and views [10:28:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:13] [CLEANUP] Stopped and removed 0 video connections [10:28:13] [CLEANUP] Removed 0 video views [10:28:13] [CLEANUP] Removed 0 feed scroll views [10:28:13] [CLEANUP] Removed 0 status labels [10:28:13] [CLEANUP] Reset agent query state [10:28:13] [CLEANUP] Updated page indicator [10:28:13] [CLEANUP] Rebuilt video layout [10:28:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:13] [CLEANUP] ======================================== [10:28:13] [SERVER] Starting reconnect polling (5s interval) [10:28:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:15] HELLO → sent (cached token, role=query) [10:28:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:15] [WS] Query connection failed - cleaning up all agent connections and views [10:28:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:15] [CLEANUP] ======================================== [10:28:15] [CLEANUP] Cleaning up all agent connections and views [10:28:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:15] [CLEANUP] Stopped and removed 0 video connections [10:28:15] [CLEANUP] Removed 0 video views [10:28:15] [CLEANUP] Removed 0 feed scroll views [10:28:15] [CLEANUP] Removed 0 status labels [10:28:15] [CLEANUP] Reset agent query state [10:28:15] [CLEANUP] Updated page indicator [10:28:15] [CLEANUP] Rebuilt video layout [10:28:15] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:15] [CLEANUP] ======================================== [10:28:15] [SERVER] Starting reconnect polling (5s interval) [10:28:15] [CLEANUP] ======================================== [10:28:15] [CLEANUP] Cleaning up all agent connections and views [10:28:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:15] [CLEANUP] Stopped and removed 0 video connections [10:28:15] [CLEANUP] Removed 0 video views [10:28:15] [CLEANUP] Removed 0 feed scroll views [10:28:15] [CLEANUP] Removed 0 status labels [10:28:15] [CLEANUP] Reset agent query state [10:28:15] [CLEANUP] Updated page indicator [10:28:15] [CLEANUP] Rebuilt video layout [10:28:15] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:15] [CLEANUP] ======================================== [10:28:15] [SERVER] Starting reconnect polling (5s interval) [10:28:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:28:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:28:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:28:16] HELLO → sent (cached token, role=query) [10:28:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:28:16] [WS] Query connection failed - cleaning up all agent connections and views [10:28:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:28:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:28:16] [CLEANUP] ======================================== [10:28:16] [CLEANUP] Cleaning up all agent connections and views [10:28:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:16] [CLEANUP] Stopped and removed 0 video connections [10:28:16] [CLEANUP] Removed 0 video views [10:28:16] [CLEANUP] Removed 0 feed scroll views [10:28:16] [CLEANUP] Removed 0 status labels [10:28:16] [CLEANUP] Reset agent query state [10:28:16] [CLEANUP] Updated page indicator [10:28:16] [CLEANUP] Rebuilt video layout [10:28:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:16] [CLEANUP] ======================================== [10:28:16] [SERVER] Starting reconnect polling (5s interval) [10:28:16] [CLEANUP] ======================================== [10:28:16] [CLEANUP] Cleaning up all agent connections and views [10:28:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:28:16] [CLEANUP] Stopped and removed 0 video connections [10:28:16] [CLEANUP] Removed 0 video views [10:28:16] [CLEANUP] Removed 0 feed scroll views [10:28:16] [CLEANUP] Removed 0 status labels [10:28:16] [CLEANUP] Reset agent query state [10:28:16] [CLEANUP] Updated page indicator [10:28:16] [CLEANUP] Rebuilt video layout [10:28:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:28:16] [CLEANUP] ======================================== [10:28:16] [SERVER] Starting reconnect polling (5s interval) [10:28:17] [LIFECYCLE] App resigning active - cleared crash flag [10:28:17] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [10:28:17] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:28:17] [SECURITY] Saved background timestamp [10:28:17] [LIFECYCLE] App entering background - cleared crash flag [10:28:17] [CLIENT_SIG] Disconnecting [10:28:17] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:28:17] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:28:17] [PUSH_TRACE] 💤 BACKGROUND: memory has 51 messages, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:28:17] [LIFECYCLE] Background snapshot: count=51, maxId=28828 [10:28:17] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [10:28:17] [WS] Canceling WebSocket for query connection to iosILUIWU [10:28:17] In cleanupPeer [10:28:17] In cleanupPeer [10:28:17] [LIFECYCLE] WebRTC audio disabled [10:28:17] [LIFECYCLE] AVAudioSession deactivated [10:28:17] [LIFECYCLE] All connections stopped [10:28:17] [CLIENT_SIG] WebSocket closed with code 1001 [10:28:17] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:28:17] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:28:17] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:28:17] [SERVER] Stopped reconnect polling [10:28:17] [WS] URLSession invalidated successfully [10:28:17] Will request stop of video 0 [10:28:17] Will request stop of video 0 [10:28:17] [PIP] Removing 0 tracks from PiP for connection 0 [10:28:17] [PIP] ✅ All tracks removed for connection 0 [10:28:17] [PIP] Removing 0 tracks from PiP for connection 0 [10:28:17] [PIP] ✅ All tracks removed for connection 0 [10:29:59] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:29:59] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 51 msgs, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:29:59] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=nil pings=2 secsSinceLastPong=2135 vccs=0 [10:29:59] [GAP_FIX] maxMessageIdAtBackground=28828, currentMaxLocalId=28829 [10:29:59] [PUSH] handlePollEventsNotification userInfo: [:] [10:29:59] [PUSH] No message_id in userInfo [10:29:59] [PUSH] No operation_type in userInfo [10:29:59] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:29:59] [NETWORK] Status changed: connected [10:29:59] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=50, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:29:59] [PUSH_TRACE] 📬 POLL: memory state: count=51, first 10 IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:29:59] [FAST_REFRESH] Already have 51 messages in memory [10:29:59] [FAST_REFRESH] maxMemoryId=28828, maxLocalId=28829 [10:29:59] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28828) [10:29:59] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 52 total) [10:29:59] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:29:59] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:29:59] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:29:59] [READBY_OPT] No message IDs to fetch - skipping server call [10:29:59] [GAP_FIX] Incremental sync will use since_id=28828 (background max=28828, current DB max=28829) [10:29:59] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:29:59] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28829 [10:29:59] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [10:29:59] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:29:59] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:29:59] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:29:59] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:29:59] [PUSH] Silent push received [10:29:59] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:29:59 +0000, appState=2, message_id=28829, type=nil [10:29:59] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=50, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:29:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:29:59 +0000 [10:29:59] [PUSH_TRACE] ⬇️ Processing embedded message_id=28829 [10:29:59] [PUSH_EMBED] 📩 Received embedded message: id=28829, type=0, sender=Esra [10:29:59] [PUSH_TRACE] ⬇️ Message details: text="Thanks baby...", datesent=2026-04-23 08:29:56 [10:29:59] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:29:59] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28829 [10:29:59] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28829 [10:29:59] [PUSH_EMBED] ✅ Saved message 28829 to local DB (sync) [10:29:59] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28829 [10:29:59] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28829 [10:29:59] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28829 [10:29:59] [PUSH_TRACE] 📦 Cache state: valid=true, count=50, IDs=[28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820, 28819] [10:29:59] [PUSH_EMBED] Inserted message 28829 into existing cache (now 51 messages) [10:29:59] [PUSH_TRACE] 📦 ✅ Inserted message 28829, cache now has IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:29:59] [PUSH_TRACE] 📦 EXITING cache update queue for message 28829 [10:29:59] [PUSH_EMBED] Fetching evolution data for message 28829 in background [10:29:59] [PUSH_EMBED] ✅ Fully processed message 28829 [10:29:59] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28829 [10:29:59] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820], handled=true [10:29:59] [PUSH] Embedded message handled instantly from silent push [10:29:59] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:29:59] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28829 [10:29:59] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:29:59] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:29:59] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:29:59] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:29:59] [PUSH_TRACE] 👁️ Received message id=28829, text="Thanks baby..." [10:29:59] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:29:59] [PUSH_UI] Message 28829 already in memory - skipping insert [10:29:59] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:29:59] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:29:59] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2135 vccs=0 [10:29:59] [GAP_FIX] maxMessageIdAtBackground=28828, currentMaxLocalId=28829 [10:29:59] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("sender_name"): Esra, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:29:56, AnyHashable("operation_type"): 0, AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("timer"): 0, AnyHashable("message_id"): 28829, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): , AnyHashable("message"): Thanks baby, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:29:56"; "file_name" = ""; "is_encrypted" = 0; message = "Thanks baby"; "message_id" = 28829; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28828; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE] [10:29:59] [PUSH_EMBED_VC] Message 28829 already in memory - skipping [10:29:59] [PUSH] ⚡ Embedded message handled directly in ViewController [10:29:59] [PUSH] Parsed message_id: 28829 [10:29:59] [PUSH] Parsed operation_type: 0 [10:29:59] [PUSH] Taking direct action: opType=0, messageId=28829 [10:29:59] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28829 [10:29:59] [PUSH] ⚡ Message 28829 already in memory - skipping duplicate notification entirely [10:29:59] [GAP_FIX] Post-action sync: using background max 28828 to catch coalesced messages [10:29:59] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:30:00] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:30:00] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28829] [10:30:00] [PUSH_EMBED] Got evolution data for message 28829, saving to local DB [10:30:00] [PUSH_EMBED] Saved evolution data for message 28829 [10:30:00] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:00] [CLIENT_SIG] WebSocket opened [10:30:00] HELLO → sent (cached token, role=query) [10:30:00] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:30:00] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:30:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:00] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:00] [SCROLL] wasNearBottom=true, threshold=447, offset=4320, contentH=4767, boundsH=447, forceScroll=false [10:30:00] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:00] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28828 → 28829 [10:30:00] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:30:00] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:00] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:00] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:30:00] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:00] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:30:00] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:30:00] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28829, maxMemoryId=28829 [10:30:00] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28829 [10:30:00] [SCROLL_END_DECEL] messagesTable offsetY=4320, insetTop=0, pendingVelocityY=0.0 [10:30:00] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4397, currentOffset=4320 [10:30:00] [SCROLL_END_DECEL] messagesTable offsetY=4320, insetTop=0, pendingVelocityY=0.0 [10:30:00] [FAST_REFRESH] Incremental sync complete - 52 messages [10:30:00] [CLIENT_SIG] Connected! clientId=Juau-gbdnB4ToW8J [10:30:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:00] [WS] Query connection failed - cleaning up all agent connections and views [10:30:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:00] [CLEANUP] ======================================== [10:30:00] [CLEANUP] Cleaning up all agent connections and views [10:30:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:00] [CLEANUP] Stopped and removed 0 video connections [10:30:00] [CLEANUP] Removed 0 video views [10:30:00] [CLEANUP] Removed 0 feed scroll views [10:30:00] [CLEANUP] Removed 0 status labels [10:30:00] [CLEANUP] Reset agent query state [10:30:00] [CLEANUP] Updated page indicator [10:30:00] [CLEANUP] Rebuilt video layout [10:30:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:00] [CLEANUP] ======================================== [10:30:00] [SERVER] Skipping reconnect polling - app is in background [10:30:00] [CLEANUP] ======================================== [10:30:00] [CLEANUP] Cleaning up all agent connections and views [10:30:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:00] [CLEANUP] Stopped and removed 0 video connections [10:30:00] [CLEANUP] Removed 0 video views [10:30:00] [CLEANUP] Removed 0 feed scroll views [10:30:00] [CLEANUP] Removed 0 status labels [10:30:00] [CLEANUP] Reset agent query state [10:30:00] [CLEANUP] Updated page indicator [10:30:00] [CLEANUP] Rebuilt video layout [10:30:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:00] [CLEANUP] ======================================== [10:30:00] [SERVER] Skipping reconnect polling - app is in background [10:30:00] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:30:00] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:00] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:30:00] [INCREMENTAL_SYNC] ✅ No new messages [10:30:00] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:30:00] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:00] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:00] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:00] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:00] [SCROLL] wasNearBottom=true, threshold=447, offset=4320, contentH=4844, boundsH=447, forceScroll=false [10:30:00] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:00] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:30:01] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:02] [PUSH] Silent push received [10:30:02] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:30:02 +0000, appState=2, message_id=nil, type=nil [10:30:02] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:02 +0000 [10:30:02] [PUSH_EMBED] No embedded message_data in notification [10:30:02] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:30:02] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820], handled=false [10:30:02] [PUSH] No embedded data, pre-loading messages from server [10:30:02] [PUSH_PRELOAD] Fetching messages for instant display cache [10:30:02] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort} [10:30:02] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:30:02] [CLIENT_SIG] Task completed with error: Error Domain=NSPOSIXErrorDomain Code=53 "Software caused connection abort" UserInfo={NSDescription=Software caused connection abort, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>} [10:30:02] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:30:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:02] HELLO → sent (cached token, role=query) [10:30:02] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:02] [WS] Query connection failed - cleaning up all agent connections and views [10:30:02] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:02] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:02] [CLEANUP] ======================================== [10:30:02] [CLEANUP] Cleaning up all agent connections and views [10:30:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:02] [CLEANUP] Stopped and removed 0 video connections [10:30:02] [CLEANUP] Removed 0 video views [10:30:02] [CLEANUP] Removed 0 feed scroll views [10:30:02] [CLEANUP] Removed 0 status labels [10:30:02] [CLEANUP] Reset agent query state [10:30:02] [CLEANUP] Updated page indicator [10:30:02] [CLEANUP] Rebuilt video layout [10:30:02] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:02] [CLEANUP] ======================================== [10:30:02] [SERVER] Skipping reconnect polling - app is in background [10:30:02] [CLEANUP] ======================================== [10:30:02] [CLEANUP] Cleaning up all agent connections and views [10:30:02] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:02] [CLEANUP] Stopped and removed 0 video connections [10:30:02] [CLEANUP] Removed 0 video views [10:30:02] [CLEANUP] Removed 0 feed scroll views [10:30:02] [CLEANUP] Removed 0 status labels [10:30:02] [CLEANUP] Reset agent query state [10:30:02] [CLEANUP] Updated page indicator [10:30:02] [CLEANUP] Rebuilt video layout [10:30:02] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:02] [CLEANUP] ======================================== [10:30:02] [SERVER] Skipping reconnect polling - app is in background [10:30:02] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:30:02] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:30:02] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:30:02] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:30:02] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:30:02] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:30:02] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [PRELOAD_CACHE] Preserving 1 push-inserted messages: [28738] [10:30:02] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=1, IDs=[28738] [10:30:02] [PUSH_TRACE] 🔀 mergeMessages: merged.count=51, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [PUSH_PRELOAD] ⚡ Pre-cached 51 messages for instant display (preserved 1 from push) [10:30:02] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:30:02] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2137 vccs=0 [10:30:02] [GAP_FIX] maxMessageIdAtBackground=28828, currentMaxLocalId=28829 [10:30:02] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28829, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [10:30:02] [PUSH] Parsed message_id: 28829 [10:30:02] [PUSH] Parsed operation_type: 3 [10:30:02] [PUSH] Taking direct action: opType=3, messageId=28829 [10:30:02] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28829 [10:30:02] [GAP_FIX] Post-action sync: using background max 28828 to catch coalesced messages [10:30:02] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:30:02] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28829 [10:30:02] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [10:30:02] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:30:02] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28829] [10:30:02] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:02] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:30:02] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:02] [SCROLL_END_DECEL] messagesTable offsetY=4320, insetTop=0, pendingVelocityY=0.0 [10:30:02] [SCROLL] 💓 alive, visible=47...53, rows=54, estHeight=0.0, heightCalls=1 [10:30:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:30:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:03] [SCROLL] wasNearBottom=true, threshold=447, offset=4389, contentH=4844, boundsH=447, forceScroll=false [10:30:03] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:03] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:30:03] [SCROLL_END_DECEL] messagesTable offsetY=4397, insetTop=0, pendingVelocityY=0.0 [10:30:03] [NETWORK] Status changed: connected [10:30:03] [SECURITY] Timeout check: elapsed=106.63840389251709s, timeout=300.0s [10:30:03] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:30:03] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:30:03] [LIFECYCLE] App entering foreground - restoring connections [10:30:03] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [10:30:03] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:30:03] [PUSH_TRACE] 🔄 FOREGROUND: memory has 52 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [PUSH_TRACE] 🔄 FOREGROUND: cache has 51 msgs, valid=true, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [UPLOAD_RETRY] No pending uploads to retry [10:30:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:03] [READBY_OPT] No message IDs to fetch - skipping server call [10:30:03] [LIFECYCLE] WebRTC audio re-enabled [10:30:03] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:30:03] [CLIENT_SIG] Skipping connect - app in background (state=2) [10:30:03] [VIEWER] Reconnecting after background - querying agents [10:30:03] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [10:30:03] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:30:03] [UNSENT_RETRY] Checking for unsent messages... [10:30:03] [PENDING_UPLOAD] Total pending upload messages: 0 [10:30:03] [UNSENT_RETRY] No unsent messages found [10:30:03] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [10:30:03] [PUSH] Notification tapped - session_id: ILUIWU [10:30:03] [PUSH] Max message_id before tap: 28829 [10:30:03] [PUSH] Stored pending session: ILUIWU [10:30:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:03 +0000 [10:30:03] [PUSH_TRACE] ⬇️ Processing embedded message_id=28829 [10:30:03] [PUSH_EMBED] 📩 Received embedded message: id=28829, type=0, sender=Esra [10:30:03] [PUSH_TRACE] ⬇️ Message details: text="Thanks baby...", datesent=2026-04-23 08:29:56 [10:30:03] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:30:03] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28829 [10:30:03] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28829 [10:30:03] [PUSH_EMBED] ✅ Saved message 28829 to local DB (sync) [10:30:03] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28829 [10:30:03] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28829 [10:30:03] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28829 [10:30:03] [PUSH_TRACE] 📦 Cache state: valid=true, count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [PUSH_TRACE] 📦 ⚠️ Message 28829 already in cache, skipping insert [10:30:03] [PUSH_TRACE] 📦 EXITING cache update queue for message 28829 [10:30:03] [PUSH_EMBED] Fetching evolution data for message 28829 in background [10:30:03] [PUSH_EMBED] ✅ Fully processed message 28829 [10:30:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28829 [10:30:03] [PUSH] Embedded message handled instantly on tap [10:30:03] [PUSH] Fetching server messages since_id=28829 to catch coalesced notifications on tap [10:30:03] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28829 to catch coalesced notifications [10:30:03] [PUSH_PRELOAD] Fetching messages for instant display cache [10:30:03] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=52>51=true, maxId=28829>28828=true, shouldScroll=true [10:30:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:30:03] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:30:03] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:30:03] [PUSH_TRACE] 👁️ Received message id=28829, text="Thanks baby..." [10:30:03] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:30:03] [PUSH_UI] Message 28829 already in memory - skipping insert [10:30:03] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:30:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:03] [CLIENT_SIG] WebSocket opened [10:30:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:30:03] [CLIENT_SIG] Connected! clientId=TESJxpwPdpRkJ6L2 [10:30:03] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:30:03] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:30:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:03] HELLO → sent (cached token, role=query) [10:30:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:03] [WS] Query connection failed - cleaning up all agent connections and views [10:30:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:03] [CLEANUP] ======================================== [10:30:03] [CLEANUP] Cleaning up all agent connections and views [10:30:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:03] [CLEANUP] Stopped and removed 0 video connections [10:30:03] [CLEANUP] Removed 0 video views [10:30:03] [CLEANUP] Removed 0 feed scroll views [10:30:03] [CLEANUP] Removed 0 status labels [10:30:03] [CLEANUP] Reset agent query state [10:30:03] [CLEANUP] Updated page indicator [10:30:03] [CLEANUP] Rebuilt video layout [10:30:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:03] [CLEANUP] ======================================== [10:30:03] [SERVER] Starting reconnect polling (5s interval) [10:30:03] [CLEANUP] ======================================== [10:30:03] [CLEANUP] Cleaning up all agent connections and views [10:30:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:03] [CLEANUP] Stopped and removed 0 video connections [10:30:03] [CLEANUP] Removed 0 video views [10:30:03] [CLEANUP] Removed 0 feed scroll views [10:30:03] [CLEANUP] Removed 0 status labels [10:30:03] [CLEANUP] Reset agent query state [10:30:03] [CLEANUP] Updated page indicator [10:30:03] [CLEANUP] Rebuilt video layout [10:30:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:03] [CLEANUP] ======================================== [10:30:03] [SERVER] Starting reconnect polling (5s interval) [10:30:03] [PUSH_EMBED] Got evolution data for message 28829, saving to local DB [10:30:03] [PUSH_EMBED] Saved evolution data for message 28829 [10:30:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:30:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:03] [SCROLL] wasNearBottom=true, threshold=447, offset=4397, contentH=4844, boundsH=447, forceScroll=true [10:30:03] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:03] [PUSH_PRELOAD] No messages or parse error [10:30:03] [PUSH] Server fetch on tap completed (success=false) [10:30:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:30:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2139 vccs=0 [10:30:03] [GAP_FIX] maxMessageIdAtBackground=28828, currentMaxLocalId=28829 [10:30:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28829, AnyHashable("message"): Thanks baby, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:29:56"; "file_name" = ""; "is_encrypted" = 0; message = "Thanks baby"; "message_id" = 28829; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28828; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-23 08:29:56, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("sender_name"): Esra, AnyHashable("message_type"): 0, AnyHashable("operation_type"): 0] [10:30:03] [PUSH_EMBED_VC] Message 28829 already in memory - skipping [10:30:03] [PUSH] ⚡ Embedded message handled directly in ViewController [10:30:03] [PUSH] Parsed message_id: 28829 [10:30:03] [PUSH] Parsed operation_type: 0 [10:30:03] [PUSH] Taking direct action: opType=0, messageId=28829 [10:30:03] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28829 [10:30:03] [PUSH] ⚡ Message 28829 already in memory - skipping duplicate notification entirely [10:30:03] [GAP_FIX] Post-action sync: using background max 28828 to catch coalesced messages [10:30:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:30:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28829 [10:30:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [10:30:03] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4397, currentOffset=4397 [10:30:03] [SCROLL] Scrolling to 4397, animated=false [10:30:04] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28829] [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:30:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:30:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:04] [SCROLL] wasNearBottom=true, threshold=447, offset=4397, contentH=4844, boundsH=447, forceScroll=true [10:30:04] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:30:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4397, currentOffset=4397 [10:30:04] [SCROLL] Scrolling to 4397, animated=false [10:30:04] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:30:04] [SECURITY] Within timeout - cleared background flag [10:30:04] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:30:04] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 52 msgs, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2139 vccs=0 [10:30:04] [GAP_FIX] maxMessageIdAtBackground=28828, currentMaxLocalId=28829 [10:30:04] [PUSH] handlePollEventsNotification userInfo: [:] [10:30:04] [PUSH] No message_id in userInfo [10:30:04] [PUSH] No operation_type in userInfo [10:30:04] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:30:04] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [PUSH_TRACE] 📬 POLL: memory state: count=52, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [FAST_REFRESH] Already have 52 messages in memory [10:30:04] [FAST_REFRESH] maxMemoryId=28829, maxLocalId=28829 [10:30:04] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:30:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:04] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:30:04] [READBY_OPT] No message IDs to fetch - skipping server call [10:30:04] [GAP_FIX] Incremental sync will use since_id=28828 (background max=28828, current DB max=28829) [10:30:04] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=52 [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28828, maxMemoryId=28829 [10:30:04] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28828 [10:30:04] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:30:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:30:04] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28829] [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 52 msgs, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 52, first 10 IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:30:04] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=52 [10:30:04] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:30:04] [FAST_REFRESH] Incremental sync complete - 52 messages [10:30:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:30:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=52, first5Ids=[28829, 28828, 28827, 28826, 28825] [10:30:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 52 messages [10:30:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:04] [RELOAD_TAB] 📊 Building chatRows from 52 messages [10:30:04] [SCROLL] wasNearBottom=true, threshold=447, offset=4397, contentH=4844, boundsH=447, forceScroll=true [10:30:04] [RELOAD_TAB] 📊 Built 54 chatRows, estHeight=0.0 [10:30:04] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=60 [10:30:04] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4397, currentOffset=4397 [10:30:04] [SCROLL] Scrolling to 4397, animated=false [10:30:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:05] HELLO → sent (cached token, role=query) [10:30:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:05] [WS] Query connection failed - cleaning up all agent connections and views [10:30:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:05] [CLEANUP] ======================================== [10:30:05] [CLEANUP] Cleaning up all agent connections and views [10:30:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:05] [CLEANUP] Stopped and removed 0 video connections [10:30:05] [CLEANUP] Removed 0 video views [10:30:05] [CLEANUP] Removed 0 feed scroll views [10:30:05] [CLEANUP] Removed 0 status labels [10:30:05] [CLEANUP] Reset agent query state [10:30:05] [CLEANUP] Updated page indicator [10:30:05] [CLEANUP] Rebuilt video layout [10:30:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:05] [CLEANUP] ======================================== [10:30:05] [SERVER] Starting reconnect polling (5s interval) [10:30:05] [CLEANUP] ======================================== [10:30:05] [CLEANUP] Cleaning up all agent connections and views [10:30:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:05] [CLEANUP] Stopped and removed 0 video connections [10:30:05] [CLEANUP] Removed 0 video views [10:30:05] [CLEANUP] Removed 0 feed scroll views [10:30:05] [CLEANUP] Removed 0 status labels [10:30:05] [CLEANUP] Reset agent query state [10:30:05] [CLEANUP] Updated page indicator [10:30:05] [CLEANUP] Rebuilt video layout [10:30:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:05] [CLEANUP] ======================================== [10:30:05] [SERVER] Starting reconnect polling (5s interval) [10:30:06] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:06] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:30:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:07] HELLO → sent (cached token, role=query) [10:30:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:07] [WS] Query connection failed - cleaning up all agent connections and views [10:30:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:07] [CLEANUP] ======================================== [10:30:07] [CLEANUP] Cleaning up all agent connections and views [10:30:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:07] [CLEANUP] Stopped and removed 0 video connections [10:30:07] [CLEANUP] Removed 0 video views [10:30:07] [CLEANUP] Removed 0 feed scroll views [10:30:07] [CLEANUP] Removed 0 status labels [10:30:07] [CLEANUP] Reset agent query state [10:30:07] [CLEANUP] Updated page indicator [10:30:07] [CLEANUP] Rebuilt video layout [10:30:07] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:07] [CLEANUP] ======================================== [10:30:07] [SERVER] Starting reconnect polling (5s interval) [10:30:07] [CLEANUP] ======================================== [10:30:07] [CLEANUP] Cleaning up all agent connections and views [10:30:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:07] [CLEANUP] Stopped and removed 0 video connections [10:30:07] [CLEANUP] Removed 0 video views [10:30:07] [CLEANUP] Removed 0 feed scroll views [10:30:07] [CLEANUP] Removed 0 status labels [10:30:07] [CLEANUP] Reset agent query state [10:30:07] [CLEANUP] Updated page indicator [10:30:07] [CLEANUP] Rebuilt video layout [10:30:07] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:07] [CLEANUP] ======================================== [10:30:07] [SERVER] Starting reconnect polling (5s interval) [10:30:08] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:08] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:08] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:08] HELLO → sent (cached token, role=query) [10:30:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:08] [WS] Query connection failed - cleaning up all agent connections and views [10:30:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:08] [CLEANUP] ======================================== [10:30:08] [CLEANUP] Cleaning up all agent connections and views [10:30:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:08] [CLEANUP] Stopped and removed 0 video connections [10:30:08] [CLEANUP] Removed 0 video views [10:30:08] [CLEANUP] Removed 0 feed scroll views [10:30:08] [CLEANUP] Removed 0 status labels [10:30:08] [CLEANUP] Reset agent query state [10:30:08] [CLEANUP] Updated page indicator [10:30:08] [CLEANUP] Rebuilt video layout [10:30:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:08] [CLEANUP] ======================================== [10:30:08] [SERVER] Starting reconnect polling (5s interval) [10:30:08] [CLEANUP] ======================================== [10:30:08] [CLEANUP] Cleaning up all agent connections and views [10:30:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:08] [CLEANUP] Stopped and removed 0 video connections [10:30:08] [CLEANUP] Removed 0 video views [10:30:08] [CLEANUP] Removed 0 feed scroll views [10:30:08] [CLEANUP] Removed 0 status labels [10:30:08] [CLEANUP] Reset agent query state [10:30:08] [CLEANUP] Updated page indicator [10:30:08] [CLEANUP] Rebuilt video layout [10:30:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:08] [CLEANUP] ======================================== [10:30:08] [SERVER] Starting reconnect polling (5s interval) [10:30:10] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:10] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:10] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:10] HELLO → sent (cached token, role=query) [10:30:10] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:10] [WS] Query connection failed - cleaning up all agent connections and views [10:30:10] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:10] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:10] [CLEANUP] ======================================== [10:30:10] [CLEANUP] Cleaning up all agent connections and views [10:30:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:10] [CLEANUP] Stopped and removed 0 video connections [10:30:10] [CLEANUP] Removed 0 video views [10:30:10] [CLEANUP] Removed 0 feed scroll views [10:30:10] [CLEANUP] Removed 0 status labels [10:30:10] [CLEANUP] Reset agent query state [10:30:10] [CLEANUP] Updated page indicator [10:30:10] [CLEANUP] Rebuilt video layout [10:30:10] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:10] [CLEANUP] ======================================== [10:30:10] [SERVER] Starting reconnect polling (5s interval) [10:30:10] [CLEANUP] ======================================== [10:30:10] [CLEANUP] Cleaning up all agent connections and views [10:30:10] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:10] [CLEANUP] Stopped and removed 0 video connections [10:30:10] [CLEANUP] Removed 0 video views [10:30:10] [CLEANUP] Removed 0 feed scroll views [10:30:10] [CLEANUP] Removed 0 status labels [10:30:10] [CLEANUP] Reset agent query state [10:30:10] [CLEANUP] Updated page indicator [10:30:10] [CLEANUP] Rebuilt video layout [10:30:10] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:10] [CLEANUP] ======================================== [10:30:10] [SERVER] Starting reconnect polling (5s interval) [10:30:10] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:30:10] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:30:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:12] HELLO → sent (cached token, role=query) [10:30:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:12] [WS] Query connection failed - cleaning up all agent connections and views [10:30:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:12] [CLEANUP] ======================================== [10:30:12] [CLEANUP] Cleaning up all agent connections and views [10:30:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:12] [CLEANUP] Stopped and removed 0 video connections [10:30:12] [CLEANUP] Removed 0 video views [10:30:12] [CLEANUP] Removed 0 feed scroll views [10:30:12] [CLEANUP] Removed 0 status labels [10:30:12] [CLEANUP] Reset agent query state [10:30:12] [CLEANUP] Updated page indicator [10:30:12] [CLEANUP] Rebuilt video layout [10:30:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:12] [CLEANUP] ======================================== [10:30:12] [SERVER] Starting reconnect polling (5s interval) [10:30:12] [CLEANUP] ======================================== [10:30:12] [CLEANUP] Cleaning up all agent connections and views [10:30:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:12] [CLEANUP] Stopped and removed 0 video connections [10:30:12] [CLEANUP] Removed 0 video views [10:30:12] [CLEANUP] Removed 0 feed scroll views [10:30:12] [CLEANUP] Removed 0 status labels [10:30:12] [CLEANUP] Reset agent query state [10:30:12] [CLEANUP] Updated page indicator [10:30:12] [CLEANUP] Rebuilt video layout [10:30:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:12] [CLEANUP] ======================================== [10:30:12] [SERVER] Starting reconnect polling (5s interval) [10:30:13] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:30:13] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=52, isReloading=false [10:30:13] [SEND_MESSAGE] ✅ Added optimistic message id=-3 to arrays, newMsgCount=53 [10:30:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=60 [10:30:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[-3, 28829, 28828, 28827, 28826] [10:30:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:30:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-3, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:13] [RELOAD_TAB] 📊 Building chatRows from 53 messages [10:30:13] [SCROLL] wasNearBottom=true, threshold=447, offset=4397, contentH=4844, boundsH=447, forceScroll=false [10:30:13] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [10:30:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=62 [10:30:13] [SCROLL] 💓 alive, visible=48...54, rows=55, estHeight=0.0, heightCalls=118 [10:30:13] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:30:13] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:30:13] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4474, currentOffset=4474 [10:30:13] [SCROLL] Scrolling to 4474, animated=true [10:30:13] [CLIENT_SIG] Event received: type=0 messageId=28830 [10:30:13] [WS_EVENT] Received event: type=0, messageId=28830 [10:30:13] [WS_EVENT] 📨 New message notification (msgId=28830) - triggering incremental refresh, currentMsgCount=53 [10:30:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [10:30:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28829, maxMemoryId=28829 [10:30:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28829 [10:30:13] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28830,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:30:13"} [10:30:13] [CHAT] receive_message.php JSON: ["ok": 1, "file_name": , "message_id": 28830, "datesent_utc": 2026-04-23 08:30:13, "message_type": 0, "session_id": ILUIWU] [10:30:13] [DB_UPGRADE] Upgrading message ID: -3 → 28830, preserveOriginalDate=false [10:30:13] [DB_UPGRADE] ✅ Upgraded -3 → 28830 with send_status=0, 1 row(s) affected [10:30:13] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -3 → 28830 [10:30:13] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -3 → 28830 [10:30:13] ReloadData 9 [10:30:13] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:30:13] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28830] [10:30:13] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 53 msgs, first 10 IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:13] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 53, first 10 IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:13] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:30:13] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=53 [10:30:13] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=53 [10:30:13] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:13] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:30:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=53, first5Ids=[28830, 28829, 28828, 28827, 28826] [10:30:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 53 messages [10:30:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:13] [RELOAD_TAB] 📊 Building chatRows from 53 messages [10:30:13] [SCROLL] wasNearBottom=true, threshold=447, offset=4474, contentH=4921, boundsH=447, forceScroll=true [10:30:13] [RELOAD_TAB] 📊 Built 55 chatRows, estHeight=0.0 [10:30:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:30:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:13] HELLO → sent (cached token, role=query) [10:30:13] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4474, currentOffset=4474 [10:30:13] [SCROLL] Scrolling to 4474, animated=false [10:30:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:13] [WS] Query connection failed - cleaning up all agent connections and views [10:30:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:13] [CLEANUP] ======================================== [10:30:13] [CLEANUP] Cleaning up all agent connections and views [10:30:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:13] [CLEANUP] Stopped and removed 0 video connections [10:30:13] [CLEANUP] Removed 0 video views [10:30:13] [CLEANUP] Removed 0 feed scroll views [10:30:13] [CLEANUP] Removed 0 status labels [10:30:13] [CLEANUP] Reset agent query state [10:30:13] [CLEANUP] Updated page indicator [10:30:13] [CLEANUP] Rebuilt video layout [10:30:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:13] [CLEANUP] ======================================== [10:30:13] [SERVER] Starting reconnect polling (5s interval) [10:30:13] [CLEANUP] ======================================== [10:30:13] [CLEANUP] Cleaning up all agent connections and views [10:30:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:13] [CLEANUP] Stopped and removed 0 video connections [10:30:13] [CLEANUP] Removed 0 video views [10:30:13] [CLEANUP] Removed 0 feed scroll views [10:30:13] [CLEANUP] Removed 0 status labels [10:30:13] [CLEANUP] Reset agent query state [10:30:13] [CLEANUP] Updated page indicator [10:30:13] [CLEANUP] Rebuilt video layout [10:30:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:13] [CLEANUP] ======================================== [10:30:13] [SERVER] Starting reconnect polling (5s interval) [10:30:14] [LIFECYCLE] App resigning active - cleared crash flag [10:30:15] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [10:30:15] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:30:15] [SECURITY] Saved background timestamp [10:30:15] [LIFECYCLE] App entering background - cleared crash flag [10:30:15] [CLIENT_SIG] Disconnecting [10:30:15] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:30:15] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:30:15] [PUSH_TRACE] 💤 BACKGROUND: memory has 53 messages, first 10 IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:15] [LIFECYCLE] Background snapshot: count=53, maxId=28830 [10:30:15] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [10:30:15] [WS] Canceling WebSocket for query connection to iosILUIWU [10:30:15] In cleanupPeer [10:30:15] In cleanupPeer [10:30:15] [LIFECYCLE] WebRTC audio disabled [10:30:15] [LIFECYCLE] AVAudioSession deactivated [10:30:15] [LIFECYCLE] All connections stopped [10:30:15] [CLIENT_SIG] WebSocket closed with code 1001 [10:30:15] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:30:15] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:30:15] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:30:15] [SERVER] Stopped reconnect polling [10:30:15] [WS] URLSession invalidated successfully [10:30:15] Will request stop of video 0 [10:30:15] Will request stop of video 0 [10:30:15] [PIP] Removing 0 tracks from PiP for connection 0 [10:30:15] [PIP] ✅ All tracks removed for connection 0 [10:30:15] [PIP] Removing 0 tracks from PiP for connection 0 [10:30:15] [PIP] ✅ All tracks removed for connection 0 [10:30:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:15] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:15] HELLO → sent (cached token, role=query) [10:30:15] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:15] [WS] Query connection failed - cleaning up all agent connections and views [10:30:15] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:15] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:15] [CLEANUP] ======================================== [10:30:15] [CLEANUP] Cleaning up all agent connections and views [10:30:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:15] [CLEANUP] Stopped and removed 0 video connections [10:30:15] [CLEANUP] Removed 0 video views [10:30:15] [CLEANUP] Removed 0 feed scroll views [10:30:15] [CLEANUP] Removed 0 status labels [10:30:15] [CLEANUP] Reset agent query state [10:30:15] [CLEANUP] Updated page indicator [10:30:15] [CLEANUP] Rebuilt video layout [10:30:15] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:15] [CLEANUP] ======================================== [10:30:15] [SERVER] Skipping reconnect polling - app is in background [10:30:15] [CLEANUP] ======================================== [10:30:15] [CLEANUP] Cleaning up all agent connections and views [10:30:15] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:15] [CLEANUP] Stopped and removed 0 video connections [10:30:15] [CLEANUP] Removed 0 video views [10:30:15] [CLEANUP] Removed 0 feed scroll views [10:30:15] [CLEANUP] Removed 0 status labels [10:30:15] [CLEANUP] Reset agent query state [10:30:15] [CLEANUP] Updated page indicator [10:30:15] [CLEANUP] Rebuilt video layout [10:30:15] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:15] [CLEANUP] ======================================== [10:30:15] [SERVER] Skipping reconnect polling - app is in background [10:30:31] [PUSH] Silent push received [10:30:31] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:30:31 +0000, appState=2, message_id=nil, type=nil [10:30:31] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:31] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:30:31 +0000 [10:30:31] [PUSH_EMBED] No embedded message_data in notification [10:30:31] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:30:31] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820], handled=false [10:30:31] [PUSH] No embedded data, pre-loading messages from server [10:30:31] [PUSH_PRELOAD] Fetching messages for instant display cache [10:30:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:31] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:30:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:31] [CLIENT_SIG] WebSocket opened [10:30:31] HELLO → sent (cached token, role=query) [10:30:31] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:30:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:31] [WS] Query connection failed - cleaning up all agent connections and views [10:30:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:31] [CLIENT_SIG] Connected! clientId=4kYUx8lo9s7Eo1qz [10:30:31] [CLEANUP] ======================================== [10:30:31] [CLEANUP] Cleaning up all agent connections and views [10:30:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:31] [CLEANUP] Stopped and removed 0 video connections [10:30:31] [CLEANUP] Removed 0 video views [10:30:31] [CLEANUP] Removed 0 feed scroll views [10:30:31] [CLEANUP] Removed 0 status labels [10:30:31] [CLEANUP] Reset agent query state [10:30:31] [CLEANUP] Updated page indicator [10:30:31] [CLEANUP] Rebuilt video layout [10:30:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:31] [CLEANUP] ======================================== [10:30:31] [SERVER] Skipping reconnect polling - app is in background [10:30:31] [CLEANUP] ======================================== [10:30:31] [CLEANUP] Cleaning up all agent connections and views [10:30:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:31] [CLEANUP] Stopped and removed 0 video connections [10:30:31] [CLEANUP] Removed 0 video views [10:30:31] [CLEANUP] Removed 0 feed scroll views [10:30:31] [CLEANUP] Removed 0 status labels [10:30:31] [CLEANUP] Reset agent query state [10:30:31] [CLEANUP] Updated page indicator [10:30:31] [CLEANUP] Rebuilt video layout [10:30:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:31] [CLEANUP] ======================================== [10:30:31] [SERVER] Skipping reconnect polling - app is in background [10:30:31] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:30:31] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:31] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:30:31] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:30:31] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:30:31] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:30:31] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:30:31] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:30:31] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:30:31] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:31] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=51, IDs=[28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821, 28820] [10:30:31] [PRELOAD_CACHE] Preserving 2 push-inserted messages: [28739, 28738] [10:30:31] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=2, IDs=[28739, 28738] [10:30:31] [PUSH_TRACE] 🔀 mergeMessages: merged.count=52, first 10 IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:31] [PUSH_PRELOAD] ⚡ Pre-cached 52 messages for instant display (preserved 2 from push) [10:30:31] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:30:31] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:30:31] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2166 vccs=0 [10:30:31] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28830 [10:30:31] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28830] [10:30:31] [PUSH] Parsed message_id: 28830 [10:30:31] [PUSH] Parsed operation_type: 3 [10:30:31] [PUSH] Taking direct action: opType=3, messageId=28830 [10:30:31] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28830 [10:30:31] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:30:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=53 [10:30:31] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28830 [10:30:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:30:31] [INCREMENTAL_SYNC] ✅ No new messages [10:30:31] [CLIENT_SIG] Event received: type=3 messageId=28830 [10:30:31] [WS_EVENT] Received event: type=3, messageId=28830 [10:30:31] [WS_EVENT] Read receipt for message 28830 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:30:32] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:30:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:30:32] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:30:32] HELLO → sent (cached token, role=query) [10:30:32] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:30:33] [WS] Query connection failed - cleaning up all agent connections and views [10:30:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:30:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:30:33] [CLEANUP] ======================================== [10:30:33] [CLEANUP] Cleaning up all agent connections and views [10:30:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:33] [CLEANUP] Stopped and removed 0 video connections [10:30:33] [CLEANUP] Removed 0 video views [10:30:33] [CLEANUP] Removed 0 feed scroll views [10:30:33] [CLEANUP] Removed 0 status labels [10:30:33] [CLEANUP] Reset agent query state [10:30:33] [CLEANUP] Updated page indicator [10:30:33] [CLEANUP] Rebuilt video layout [10:30:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:33] [CLEANUP] ======================================== [10:30:33] [SERVER] Skipping reconnect polling - app is in background [10:30:33] [CLEANUP] ======================================== [10:30:33] [CLEANUP] Cleaning up all agent connections and views [10:30:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:30:33] [CLEANUP] Stopped and removed 0 video connections [10:30:33] [CLEANUP] Removed 0 video views [10:30:33] [CLEANUP] Removed 0 feed scroll views [10:30:33] [CLEANUP] Removed 0 status labels [10:30:33] [CLEANUP] Reset agent query state [10:30:33] [CLEANUP] Updated page indicator [10:30:33] [CLEANUP] Rebuilt video layout [10:30:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:30:33] [CLEANUP] ======================================== [10:30:33] [SERVER] Skipping reconnect polling - app is in background [10:31:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:12] [PUSH] Silent push received [10:31:12] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:12 +0000, appState=2, message_id=28831, type=nil [10:31:12] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=52, IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:31:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:12 +0000 [10:31:12] [PUSH_TRACE] ⬇️ Processing embedded message_id=28831 [10:31:12] [PUSH_EMBED] 📩 Received embedded message: id=28831, type=0, sender=Esra [10:31:12] [PUSH_TRACE] ⬇️ Message details: text="Lets test the notifications. Otherwise I need to m...", datesent=2026-04-23 08:31:11 [10:31:12] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:31:12] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28831 [10:31:12] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28831 [10:31:12] [PUSH_EMBED] ✅ Saved message 28831 to local DB (sync) [10:31:12] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28831 [10:31:12] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28831 [10:31:12] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28831 [10:31:12] [PUSH_TRACE] 📦 Cache state: valid=true, count=52, IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:31:12] [PUSH_EMBED] Inserted message 28831 into existing cache (now 53 messages) [10:31:12] [PUSH_TRACE] 📦 ✅ Inserted message 28831, cache now has IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:12] [PUSH_TRACE] 📦 EXITING cache update queue for message 28831 [10:31:12] [PUSH_EMBED] Fetching evolution data for message 28831 in background [10:31:12] [PUSH_EMBED] ✅ Fully processed message 28831 [10:31:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28831 [10:31:12] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822], handled=true [10:31:12] [PUSH] Embedded message handled instantly from silent push [10:31:12] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:31:12] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28831 [10:31:12] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:31:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 53 msgs, IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:31:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2208 vccs=0 [10:31:12] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28831 [10:31:12] [PUSH] handlePollEventsNotification userInfo: [:] [10:31:12] [PUSH] No message_id in userInfo [10:31:12] [PUSH] No operation_type in userInfo [10:31:12] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:31:12] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:12] [PUSH_TRACE] 📬 POLL: memory state: count=53, first 10 IDs=[28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822, 28821] [10:31:12] [FAST_REFRESH] Already have 53 messages in memory [10:31:12] [FAST_REFRESH] maxMemoryId=28830, maxLocalId=28831 [10:31:12] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28830) [10:31:12] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 54 total) [10:31:12] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:31:12] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:12] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:31:12] [READBY_OPT] No message IDs to fetch - skipping server call [10:31:12] [GAP_FIX] Incremental sync will use since_id=28830 (background max=28830, current DB max=28831) [10:31:12] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:31:12] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28831 [10:31:12] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:12] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:31:12] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:31:12] [PUSH_TRACE] 👁️ Received message id=28831, text="Lets test the notifications. O..." [10:31:12] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:31:12] [PUSH_UI] Message 28831 already in memory - skipping insert [10:31:12] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:31:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2208 vccs=0 [10:31:12] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28831 [10:31:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("thumb_file_name"): , AnyHashable("message"): Lets test the notifications. Otherwise I need to mute in app settings., AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:31:11"; "file_name" = ""; "is_encrypted" = 0; message = "Lets test the notifications. Otherwise I need to mute in app settings."; "message_id" = 28831; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28830; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): Esra, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("session_id"): ILUIWU, AnyHashable("message_type"): 0, AnyHashable("message_id"): 28831, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("operation_type"): 0, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:31:11, AnyHashable("timer"): 0] [10:31:12] [PUSH_EMBED_VC] Message 28831 already in memory - skipping [10:31:12] [PUSH] ⚡ Embedded message handled directly in ViewController [10:31:12] [PUSH] Parsed message_id: 28831 [10:31:12] [PUSH] Parsed operation_type: 0 [10:31:12] [PUSH] Taking direct action: opType=0, messageId=28831 [10:31:12] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28831 [10:31:12] [PUSH] ⚡ Message 28831 already in memory - skipping duplicate notification entirely [10:31:12] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:12] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:31:12] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:31:12] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:12] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:31:13] [PUSH_EMBED] Got evolution data for message 28831, saving to local DB [10:31:13] [PUSH_EMBED] Saved evolution data for message 28831 [10:31:13] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:13] HELLO → sent (cached token, role=query) [10:31:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:31:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:13] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:13] [SCROLL] wasNearBottom=true, threshold=447, offset=4474, contentH=4921, boundsH=447, forceScroll=false [10:31:13] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:13] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:13] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28831] [10:31:13] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28830 → 28831 [10:31:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:31:13] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:13] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:13] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:13] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:13] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:31:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:31:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28831, maxMemoryId=28831 [10:31:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28831 [10:31:13] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4572, currentOffset=4474 [10:31:13] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:13] [WS] Query connection failed - cleaning up all agent connections and views [10:31:13] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:13] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:13] [FAST_REFRESH] Incremental sync complete - 54 messages [10:31:13] [CLEANUP] ======================================== [10:31:13] [CLEANUP] Cleaning up all agent connections and views [10:31:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:13] [CLEANUP] Stopped and removed 0 video connections [10:31:13] [CLEANUP] Removed 0 video views [10:31:13] [CLEANUP] Removed 0 feed scroll views [10:31:13] [CLEANUP] Removed 0 status labels [10:31:13] [CLEANUP] Reset agent query state [10:31:13] [CLEANUP] Updated page indicator [10:31:13] [CLEANUP] Rebuilt video layout [10:31:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:13] [CLEANUP] ======================================== [10:31:13] [SERVER] Skipping reconnect polling - app is in background [10:31:13] [CLEANUP] ======================================== [10:31:13] [CLEANUP] Cleaning up all agent connections and views [10:31:13] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:13] [CLEANUP] Stopped and removed 0 video connections [10:31:13] [CLEANUP] Removed 0 video views [10:31:13] [CLEANUP] Removed 0 feed scroll views [10:31:13] [CLEANUP] Removed 0 status labels [10:31:13] [CLEANUP] Reset agent query state [10:31:13] [CLEANUP] Updated page indicator [10:31:13] [CLEANUP] Rebuilt video layout [10:31:13] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:13] [CLEANUP] ======================================== [10:31:13] [SERVER] Skipping reconnect polling - app is in background [10:31:13] [INCREMENTAL_SYNC] ✅ No new messages [10:31:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [10:31:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:13] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:13] [SCROLL] wasNearBottom=true, threshold=447, offset=4474, contentH=5019, boundsH=447, forceScroll=false [10:31:13] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:13] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:31:14] [PUSH] Silent push received [10:31:14] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:14 +0000, appState=2, message_id=nil, type=nil [10:31:14] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:14 +0000 [10:31:14] [PUSH_EMBED] No embedded message_data in notification [10:31:14] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:31:14] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822], handled=false [10:31:14] [PUSH] No embedded data, pre-loading messages from server [10:31:14] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:14] HELLO → sent (cached token, role=query) [10:31:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:14] [WS] Query connection failed - cleaning up all agent connections and views [10:31:14] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:14] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:14] [CLEANUP] ======================================== [10:31:14] [CLEANUP] Cleaning up all agent connections and views [10:31:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:14] [CLEANUP] Stopped and removed 0 video connections [10:31:14] [CLEANUP] Removed 0 video views [10:31:14] [CLEANUP] Removed 0 feed scroll views [10:31:14] [CLEANUP] Removed 0 status labels [10:31:14] [CLEANUP] Reset agent query state [10:31:14] [CLEANUP] Updated page indicator [10:31:14] [CLEANUP] Rebuilt video layout [10:31:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:14] [CLEANUP] ======================================== [10:31:14] [SERVER] Skipping reconnect polling - app is in background [10:31:14] [CLEANUP] ======================================== [10:31:14] [CLEANUP] Cleaning up all agent connections and views [10:31:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:14] [CLEANUP] Stopped and removed 0 video connections [10:31:14] [CLEANUP] Removed 0 video views [10:31:14] [CLEANUP] Removed 0 feed scroll views [10:31:14] [CLEANUP] Removed 0 status labels [10:31:14] [CLEANUP] Reset agent query state [10:31:14] [CLEANUP] Updated page indicator [10:31:14] [CLEANUP] Rebuilt video layout [10:31:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:14] [CLEANUP] ======================================== [10:31:14] [SERVER] Skipping reconnect polling - app is in background [10:31:15] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:31:15] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:31:15] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:31:15] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:31:15] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:31:15] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:31:15] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [PRELOAD_CACHE] Preserving 3 push-inserted messages: [28740, 28739, 28738] [10:31:15] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=3, IDs=[28740, 28739, 28738] [10:31:15] [PUSH_TRACE] 🔀 mergeMessages: merged.count=53, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [PUSH_PRELOAD] ⚡ Pre-cached 53 messages for instant display (preserved 3 from push) [10:31:15] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:31:15] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2210 vccs=0 [10:31:15] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28831 [10:31:15] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28831, AnyHashable("operation_type"): 3] [10:31:15] [PUSH] Parsed message_id: 28831 [10:31:15] [PUSH] Parsed operation_type: 3 [10:31:15] [PUSH] Taking direct action: opType=3, messageId=28831 [10:31:15] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28831 [10:31:15] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:15] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:31:15] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28831 [10:31:15] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:15] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:15] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28831] [10:31:15] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:15] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:15] [SCROLL_END_DECEL] messagesTable offsetY=4474, insetTop=0, pendingVelocityY=0.0 [10:31:15] [SCROLL] 💓 alive, visible=49...55, rows=56, estHeight=0.0, heightCalls=1 [10:31:15] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:31:15] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:15] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:15] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:15] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:15] [SCROLL] wasNearBottom=true, threshold=447, offset=4559, contentH=5019, boundsH=447, forceScroll=false [10:31:15] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:15] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:31:15] [SCROLL_END_DECEL] messagesTable offsetY=4572, insetTop=0, pendingVelocityY=0.0 [10:31:23] [PUSH] Notification tapped - session_id: ILUIWU [10:31:23] [PUSH] Max message_id before tap: 28831 [10:31:23] [PUSH] Stored pending session: ILUIWU [10:31:23] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:23 +0000 [10:31:23] [PUSH_TRACE] ⬇️ Processing embedded message_id=28831 [10:31:23] [PUSH_EMBED] 📩 Received embedded message: id=28831, type=0, sender=Esra [10:31:23] [PUSH_TRACE] ⬇️ Message details: text="Lets test the notifications. Otherwise I need to m...", datesent=2026-04-23 08:31:11 [10:31:23] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:31:23] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28831 [10:31:23] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28831 [10:31:23] [PUSH_EMBED] ✅ Saved message 28831 to local DB (sync) [10:31:23] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28831 [10:31:23] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28831 [10:31:23] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28831 [10:31:23] [PUSH_TRACE] 📦 Cache state: valid=true, count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [PUSH_TRACE] 📦 ⚠️ Message 28831 already in cache, skipping insert [10:31:23] [PUSH_TRACE] 📦 EXITING cache update queue for message 28831 [10:31:23] [PUSH_EMBED] Fetching evolution data for message 28831 in background [10:31:23] [PUSH_EMBED] ✅ Fully processed message 28831 [10:31:23] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28831 [10:31:23] [PUSH] Embedded message handled instantly on tap [10:31:23] [SECURITY] Timeout check: elapsed=68.09459519386292s, timeout=300.0s [10:31:23] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:31:23] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:31:23] [PUSH] Fetching server messages since_id=28831 to catch coalesced notifications on tap [10:31:23] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28831 to catch coalesced notifications [10:31:23] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:23] [LIFECYCLE] App entering foreground - restoring connections [10:31:23] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [10:31:23] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:31:23] [PUSH_TRACE] 🔄 FOREGROUND: memory has 54 msgs, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [PUSH_TRACE] 🔄 FOREGROUND: cache has 53 msgs, valid=true, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [UPLOAD_RETRY] No pending uploads to retry [10:31:23] [NETWORK] Status changed: connected [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [READBY_OPT] No message IDs to fetch - skipping server call [10:31:23] [LIFECYCLE] WebRTC audio re-enabled [10:31:23] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:31:23] [CLIENT_SIG] Skipping connect - app in background (state=2) [10:31:23] [VIEWER] Reconnecting after background - querying agents [10:31:23] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=completed [10:31:23] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:31:23] [UNSENT_RETRY] Checking for unsent messages... [10:31:23] [PENDING_UPLOAD] Total pending upload messages: 0 [10:31:23] [UNSENT_RETRY] No unsent messages found [10:31:23] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:23] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:23] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:31:23] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:31:23] [PUSH_TRACE] 👁️ Received message id=28831, text="Lets test the notifications. O..." [10:31:23] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:31:23] [PUSH_UI] Message 28831 already in memory - skipping insert [10:31:23] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:31:23] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [10:31:23] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:31:23] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [10:31:23] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:31:23] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [10:31:23] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=54>53=true, maxId=28831>28830=true, shouldScroll=true [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:31:23] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:23] HELLO → sent (cached token, role=query) [10:31:23] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:23] [WS] Query connection failed - cleaning up all agent connections and views [10:31:23] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:23] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:23] [CLEANUP] ======================================== [10:31:23] [CLEANUP] Cleaning up all agent connections and views [10:31:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:23] [CLEANUP] Stopped and removed 0 video connections [10:31:23] [CLEANUP] Removed 0 video views [10:31:23] [CLEANUP] Removed 0 feed scroll views [10:31:23] [CLEANUP] Removed 0 status labels [10:31:23] [CLEANUP] Reset agent query state [10:31:23] [CLEANUP] Updated page indicator [10:31:23] [CLEANUP] Rebuilt video layout [10:31:23] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:23] [CLEANUP] ======================================== [10:31:23] [SERVER] Starting reconnect polling (5s interval) [10:31:23] [CLEANUP] ======================================== [10:31:23] [CLEANUP] Cleaning up all agent connections and views [10:31:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:23] [CLEANUP] Stopped and removed 0 video connections [10:31:23] [CLEANUP] Removed 0 video views [10:31:23] [CLEANUP] Removed 0 feed scroll views [10:31:23] [CLEANUP] Removed 0 status labels [10:31:23] [CLEANUP] Reset agent query state [10:31:23] [CLEANUP] Updated page indicator [10:31:23] [CLEANUP] Rebuilt video layout [10:31:23] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:23] [CLEANUP] ======================================== [10:31:23] [SERVER] Starting reconnect polling (5s interval) [10:31:23] [PUSH_EMBED] Got evolution data for message 28831, saving to local DB [10:31:23] [PUSH_EMBED] Saved evolution data for message 28831 [10:31:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:31:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:23] [SCROLL] wasNearBottom=true, threshold=447, offset=4572, contentH=5019, boundsH=447, forceScroll=true [10:31:23] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:23] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:31:23] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4572, currentOffset=4572 [10:31:23] [SCROLL] Scrolling to 4572, animated=false [10:31:23] [PUSH_PRELOAD] No messages or parse error [10:31:23] [PUSH] Server fetch on tap completed (success=false) [10:31:23] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2218 vccs=0 [10:31:23] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28831 [10:31:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28831, AnyHashable("message_type"): 0, AnyHashable("message"): Lets test the notifications. Otherwise I need to mute in app settings., AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("sender_name"): Esra, AnyHashable("datesent"): 2026-04-23 08:31:11, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:31:11"; "file_name" = ""; "is_encrypted" = 0; message = "Lets test the notifications. Otherwise I need to mute in app settings."; "message_id" = 28831; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28830; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("timer"): 0, AnyHashable("operation_type"): 0] [10:31:23] [PUSH_EMBED_VC] Message 28831 already in memory - skipping [10:31:23] [PUSH] ⚡ Embedded message handled directly in ViewController [10:31:23] [PUSH] Parsed message_id: 28831 [10:31:23] [PUSH] Parsed operation_type: 0 [10:31:23] [PUSH] Taking direct action: opType=0, messageId=28831 [10:31:23] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28831 [10:31:23] [PUSH] ⚡ Message 28831 already in memory - skipping duplicate notification entirely [10:31:23] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:23] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28831 [10:31:23] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:23] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28831] [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:31:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:23] [SCROLL] wasNearBottom=true, threshold=447, offset=4572, contentH=5019, boundsH=447, forceScroll=true [10:31:23] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:23] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:31:23] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:31:23] [SECURITY] Within timeout - cleared background flag [10:31:23] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:31:23] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 54 msgs, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2218 vccs=0 [10:31:23] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28831 [10:31:23] [PUSH] handlePollEventsNotification userInfo: [:] [10:31:23] [PUSH] No message_id in userInfo [10:31:23] [PUSH] No operation_type in userInfo [10:31:23] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:31:23] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [PUSH_TRACE] 📬 POLL: memory state: count=54, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [FAST_REFRESH] Already have 54 messages in memory [10:31:23] [FAST_REFRESH] maxMemoryId=28831, maxLocalId=28831 [10:31:23] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:31:23] [READBY_OPT] No message IDs to fetch - skipping server call [10:31:23] [GAP_FIX] Incremental sync will use since_id=28830 (background max=28830, current DB max=28831) [10:31:23] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=54 [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28831 [10:31:23] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:23] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4572, currentOffset=4572 [10:31:23] [SCROLL] Scrolling to 4572, animated=false [10:31:23] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:31:23] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28831] [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 54 msgs, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 54, first 10 IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=54 [10:31:23] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:31:23] [FAST_REFRESH] Incremental sync complete - 54 messages [10:31:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:31:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=54, first5Ids=[28831, 28830, 28829, 28828, 28827] [10:31:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 54 messages [10:31:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:23] [RELOAD_TAB] 📊 Building chatRows from 54 messages [10:31:23] [SCROLL] wasNearBottom=true, threshold=447, offset=4572, contentH=5019, boundsH=447, forceScroll=true [10:31:23] [RELOAD_TAB] 📊 Built 56 chatRows, estHeight=0.0 [10:31:24] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=61 [10:31:24] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4572, currentOffset=4572 [10:31:24] [SCROLL] Scrolling to 4572, animated=false [10:31:24] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:24] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:24] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:24] HELLO → sent (cached token, role=query) [10:31:24] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:24] [WS] Query connection failed - cleaning up all agent connections and views [10:31:24] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:24] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:24] [CLEANUP] ======================================== [10:31:24] [CLEANUP] Cleaning up all agent connections and views [10:31:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:24] [CLEANUP] Stopped and removed 0 video connections [10:31:24] [CLEANUP] Removed 0 video views [10:31:24] [CLEANUP] Removed 0 feed scroll views [10:31:24] [CLEANUP] Removed 0 status labels [10:31:24] [CLEANUP] Reset agent query state [10:31:24] [CLEANUP] Updated page indicator [10:31:24] [CLEANUP] Rebuilt video layout [10:31:24] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:24] [CLEANUP] ======================================== [10:31:25] [SERVER] Starting reconnect polling (5s interval) [10:31:25] [CLEANUP] ======================================== [10:31:25] [CLEANUP] Cleaning up all agent connections and views [10:31:25] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:25] [CLEANUP] Stopped and removed 0 video connections [10:31:25] [CLEANUP] Removed 0 video views [10:31:25] [CLEANUP] Removed 0 feed scroll views [10:31:25] [CLEANUP] Removed 0 status labels [10:31:25] [CLEANUP] Reset agent query state [10:31:25] [CLEANUP] Updated page indicator [10:31:25] [CLEANUP] Rebuilt video layout [10:31:25] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:25] [CLEANUP] ======================================== [10:31:25] [SERVER] Starting reconnect polling (5s interval) [10:31:26] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:26] HELLO → sent (cached token, role=query) [10:31:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:26] [WS] Query connection failed - cleaning up all agent connections and views [10:31:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:26] [CLEANUP] ======================================== [10:31:26] [CLEANUP] Cleaning up all agent connections and views [10:31:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:26] [CLEANUP] Stopped and removed 0 video connections [10:31:26] [CLEANUP] Removed 0 video views [10:31:26] [CLEANUP] Removed 0 feed scroll views [10:31:26] [CLEANUP] Removed 0 status labels [10:31:26] [CLEANUP] Reset agent query state [10:31:26] [CLEANUP] Updated page indicator [10:31:26] [CLEANUP] Rebuilt video layout [10:31:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:26] [CLEANUP] ======================================== [10:31:26] [SERVER] Starting reconnect polling (5s interval) [10:31:26] [CLEANUP] ======================================== [10:31:26] [CLEANUP] Cleaning up all agent connections and views [10:31:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:26] [CLEANUP] Stopped and removed 0 video connections [10:31:26] [CLEANUP] Removed 0 video views [10:31:26] [CLEANUP] Removed 0 feed scroll views [10:31:26] [CLEANUP] Removed 0 status labels [10:31:26] [CLEANUP] Reset agent query state [10:31:26] [CLEANUP] Updated page indicator [10:31:26] [CLEANUP] Rebuilt video layout [10:31:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:26] [CLEANUP] ======================================== [10:31:26] [SERVER] Starting reconnect polling (5s interval) [10:31:27] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:31:27] [CLIENT_SIG] WebSocket opened [10:31:27] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:31:27] [CLIENT_SIG] Connected! clientId=tLg_8iAlZK4uaKhx [10:31:27] [CLIENT_SIG] Received 1 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:31:27] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:31:28] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:28] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:28] HELLO → sent (cached token, role=query) [10:31:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:28] [WS] Query connection failed - cleaning up all agent connections and views [10:31:28] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:28] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:28] [CLEANUP] ======================================== [10:31:28] [CLEANUP] Cleaning up all agent connections and views [10:31:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:28] [CLEANUP] Stopped and removed 0 video connections [10:31:28] [CLEANUP] Removed 0 video views [10:31:28] [CLEANUP] Removed 0 feed scroll views [10:31:28] [CLEANUP] Removed 0 status labels [10:31:28] [CLEANUP] Reset agent query state [10:31:28] [CLEANUP] Updated page indicator [10:31:28] [CLEANUP] Rebuilt video layout [10:31:28] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:28] [CLEANUP] ======================================== [10:31:28] [SERVER] Starting reconnect polling (5s interval) [10:31:28] [CLEANUP] ======================================== [10:31:28] [CLEANUP] Cleaning up all agent connections and views [10:31:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:28] [CLEANUP] Stopped and removed 0 video connections [10:31:28] [CLEANUP] Removed 0 video views [10:31:28] [CLEANUP] Removed 0 feed scroll views [10:31:28] [CLEANUP] Removed 0 status labels [10:31:28] [CLEANUP] Reset agent query state [10:31:28] [CLEANUP] Updated page indicator [10:31:28] [CLEANUP] Rebuilt video layout [10:31:28] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:28] [CLEANUP] ======================================== [10:31:28] [SERVER] Starting reconnect polling (5s interval) [10:31:29] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:29] HELLO → sent (cached token, role=query) [10:31:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:29] [WS] Query connection failed - cleaning up all agent connections and views [10:31:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:29] [CLEANUP] ======================================== [10:31:29] [CLEANUP] Cleaning up all agent connections and views [10:31:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:29] [CLEANUP] Stopped and removed 0 video connections [10:31:29] [CLEANUP] Removed 0 video views [10:31:29] [CLEANUP] Removed 0 feed scroll views [10:31:29] [CLEANUP] Removed 0 status labels [10:31:29] [CLEANUP] Reset agent query state [10:31:29] [CLEANUP] Updated page indicator [10:31:29] [CLEANUP] Rebuilt video layout [10:31:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:29] [CLEANUP] ======================================== [10:31:29] [SERVER] Starting reconnect polling (5s interval) [10:31:29] [CLEANUP] ======================================== [10:31:29] [CLEANUP] Cleaning up all agent connections and views [10:31:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:29] [CLEANUP] Stopped and removed 0 video connections [10:31:29] [CLEANUP] Removed 0 video views [10:31:29] [CLEANUP] Removed 0 feed scroll views [10:31:29] [CLEANUP] Removed 0 status labels [10:31:29] [CLEANUP] Reset agent query state [10:31:29] [CLEANUP] Updated page indicator [10:31:29] [CLEANUP] Rebuilt video layout [10:31:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:29] [CLEANUP] ======================================== [10:31:29] [SERVER] Starting reconnect polling (5s interval) [10:31:31] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:31:31] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=54, isReloading=false [10:31:31] [SEND_MESSAGE] ✅ Added optimistic message id=-4 to arrays, newMsgCount=55 [10:31:31] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=61 [10:31:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[-4, 28831, 28830, 28829, 28828] [10:31:31] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [10:31:31] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-4, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [10:31:31] [RELOAD_TAB] 📊 Building chatRows from 55 messages [10:31:31] [SCROLL] wasNearBottom=true, threshold=447, offset=4572, contentH=5019, boundsH=447, forceScroll=false [10:31:31] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [10:31:31] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:31:31] [SCROLL] 💓 alive, visible=51...56, rows=57, estHeight=0.0, heightCalls=121 [10:31:31] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:31:31] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:31:31] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4649, currentOffset=4649 [10:31:31] [SCROLL] Scrolling to 4649, animated=true [10:31:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:31] [CLIENT_SIG] Event received: type=0 messageId=28832 [10:31:31] [WS_EVENT] Received event: type=0, messageId=28832 [10:31:31] [WS_EVENT] 📨 New message notification (msgId=28832) - triggering incremental refresh, currentMsgCount=55 [10:31:31] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=55 [10:31:31] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28831, maxMemoryId=28831 [10:31:31] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28831 [10:31:31] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28832,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:31:31"} [10:31:31] [CHAT] receive_message.php JSON: ["message_id": 28832, "ok": 1, "datesent_utc": 2026-04-23 08:31:31, "message_type": 0, "session_id": ILUIWU, "file_name": ] [10:31:31] [DB_UPGRADE] Upgrading message ID: -4 → 28832, preserveOriginalDate=false [10:31:31] [DB_UPGRADE] ✅ Upgraded -4 → 28832 with send_status=0, 1 row(s) affected [10:31:31] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -4 → 28832 [10:31:31] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -4 → 28832 [10:31:31] ReloadData 9 [10:31:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:31] HELLO → sent (cached token, role=query) [10:31:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:31] [WS] Query connection failed - cleaning up all agent connections and views [10:31:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:31] [CLEANUP] ======================================== [10:31:31] [CLEANUP] Cleaning up all agent connections and views [10:31:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:31] [CLEANUP] Stopped and removed 0 video connections [10:31:31] [CLEANUP] Removed 0 video views [10:31:31] [CLEANUP] Removed 0 feed scroll views [10:31:31] [CLEANUP] Removed 0 status labels [10:31:31] [CLEANUP] Reset agent query state [10:31:31] [CLEANUP] Updated page indicator [10:31:31] [CLEANUP] Rebuilt video layout [10:31:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:31] [CLEANUP] ======================================== [10:31:31] [SERVER] Starting reconnect polling (5s interval) [10:31:31] [CLEANUP] ======================================== [10:31:31] [CLEANUP] Cleaning up all agent connections and views [10:31:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:31] [CLEANUP] Stopped and removed 0 video connections [10:31:31] [CLEANUP] Removed 0 video views [10:31:31] [CLEANUP] Removed 0 feed scroll views [10:31:31] [CLEANUP] Removed 0 status labels [10:31:31] [CLEANUP] Reset agent query state [10:31:31] [CLEANUP] Updated page indicator [10:31:31] [CLEANUP] Rebuilt video layout [10:31:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:31] [CLEANUP] ======================================== [10:31:31] [SERVER] Starting reconnect polling (5s interval) [10:31:31] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:31] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28832] [10:31:31] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 55 msgs, first 10 IDs=[28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [10:31:31] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 55, first 10 IDs=[28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [10:31:31] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:31] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=55 [10:31:31] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=55 [10:31:31] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [10:31:31] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=55, first5Ids=[28832, 28831, 28830, 28829, 28828] [10:31:31] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 55 messages [10:31:31] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823] [10:31:31] [RELOAD_TAB] 📊 Building chatRows from 55 messages [10:31:31] [SCROLL] wasNearBottom=true, threshold=447, offset=4649, contentH=5096, boundsH=447, forceScroll=true [10:31:31] [RELOAD_TAB] 📊 Built 57 chatRows, estHeight=0.0 [10:31:31] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=63 [10:31:31] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4649, currentOffset=4649 [10:31:31] [SCROLL] Scrolling to 4649, animated=false [10:31:33] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:33] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:33] HELLO → sent (cached token, role=query) [10:31:33] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:33] [WS] Query connection failed - cleaning up all agent connections and views [10:31:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:33] [CLEANUP] ======================================== [10:31:33] [CLEANUP] Cleaning up all agent connections and views [10:31:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:33] [CLEANUP] Stopped and removed 0 video connections [10:31:33] [CLEANUP] Removed 0 video views [10:31:33] [CLEANUP] Removed 0 feed scroll views [10:31:33] [CLEANUP] Removed 0 status labels [10:31:33] [CLEANUP] Reset agent query state [10:31:33] [CLEANUP] Updated page indicator [10:31:33] [CLEANUP] Rebuilt video layout [10:31:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:33] [CLEANUP] ======================================== [10:31:33] [SERVER] Starting reconnect polling (5s interval) [10:31:33] [CLEANUP] ======================================== [10:31:33] [CLEANUP] Cleaning up all agent connections and views [10:31:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:33] [CLEANUP] Stopped and removed 0 video connections [10:31:33] [CLEANUP] Removed 0 video views [10:31:33] [CLEANUP] Removed 0 feed scroll views [10:31:33] [CLEANUP] Removed 0 status labels [10:31:33] [CLEANUP] Reset agent query state [10:31:33] [CLEANUP] Updated page indicator [10:31:33] [CLEANUP] Rebuilt video layout [10:31:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:33] [CLEANUP] ======================================== [10:31:33] [SERVER] Starting reconnect polling (5s interval) [10:31:34] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:34] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:35] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:35] HELLO → sent (cached token, role=query) [10:31:35] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:35] [WS] Query connection failed - cleaning up all agent connections and views [10:31:35] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:35] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:35] [CLEANUP] ======================================== [10:31:35] [CLEANUP] Cleaning up all agent connections and views [10:31:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:35] [CLEANUP] Stopped and removed 0 video connections [10:31:35] [CLEANUP] Removed 0 video views [10:31:35] [CLEANUP] Removed 0 feed scroll views [10:31:35] [CLEANUP] Removed 0 status labels [10:31:35] [CLEANUP] Reset agent query state [10:31:35] [CLEANUP] Updated page indicator [10:31:35] [CLEANUP] Rebuilt video layout [10:31:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:35] [CLEANUP] ======================================== [10:31:35] [SERVER] Starting reconnect polling (5s interval) [10:31:35] [CLEANUP] ======================================== [10:31:35] [CLEANUP] Cleaning up all agent connections and views [10:31:35] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:35] [CLEANUP] Stopped and removed 0 video connections [10:31:35] [CLEANUP] Removed 0 video views [10:31:35] [CLEANUP] Removed 0 feed scroll views [10:31:35] [CLEANUP] Removed 0 status labels [10:31:35] [CLEANUP] Reset agent query state [10:31:35] [CLEANUP] Updated page indicator [10:31:35] [CLEANUP] Rebuilt video layout [10:31:35] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:35] [CLEANUP] ======================================== [10:31:35] [SERVER] Starting reconnect polling (5s interval) [10:31:36] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:36] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:36] HELLO → sent (cached token, role=query) [10:31:36] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:36] [WS] Query connection failed - cleaning up all agent connections and views [10:31:36] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:36] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:36] [CLEANUP] ======================================== [10:31:36] [CLEANUP] Cleaning up all agent connections and views [10:31:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:36] [CLEANUP] Stopped and removed 0 video connections [10:31:36] [CLEANUP] Removed 0 video views [10:31:36] [CLEANUP] Removed 0 feed scroll views [10:31:36] [CLEANUP] Removed 0 status labels [10:31:36] [CLEANUP] Reset agent query state [10:31:36] [CLEANUP] Updated page indicator [10:31:36] [CLEANUP] Rebuilt video layout [10:31:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:36] [CLEANUP] ======================================== [10:31:36] [SERVER] Starting reconnect polling (5s interval) [10:31:36] [CLEANUP] ======================================== [10:31:36] [CLEANUP] Cleaning up all agent connections and views [10:31:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:36] [CLEANUP] Stopped and removed 0 video connections [10:31:36] [CLEANUP] Removed 0 video views [10:31:36] [CLEANUP] Removed 0 feed scroll views [10:31:36] [CLEANUP] Removed 0 status labels [10:31:36] [CLEANUP] Reset agent query state [10:31:36] [CLEANUP] Updated page indicator [10:31:36] [CLEANUP] Rebuilt video layout [10:31:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:36] [CLEANUP] ======================================== [10:31:36] [SERVER] Starting reconnect polling (5s interval) [10:31:38] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:38] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:38] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:38] HELLO → sent (cached token, role=query) [10:31:38] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:38] [WS] Query connection failed - cleaning up all agent connections and views [10:31:38] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:38] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:38] [CLEANUP] ======================================== [10:31:38] [CLEANUP] Cleaning up all agent connections and views [10:31:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:38] [CLEANUP] Stopped and removed 0 video connections [10:31:38] [CLEANUP] Removed 0 video views [10:31:38] [CLEANUP] Removed 0 feed scroll views [10:31:38] [CLEANUP] Removed 0 status labels [10:31:38] [CLEANUP] Reset agent query state [10:31:38] [CLEANUP] Updated page indicator [10:31:38] [CLEANUP] Rebuilt video layout [10:31:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:38] [CLEANUP] ======================================== [10:31:38] [SERVER] Starting reconnect polling (5s interval) [10:31:38] [CLEANUP] ======================================== [10:31:38] [CLEANUP] Cleaning up all agent connections and views [10:31:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:38] [CLEANUP] Stopped and removed 0 video connections [10:31:38] [CLEANUP] Removed 0 video views [10:31:38] [CLEANUP] Removed 0 feed scroll views [10:31:38] [CLEANUP] Removed 0 status labels [10:31:38] [CLEANUP] Reset agent query state [10:31:38] [CLEANUP] Updated page indicator [10:31:38] [CLEANUP] Rebuilt video layout [10:31:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:38] [CLEANUP] ======================================== [10:31:38] [SERVER] Starting reconnect polling (5s interval) [10:31:39] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:31:39] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=55, isReloading=false [10:31:39] [SEND_MESSAGE] ✅ Added optimistic message id=-5 to arrays, newMsgCount=56 [10:31:39] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=63 [10:31:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[-5, 28832, 28831, 28830, 28829] [10:31:39] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 56 messages [10:31:39] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-5, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [10:31:39] [RELOAD_TAB] 📊 Building chatRows from 56 messages [10:31:39] [SCROLL] wasNearBottom=true, threshold=447, offset=4649, contentH=5096, boundsH=447, forceScroll=false [10:31:39] [RELOAD_TAB] 📊 Built 58 chatRows, estHeight=0.0 [10:31:39] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=65 [10:31:39] [SCROLL] 💓 alive, visible=51...57, rows=58, estHeight=0.0, heightCalls=124 [10:31:39] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:31:39] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:31:39] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4701, currentOffset=4701 [10:31:39] [SCROLL] Scrolling to 4701, animated=true [10:31:39] [CLIENT_SIG] Event received: type=0 messageId=28833 [10:31:39] [WS_EVENT] Received event: type=0, messageId=28833 [10:31:39] [WS_EVENT] 📨 New message notification (msgId=28833) - triggering incremental refresh, currentMsgCount=56 [10:31:39] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=56 [10:31:39] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28832, maxMemoryId=28832 [10:31:39] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28832 [10:31:39] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28833,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:31:39"} [10:31:39] [CHAT] receive_message.php JSON: ["datesent_utc": 2026-04-23 08:31:39, "ok": 1, "file_name": , "session_id": ILUIWU, "message_type": 0, "message_id": 28833] [10:31:39] [DB_UPGRADE] Upgrading message ID: -5 → 28833, preserveOriginalDate=false [10:31:39] [DB_UPGRADE] ✅ Upgraded -5 → 28833 with send_status=0, 1 row(s) affected [10:31:39] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -5 → 28833 [10:31:39] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -5 → 28833 [10:31:39] ReloadData 9 [10:31:39] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:39] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28833] [10:31:39] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 56 msgs, first 10 IDs=[28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [10:31:39] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 56, first 10 IDs=[28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [10:31:39] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:39] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=56 [10:31:39] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=56 [10:31:39] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [10:31:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=56, first5Ids=[28833, 28832, 28831, 28830, 28829] [10:31:39] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 56 messages [10:31:39] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824] [10:31:39] [RELOAD_TAB] 📊 Building chatRows from 56 messages [10:31:39] [SCROLL] wasNearBottom=true, threshold=447, offset=4701, contentH=5148, boundsH=447, forceScroll=true [10:31:39] [RELOAD_TAB] 📊 Built 58 chatRows, estHeight=0.0 [10:31:39] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=64 [10:31:39] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4701, currentOffset=4701 [10:31:39] [SCROLL] Scrolling to 4701, animated=false [10:31:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:39] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:39] HELLO → sent (cached token, role=query) [10:31:39] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:39] [WS] Query connection failed - cleaning up all agent connections and views [10:31:39] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:39] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:39] [CLEANUP] ======================================== [10:31:39] [CLEANUP] Cleaning up all agent connections and views [10:31:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:39] [CLEANUP] Stopped and removed 0 video connections [10:31:39] [CLEANUP] Removed 0 video views [10:31:39] [CLEANUP] Removed 0 feed scroll views [10:31:39] [CLEANUP] Removed 0 status labels [10:31:39] [CLEANUP] Reset agent query state [10:31:39] [CLEANUP] Updated page indicator [10:31:39] [CLEANUP] Rebuilt video layout [10:31:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:39] [CLEANUP] ======================================== [10:31:39] [SERVER] Starting reconnect polling (5s interval) [10:31:39] [CLEANUP] ======================================== [10:31:39] [CLEANUP] Cleaning up all agent connections and views [10:31:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:39] [CLEANUP] Stopped and removed 0 video connections [10:31:39] [CLEANUP] Removed 0 video views [10:31:39] [CLEANUP] Removed 0 feed scroll views [10:31:39] [CLEANUP] Removed 0 status labels [10:31:39] [CLEANUP] Reset agent query state [10:31:39] [CLEANUP] Updated page indicator [10:31:39] [CLEANUP] Rebuilt video layout [10:31:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:39] [CLEANUP] ======================================== [10:31:39] [SERVER] Starting reconnect polling (5s interval) [10:31:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:41] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:41] HELLO → sent (cached token, role=query) [10:31:41] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:41] [WS] Query connection failed - cleaning up all agent connections and views [10:31:41] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:41] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:41] [CLEANUP] ======================================== [10:31:41] [CLEANUP] Cleaning up all agent connections and views [10:31:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:41] [CLEANUP] Stopped and removed 0 video connections [10:31:41] [CLEANUP] Removed 0 video views [10:31:41] [CLEANUP] Removed 0 feed scroll views [10:31:41] [CLEANUP] Removed 0 status labels [10:31:41] [CLEANUP] Reset agent query state [10:31:41] [CLEANUP] Updated page indicator [10:31:41] [CLEANUP] Rebuilt video layout [10:31:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:41] [CLEANUP] ======================================== [10:31:41] [SERVER] Starting reconnect polling (5s interval) [10:31:41] [CLEANUP] ======================================== [10:31:41] [CLEANUP] Cleaning up all agent connections and views [10:31:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:41] [CLEANUP] Stopped and removed 0 video connections [10:31:41] [CLEANUP] Removed 0 video views [10:31:41] [CLEANUP] Removed 0 feed scroll views [10:31:41] [CLEANUP] Removed 0 status labels [10:31:41] [CLEANUP] Reset agent query state [10:31:41] [CLEANUP] Updated page indicator [10:31:41] [CLEANUP] Rebuilt video layout [10:31:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:41] [CLEANUP] ======================================== [10:31:41] [SERVER] Starting reconnect polling (5s interval) [10:31:42] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:31:42] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=56, isReloading=false [10:31:42] [SEND_MESSAGE] ✅ Added optimistic message id=-6 to arrays, newMsgCount=57 [10:31:42] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=64 [10:31:42] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[-6, 28833, 28832, 28831, 28830] [10:31:42] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 57 messages [10:31:42] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-6, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [10:31:42] [RELOAD_TAB] 📊 Building chatRows from 57 messages [10:31:42] [SCROLL] wasNearBottom=true, threshold=447, offset=4701, contentH=5148, boundsH=447, forceScroll=false [10:31:42] [RELOAD_TAB] 📊 Built 59 chatRows, estHeight=0.0 [10:31:42] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=66 [10:31:42] [SCROLL] 💓 alive, visible=52...58, rows=59, estHeight=0.0, heightCalls=126 [10:31:42] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:31:42] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:31:42] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4753, currentOffset=4753 [10:31:42] [SCROLL] Scrolling to 4753, animated=true [10:31:42] [CLIENT_SIG] Event received: type=0 messageId=28834 [10:31:42] [WS_EVENT] Received event: type=0, messageId=28834 [10:31:42] [WS_EVENT] 📨 New message notification (msgId=28834) - triggering incremental refresh, currentMsgCount=57 [10:31:42] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=57 [10:31:42] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28833, maxMemoryId=28833 [10:31:42] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28833 [10:31:42] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28834,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:31:42"} [10:31:42] [CHAT] receive_message.php JSON: ["session_id": ILUIWU, "datesent_utc": 2026-04-23 08:31:42, "file_name": , "ok": 1, "message_type": 0, "message_id": 28834] [10:31:42] [DB_UPGRADE] Upgrading message ID: -6 → 28834, preserveOriginalDate=false [10:31:42] [DB_UPGRADE] ✅ Upgraded -6 → 28834 with send_status=0, 1 row(s) affected [10:31:42] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -6 → 28834 [10:31:42] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -6 → 28834 [10:31:42] ReloadData 9 [10:31:42] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:31:42] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28834] [10:31:42] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 57 msgs, first 10 IDs=[28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [10:31:42] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 57, first 10 IDs=[28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [10:31:42] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:31:42] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=57 [10:31:42] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=57 [10:31:43] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=66 [10:31:43] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=57, first5Ids=[28834, 28833, 28832, 28831, 28830] [10:31:43] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 57 messages [10:31:43] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826, 28825] [10:31:43] [RELOAD_TAB] 📊 Building chatRows from 57 messages [10:31:43] [SCROLL] wasNearBottom=true, threshold=447, offset=4753, contentH=5200, boundsH=447, forceScroll=true [10:31:43] [RELOAD_TAB] 📊 Built 59 chatRows, estHeight=0.0 [10:31:43] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=66 [10:31:43] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4753, currentOffset=4753 [10:31:43] [SCROLL] Scrolling to 4753, animated=false [10:31:43] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:43] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:43] HELLO → sent (cached token, role=query) [10:31:43] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:43] [WS] Query connection failed - cleaning up all agent connections and views [10:31:43] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:43] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:43] [CLEANUP] ======================================== [10:31:43] [CLEANUP] Cleaning up all agent connections and views [10:31:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:43] [CLEANUP] Stopped and removed 0 video connections [10:31:43] [CLEANUP] Removed 0 video views [10:31:43] [CLEANUP] Removed 0 feed scroll views [10:31:43] [CLEANUP] Removed 0 status labels [10:31:43] [CLEANUP] Reset agent query state [10:31:43] [CLEANUP] Updated page indicator [10:31:43] [CLEANUP] Rebuilt video layout [10:31:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:43] [CLEANUP] ======================================== [10:31:43] [SERVER] Starting reconnect polling (5s interval) [10:31:43] [CLEANUP] ======================================== [10:31:43] [CLEANUP] Cleaning up all agent connections and views [10:31:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:43] [CLEANUP] Stopped and removed 0 video connections [10:31:43] [CLEANUP] Removed 0 video views [10:31:43] [CLEANUP] Removed 0 feed scroll views [10:31:43] [CLEANUP] Removed 0 status labels [10:31:43] [CLEANUP] Reset agent query state [10:31:43] [CLEANUP] Updated page indicator [10:31:43] [CLEANUP] Rebuilt video layout [10:31:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:43] [CLEANUP] ======================================== [10:31:43] [SERVER] Starting reconnect polling (5s interval) [10:31:44] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:44] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:44] HELLO → sent (cached token, role=query) [10:31:44] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:44] [WS] Query connection failed - cleaning up all agent connections and views [10:31:44] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:44] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:44] [CLEANUP] ======================================== [10:31:44] [CLEANUP] Cleaning up all agent connections and views [10:31:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:44] [CLEANUP] Stopped and removed 0 video connections [10:31:44] [CLEANUP] Removed 0 video views [10:31:44] [CLEANUP] Removed 0 feed scroll views [10:31:44] [CLEANUP] Removed 0 status labels [10:31:44] [CLEANUP] Reset agent query state [10:31:44] [CLEANUP] Updated page indicator [10:31:44] [CLEANUP] Rebuilt video layout [10:31:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:44] [CLEANUP] ======================================== [10:31:44] [SERVER] Starting reconnect polling (5s interval) [10:31:44] [CLEANUP] ======================================== [10:31:44] [CLEANUP] Cleaning up all agent connections and views [10:31:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:44] [CLEANUP] Stopped and removed 0 video connections [10:31:44] [CLEANUP] Removed 0 video views [10:31:44] [CLEANUP] Removed 0 feed scroll views [10:31:44] [CLEANUP] Removed 0 status labels [10:31:44] [CLEANUP] Reset agent query state [10:31:44] [CLEANUP] Updated page indicator [10:31:44] [CLEANUP] Rebuilt video layout [10:31:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:44] [CLEANUP] ======================================== [10:31:44] [SERVER] Starting reconnect polling (5s interval) [10:31:46] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:46] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:46] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:46] HELLO → sent (cached token, role=query) [10:31:46] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:46] [WS] Query connection failed - cleaning up all agent connections and views [10:31:46] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:46] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:46] [CLEANUP] ======================================== [10:31:46] [CLEANUP] Cleaning up all agent connections and views [10:31:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:46] [CLEANUP] Stopped and removed 0 video connections [10:31:46] [CLEANUP] Removed 0 video views [10:31:46] [CLEANUP] Removed 0 feed scroll views [10:31:46] [CLEANUP] Removed 0 status labels [10:31:46] [CLEANUP] Reset agent query state [10:31:46] [CLEANUP] Updated page indicator [10:31:46] [CLEANUP] Rebuilt video layout [10:31:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:46] [CLEANUP] ======================================== [10:31:46] [SERVER] Starting reconnect polling (5s interval) [10:31:46] [CLEANUP] ======================================== [10:31:46] [CLEANUP] Cleaning up all agent connections and views [10:31:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:46] [CLEANUP] Stopped and removed 0 video connections [10:31:46] [CLEANUP] Removed 0 video views [10:31:46] [CLEANUP] Removed 0 feed scroll views [10:31:46] [CLEANUP] Removed 0 status labels [10:31:46] [CLEANUP] Reset agent query state [10:31:46] [CLEANUP] Updated page indicator [10:31:46] [CLEANUP] Rebuilt video layout [10:31:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:46] [CLEANUP] ======================================== [10:31:46] [SERVER] Starting reconnect polling (5s interval) [10:31:48] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:48] HELLO → sent (cached token, role=query) [10:31:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:48] [WS] Query connection failed - cleaning up all agent connections and views [10:31:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:48] [CLEANUP] ======================================== [10:31:48] [CLEANUP] Cleaning up all agent connections and views [10:31:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:48] [CLEANUP] Stopped and removed 0 video connections [10:31:48] [CLEANUP] Removed 0 video views [10:31:48] [CLEANUP] Removed 0 feed scroll views [10:31:48] [CLEANUP] Removed 0 status labels [10:31:48] [CLEANUP] Reset agent query state [10:31:48] [CLEANUP] Updated page indicator [10:31:48] [CLEANUP] Rebuilt video layout [10:31:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:48] [CLEANUP] ======================================== [10:31:48] [SERVER] Starting reconnect polling (5s interval) [10:31:48] [CLEANUP] ======================================== [10:31:48] [CLEANUP] Cleaning up all agent connections and views [10:31:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:48] [CLEANUP] Stopped and removed 0 video connections [10:31:48] [CLEANUP] Removed 0 video views [10:31:48] [CLEANUP] Removed 0 feed scroll views [10:31:48] [CLEANUP] Removed 0 status labels [10:31:48] [CLEANUP] Reset agent query state [10:31:48] [CLEANUP] Updated page indicator [10:31:48] [CLEANUP] Rebuilt video layout [10:31:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:48] [CLEANUP] ======================================== [10:31:48] [SERVER] Starting reconnect polling (5s interval) [10:31:49] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:49] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:49] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:49] HELLO → sent (cached token, role=query) [10:31:49] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:49] [WS] Query connection failed - cleaning up all agent connections and views [10:31:49] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:49] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:49] [CLEANUP] ======================================== [10:31:49] [CLEANUP] Cleaning up all agent connections and views [10:31:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:49] [CLEANUP] Stopped and removed 0 video connections [10:31:49] [CLEANUP] Removed 0 video views [10:31:49] [CLEANUP] Removed 0 feed scroll views [10:31:49] [CLEANUP] Removed 0 status labels [10:31:49] [CLEANUP] Reset agent query state [10:31:49] [CLEANUP] Updated page indicator [10:31:49] [CLEANUP] Rebuilt video layout [10:31:49] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:49] [CLEANUP] ======================================== [10:31:49] [SERVER] Starting reconnect polling (5s interval) [10:31:49] [CLEANUP] ======================================== [10:31:49] [CLEANUP] Cleaning up all agent connections and views [10:31:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:49] [CLEANUP] Stopped and removed 0 video connections [10:31:49] [CLEANUP] Removed 0 video views [10:31:49] [CLEANUP] Removed 0 feed scroll views [10:31:49] [CLEANUP] Removed 0 status labels [10:31:49] [CLEANUP] Reset agent query state [10:31:49] [CLEANUP] Updated page indicator [10:31:49] [CLEANUP] Rebuilt video layout [10:31:49] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:49] [CLEANUP] ======================================== [10:31:49] [SERVER] Starting reconnect polling (5s interval) [10:31:50] [SCROLL] 💓 alive, visible=53...58, rows=59, estHeight=0.0, heightCalls=66 [10:31:51] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:31:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:51] HELLO → sent (cached token, role=query) [10:31:51] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:51] [WS] Query connection failed - cleaning up all agent connections and views [10:31:51] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:51] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:51] [CLEANUP] ======================================== [10:31:51] [CLEANUP] Cleaning up all agent connections and views [10:31:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:51] [CLEANUP] Stopped and removed 0 video connections [10:31:51] [CLEANUP] Removed 0 video views [10:31:51] [CLEANUP] Removed 0 feed scroll views [10:31:51] [CLEANUP] Removed 0 status labels [10:31:51] [CLEANUP] Reset agent query state [10:31:51] [CLEANUP] Updated page indicator [10:31:51] [CLEANUP] Rebuilt video layout [10:31:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:51] [CLEANUP] ======================================== [10:31:51] [SERVER] Starting reconnect polling (5s interval) [10:31:51] [CLEANUP] ======================================== [10:31:51] [CLEANUP] Cleaning up all agent connections and views [10:31:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:51] [CLEANUP] Stopped and removed 0 video connections [10:31:51] [CLEANUP] Removed 0 video views [10:31:51] [CLEANUP] Removed 0 feed scroll views [10:31:51] [CLEANUP] Removed 0 status labels [10:31:51] [CLEANUP] Reset agent query state [10:31:51] [CLEANUP] Updated page indicator [10:31:51] [CLEANUP] Rebuilt video layout [10:31:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:51] [CLEANUP] ======================================== [10:31:51] [SERVER] Starting reconnect polling (5s interval) [10:31:52] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:31:52] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=57, isReloading=false [10:31:52] [SEND_MESSAGE] ✅ Added optimistic message id=-7 to arrays, newMsgCount=58 [10:31:52] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:31:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[-7, 28834, 28833, 28832, 28831] [10:31:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 58 messages [10:31:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-7, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [RELOAD_TAB] 📊 Building chatRows from 58 messages [10:31:52] [SCROLL] wasNearBottom=true, threshold=429, offset=4770, contentH=5200, boundsH=429, forceScroll=false [10:31:52] [RELOAD_TAB] 📊 Built 60 chatRows, estHeight=0.0 [10:31:52] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [10:31:52] [SCROLL] 💓 alive, visible=53...59, rows=60, estHeight=0.0, heightCalls=128 [10:31:52] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:31:52] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:31:52] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=4826, currentOffset=4826 [10:31:52] [SCROLL] Scrolling to 4826, animated=true [10:31:52] [PUSH] Silent push received [10:31:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:52 +0000, appState=0, message_id=nil, type=nil [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:52 +0000 [10:31:52] [PUSH_EMBED] No embedded message_data in notification [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822], handled=false [10:31:52] [PUSH] No embedded data, pre-loading messages from server [10:31:52] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:52] [CLIENT_SIG] Event received: type=0 messageId=28835 [10:31:52] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28835,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:31:52"} [10:31:52] [WS_EVENT] Received event: type=0, messageId=28835 [10:31:52] [CHAT] receive_message.php JSON: ["file_name": , "datesent_utc": 2026-04-23 08:31:52, "message_id": 28835, "session_id": ILUIWU, "ok": 1, "message_type": 0] [10:31:52] [WS_EVENT] 📨 New message notification (msgId=28835) - triggering incremental refresh, currentMsgCount=58 [10:31:52] [DB_UPGRADE] Upgrading message ID: -7 → 28835, preserveOriginalDate=false [10:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [10:31:52] [DB_UPGRADE] ✅ Upgraded -7 → 28835 with send_status=0, 1 row(s) affected [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28834 [10:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:31:52] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -7 → 28835 [10:31:52] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -7 → 28835 [10:31:52] ReloadData 9 [10:31:52] [INCREMENTAL_SYNC] ✅ No new messages [10:31:52] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=58 [10:31:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:31:52] [PUSH] Silent push received [10:31:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:52 +0000, appState=0, message_id=nil, type=nil [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:52 +0000 [10:31:52] [PUSH_EMBED] No embedded message_data in notification [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822], handled=false [10:31:52] [PUSH] No embedded data, pre-loading messages from server [10:31:52] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:52] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:31:52] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:31:52] [PUSH] Silent push received [10:31:52] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:52 +0000, appState=0, message_id=nil, type=nil [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:52 +0000 [10:31:52] [PUSH_EMBED] No embedded message_data in notification [10:31:52] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:31:52] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822], handled=false [10:31:52] [PUSH] No embedded data, pre-loading messages from server [10:31:52] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:52] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:31:52] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=53, IDs=[28831, 28830, 28829, 28828, 28827, 28826, 28825, 28824, 28823, 28822] [10:31:52] [PRELOAD_CACHE] Preserving 7 push-inserted messages: [28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=7, IDs=[28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: merged.count=57, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_PRELOAD] ⚡ Pre-cached 57 messages for instant display (preserved 7 from push) [10:31:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:31:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 58 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2247 vccs=0 [10:31:52] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28835 [10:31:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28832, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [10:31:52] [PUSH] Parsed message_id: 28832 [10:31:52] [PUSH] Parsed operation_type: 3 [10:31:52] [PUSH] Taking direct action: opType=3, messageId=28832 [10:31:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28832 [10:31:52] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28835 [10:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:52] [INCREMENTAL_SYNC] ✅ Found 5 new messages [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 5 new messages, IDs=[28835, 28834, 28833, 28832, 28831] [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 58 msgs, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 58, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=5 [10:31:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=58 [10:31:52] [CLIENT_SIG] Event received: type=3 messageId=28832 [10:31:52] [WS_EVENT] Received event: type=3, messageId=28832 [10:31:52] [WS_EVENT] Read receipt for message 28832 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:31:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:31:52] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:31:52] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:31:52] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:31:52] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PRELOAD_CACHE] Preserving 7 push-inserted messages: [28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=7, IDs=[28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: merged.count=57, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_PRELOAD] ⚡ Pre-cached 57 messages for instant display (preserved 7 from push) [10:31:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:31:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 58 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2248 vccs=0 [10:31:52] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28835 [10:31:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28834] [10:31:52] [PUSH] Parsed message_id: 28834 [10:31:52] [PUSH] Parsed operation_type: 3 [10:31:52] [PUSH] Taking direct action: opType=3, messageId=28834 [10:31:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28834 [10:31:52] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28835 [10:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:31:52] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=67 [10:31:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[28835, 28834, 28833, 28832, 28831] [10:31:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 58 messages [10:31:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [RELOAD_TAB] 📊 Building chatRows from 58 messages [10:31:52] [SCROLL] wasNearBottom=true, threshold=447, offset=4826, contentH=5273, boundsH=447, forceScroll=true [10:31:52] [RELOAD_TAB] 📊 Built 60 chatRows, estHeight=0.0 [10:31:52] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:31:52] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:31:52] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:31:52] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:31:52] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [10:31:52] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4826, currentOffset=4826 [10:31:52] [SCROLL] Scrolling to 4826, animated=false [10:31:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PRELOAD_CACHE] Preserving 7 push-inserted messages: [28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=7, IDs=[28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:52] [PUSH_TRACE] 🔀 mergeMessages: merged.count=57, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_PRELOAD] ⚡ Pre-cached 57 messages for instant display (preserved 7 from push) [10:31:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:31:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 58 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2248 vccs=0 [10:31:52] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28835 [10:31:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28833, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [10:31:52] [PUSH] Parsed message_id: 28833 [10:31:52] [PUSH] Parsed operation_type: 3 [10:31:52] [PUSH] Taking direct action: opType=3, messageId=28833 [10:31:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28833 [10:31:52] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:52] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:31:52] [INCREMENTAL_SYNC] ✅ Found 5 new messages [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 5 new messages, IDs=[28835, 28834, 28833, 28832, 28831] [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 58 msgs, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 58, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:52] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=5 [10:31:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=58 [10:31:52] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:31:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [10:31:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28835 [10:31:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:31:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:53] [INCREMENTAL_SYNC] ✅ No new messages [10:31:53] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=67 [10:31:53] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[28835, 28834, 28833, 28832, 28831] [10:31:53] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 58 messages [10:31:53] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [RELOAD_TAB] 📊 Building chatRows from 58 messages [10:31:53] [SCROLL] wasNearBottom=true, threshold=447, offset=4826, contentH=5273, boundsH=447, forceScroll=true [10:31:53] [RELOAD_TAB] 📊 Built 60 chatRows, estHeight=0.0 [10:31:53] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [10:31:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:53] HELLO → sent (cached token, role=query) [10:31:53] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4826, currentOffset=4826 [10:31:53] [SCROLL] Scrolling to 4826, animated=false [10:31:53] [CLIENT_SIG] Event received: type=3 messageId=28833 [10:31:53] [WS_EVENT] Received event: type=3, messageId=28833 [10:31:53] [WS_EVENT] Read receipt for message 28833 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:31:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:53] [WS] Query connection failed - cleaning up all agent connections and views [10:31:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:53] [CLEANUP] ======================================== [10:31:53] [CLEANUP] Cleaning up all agent connections and views [10:31:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:53] [CLEANUP] Stopped and removed 0 video connections [10:31:53] [CLEANUP] Removed 0 video views [10:31:53] [CLEANUP] Removed 0 feed scroll views [10:31:53] [CLEANUP] Removed 0 status labels [10:31:53] [CLEANUP] Reset agent query state [10:31:53] [CLEANUP] Updated page indicator [10:31:53] [CLEANUP] Rebuilt video layout [10:31:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:53] [CLEANUP] ======================================== [10:31:53] [SERVER] Starting reconnect polling (5s interval) [10:31:53] [CLEANUP] ======================================== [10:31:53] [CLEANUP] Cleaning up all agent connections and views [10:31:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:53] [CLEANUP] Stopped and removed 0 video connections [10:31:53] [CLEANUP] Removed 0 video views [10:31:53] [CLEANUP] Removed 0 feed scroll views [10:31:53] [CLEANUP] Removed 0 status labels [10:31:53] [CLEANUP] Reset agent query state [10:31:53] [CLEANUP] Updated page indicator [10:31:53] [CLEANUP] Rebuilt video layout [10:31:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:53] [CLEANUP] ======================================== [10:31:53] [SERVER] Starting reconnect polling (5s interval) [10:31:53] [CLIENT_SIG] Event received: type=3 messageId=28834 [10:31:53] [WS_EVENT] Received event: type=3, messageId=28834 [10:31:53] [WS_EVENT] Read receipt for message 28834 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:31:53] [LIFECYCLE] App resigning active - cleared crash flag [10:31:53] [PUSH] Silent push received [10:31:53] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:31:53 +0000, appState=1, message_id=nil, type=nil [10:31:53] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:31:53 +0000 [10:31:53] [PUSH_EMBED] No embedded message_data in notification [10:31:53] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:31:53] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826], handled=false [10:31:53] [PUSH] No embedded data, pre-loading messages from server [10:31:53] [PUSH_PRELOAD] Fetching messages for instant display cache [10:31:53] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:31:53] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:31:53] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:31:53] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:31:53] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:31:53] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:31:53] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [PRELOAD_CACHE] Preserving 7 push-inserted messages: [28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:53] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=7, IDs=[28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:31:53] [PUSH_TRACE] 🔀 mergeMessages: merged.count=57, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [PUSH_PRELOAD] ⚡ Pre-cached 57 messages for instant display (preserved 7 from push) [10:31:53] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:31:53] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 58 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2249 vccs=0 [10:31:53] [GAP_FIX] maxMessageIdAtBackground=28830, currentMaxLocalId=28835 [10:31:53] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28835] [10:31:53] [PUSH] Parsed message_id: 28835 [10:31:53] [PUSH] Parsed operation_type: 3 [10:31:53] [PUSH] Taking direct action: opType=3, messageId=28835 [10:31:53] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28835 [10:31:53] [GAP_FIX] Post-action sync: using background max 28830 to catch coalesced messages [10:31:53] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=58 [10:31:53] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28830, maxMemoryId=28835 [10:31:53] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28830 [10:31:53] [INCREMENTAL_SYNC] ✅ Found 5 new messages [10:31:53] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 5 new messages, IDs=[28835, 28834, 28833, 28832, 28831] [10:31:53] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 58 msgs, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 58, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:53] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=5 [10:31:53] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=58 [10:31:54] [UPLOAD_QUEUE] ✅ Database flushed (WAL checkpoint) before background [10:31:54] [SECURITY] sceneDidEnterBackground - isAuthenticated=true [10:31:54] [SECURITY] Saved background timestamp [10:31:54] [LIFECYCLE] App entering background - cleared crash flag [10:31:54] [CLIENT_SIG] Disconnecting [10:31:54] [LIFECYCLE] App entering background - disconnecting connections and stopping audio [10:31:54] [DB] ✅ Chat database flushed (WAL checkpoint) before background [10:31:54] [PUSH_TRACE] 💤 BACKGROUND: memory has 58 messages, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:54] [LIFECYCLE] Background snapshot: count=58, maxId=28835 [10:31:54] [WS] stopSignalingAndPeer called - isQueryOnly=true, connectionStr=iosILUIWU, wsState=3 [10:31:54] [WS] Canceling WebSocket for query connection to iosILUIWU [10:31:54] In cleanupPeer [10:31:54] In cleanupPeer [10:31:54] [LIFECYCLE] WebRTC audio disabled [10:31:54] [LIFECYCLE] AVAudioSession deactivated [10:31:54] [LIFECYCLE] All connections stopped [10:31:54] [CLIENT_SIG] WebSocket closed with code 1001 [10:31:54] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:31:54] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=57 "Socket is not connected" UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/} [10:31:54] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:31:54] [SERVER] Stopped reconnect polling [10:31:54] [WS] URLSession invalidated successfully [10:31:54] Will request stop of video 0 [10:31:54] Will request stop of video 0 [10:31:54] [PIP] Removing 0 tracks from PiP for connection 0 [10:31:54] [PIP] ✅ All tracks removed for connection 0 [10:31:54] [PIP] Removing 0 tracks from PiP for connection 0 [10:31:54] [PIP] ✅ All tracks removed for connection 0 [10:31:54] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=67 [10:31:54] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=58, first5Ids=[28835, 28834, 28833, 28832, 28831] [10:31:54] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 58 messages [10:31:54] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:31:54] [RELOAD_TAB] 📊 Building chatRows from 58 messages [10:31:54] [SCROLL] wasNearBottom=true, threshold=447, offset=4826, contentH=5273, boundsH=447, forceScroll=false [10:31:54] [RELOAD_TAB] 📊 Built 60 chatRows, estHeight=0.0 [10:31:54] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=67 [10:31:54] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4826, currentOffset=4826 [10:31:54] [NETWORK] Status changed: connected [10:31:54] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:31:54] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:31:54] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:31:54] HELLO → sent (cached token, role=query) [10:31:54] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:31:54] [WS] Query connection failed - cleaning up all agent connections and views [10:31:54] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:31:54] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:31:54] [CLEANUP] ======================================== [10:31:54] [CLEANUP] Cleaning up all agent connections and views [10:31:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:54] [CLEANUP] Stopped and removed 0 video connections [10:31:54] [CLEANUP] Removed 0 video views [10:31:54] [CLEANUP] Removed 0 feed scroll views [10:31:54] [CLEANUP] Removed 0 status labels [10:31:54] [CLEANUP] Reset agent query state [10:31:54] [CLEANUP] Updated page indicator [10:31:54] [CLEANUP] Rebuilt video layout [10:31:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:54] [CLEANUP] ======================================== [10:31:54] [SERVER] Skipping reconnect polling - app is in background [10:31:54] [CLEANUP] ======================================== [10:31:54] [CLEANUP] Cleaning up all agent connections and views [10:31:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:31:54] [CLEANUP] Stopped and removed 0 video connections [10:31:54] [CLEANUP] Removed 0 video views [10:31:54] [CLEANUP] Removed 0 feed scroll views [10:31:54] [CLEANUP] Removed 0 status labels [10:31:54] [CLEANUP] Reset agent query state [10:31:54] [CLEANUP] Updated page indicator [10:31:54] [CLEANUP] Rebuilt video layout [10:31:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:31:54] [CLEANUP] ======================================== [10:31:54] [SERVER] Skipping reconnect polling - app is in background [10:32:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:03] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:03] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:32:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 58 msgs, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:32:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2258 vccs=0 [10:32:03] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28836 [10:32:03] [PUSH] handlePollEventsNotification userInfo: [:] [10:32:03] [PUSH] No message_id in userInfo [10:32:03] [PUSH] No operation_type in userInfo [10:32:03] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:32:03] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:32:03] [PUSH_TRACE] 📬 POLL: memory state: count=58, first 10 IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:32:03] [FAST_REFRESH] Already have 58 messages in memory [10:32:03] [FAST_REFRESH] maxMemoryId=28835, maxLocalId=28836 [10:32:03] [FAST_REFRESH] 🌙 Found 1 overnight messages in local DB (IDs > 28835) [10:32:03] [FAST_REFRESH] 🌙 Merged 1 overnight messages into memory (now 59 total) [10:32:03] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:32:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:03] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:32:03] [READBY_OPT] Fetching readBy for 1 unsettled messages (targeted) [10:32:03] [GAP_FIX] Incremental sync will use since_id=28835 (background max=28835, current DB max=28836) [10:32:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=59 [10:32:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28836 [10:32:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:03] [PUSH] Silent push received [10:32:03] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:03 +0000, appState=2, message_id=28836, type=nil [10:32:03] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:32:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:03 +0000 [10:32:03] [PUSH_TRACE] ⬇️ Processing embedded message_id=28836 [10:32:03] [PUSH_EMBED] 📩 Received embedded message: id=28836, type=0, sender=Esra [10:32:03] [PUSH_TRACE] ⬇️ Message details: text="Same🥲🥲🥲🥲...", datesent=2026-04-23 08:32:02 [10:32:03] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:03] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28836 [10:32:03] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28836 [10:32:03] [PUSH_EMBED] ✅ Saved message 28836 to local DB (sync) [10:32:03] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28836 [10:32:03] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28836 [10:32:03] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28836 [10:32:03] [PUSH_TRACE] 📦 Cache state: valid=true, count=57, IDs=[28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827, 28826] [10:32:03] [PUSH_EMBED] Inserted message 28836 into existing cache (now 58 messages) [10:32:03] [PUSH_TRACE] 📦 ✅ Inserted message 28836, cache now has IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:03] [PUSH_TRACE] 📦 EXITING cache update queue for message 28836 [10:32:03] [PUSH_EMBED] Fetching evolution data for message 28836 in background [10:32:03] [PUSH_EMBED] ✅ Fully processed message 28836 [10:32:03] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28836 [10:32:03] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827], handled=true [10:32:03] [PUSH] Embedded message handled instantly from silent push [10:32:03] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:32:03] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28836 [10:32:03] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:03] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:03] [PUSH_TRACE] 👁️ Received message id=28836, text="Same🥲🥲🥲🥲..." [10:32:03] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:03] [PUSH_UI] Message 28836 already in memory - skipping insert [10:32:03] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:03] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 59 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:03] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2258 vccs=0 [10:32:03] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28836 [10:32:03] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message"): Same🥲🥲🥲🥲, AnyHashable("message_id"): 28836, AnyHashable("file_name"): , AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:02"; "file_name" = ""; "is_encrypted" = 0; message = "Same\Ud83e\Udd72\Ud83e\Udd72\Ud83e\Udd72\Ud83e\Udd72"; "message_id" = 28836; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28835; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("thumb_file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:02, AnyHashable("sender_name"): Esra, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_type"): 0, AnyHashable("operation_type"): 0] [10:32:03] [PUSH_EMBED_VC] Message 28836 already in memory - skipping [10:32:03] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:03] [PUSH] Parsed message_id: 28836 [10:32:03] [PUSH] Parsed operation_type: 0 [10:32:03] [PUSH] Taking direct action: opType=0, messageId=28836 [10:32:03] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28836 [10:32:03] [PUSH] ⚡ Message 28836 already in memory - skipping duplicate notification entirely [10:32:03] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:03] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:03] [CLIENT_SIG] WebSocket opened [10:32:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:03] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:32:03] HELLO → sent (cached token, role=query) [10:32:03] [COMBINED_FETCH] Loaded 1 read receipts, 0 messages with reactions [10:32:03] [FAST_REFRESH] Enriched 1/1 unsettled messages with readBy data [10:32:03] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=67 [10:32:03] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:03] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:03] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:03] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:03] [SCROLL] wasNearBottom=true, threshold=447, offset=4826, contentH=5273, boundsH=447, forceScroll=false [10:32:03] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:03] [PUSH_EMBED] Got evolution data for message 28836, saving to local DB [10:32:03] [PUSH_EMBED] Saved evolution data for message 28836 [10:32:03] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28835 → 28836 [10:32:03] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=69 [10:32:03] [SCROLL_END_DECEL] messagesTable offsetY=4826, insetTop=0, pendingVelocityY=0.0 [10:32:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:03] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4903, currentOffset=4826 [10:32:03] [SCROLL_END_DECEL] messagesTable offsetY=4826, insetTop=0, pendingVelocityY=0.0 [10:32:03] [CLIENT_SIG] Connected! clientId=jzIog2T1WBU0-Pa7 [10:32:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:03] [WS] Query connection failed - cleaning up all agent connections and views [10:32:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:03] [CLEANUP] ======================================== [10:32:03] [CLEANUP] Cleaning up all agent connections and views [10:32:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:03] [CLEANUP] Stopped and removed 0 video connections [10:32:03] [CLEANUP] Removed 0 video views [10:32:03] [CLEANUP] Removed 0 feed scroll views [10:32:03] [CLEANUP] Removed 0 status labels [10:32:03] [CLEANUP] Reset agent query state [10:32:03] [CLEANUP] Updated page indicator [10:32:03] [CLEANUP] Rebuilt video layout [10:32:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:03] [CLEANUP] ======================================== [10:32:03] [SERVER] Skipping reconnect polling - app is in background [10:32:03] [CLEANUP] ======================================== [10:32:03] [CLEANUP] Cleaning up all agent connections and views [10:32:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:03] [CLEANUP] Stopped and removed 0 video connections [10:32:03] [CLEANUP] Removed 0 video views [10:32:03] [CLEANUP] Removed 0 feed scroll views [10:32:03] [CLEANUP] Removed 0 status labels [10:32:03] [CLEANUP] Reset agent query state [10:32:03] [CLEANUP] Updated page indicator [10:32:03] [CLEANUP] Rebuilt video layout [10:32:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:03] [CLEANUP] ======================================== [10:32:03] [SERVER] Skipping reconnect polling - app is in background [10:32:03] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:32:03] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:03] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:03] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:03] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28836] [10:32:03] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 59 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:03] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 59, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:03] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:03] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:03] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:03] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:32:03] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=59 [10:32:03] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28836, maxMemoryId=28836 [10:32:03] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28836 [10:32:03] [FAST_REFRESH] Incremental sync complete - 59 messages [10:32:03] [INCREMENTAL_SYNC] ✅ No new messages [10:32:04] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=69 [10:32:04] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:04] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:04] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:04] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:04] [SCROLL] wasNearBottom=true, threshold=447, offset=4826, contentH=5350, boundsH=447, forceScroll=false [10:32:04] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:04] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:04] [PUSH] Silent push received [10:32:04] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:04 +0000, appState=2, message_id=nil, type=nil [10:32:04] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:04 +0000 [10:32:04] [PUSH_EMBED] No embedded message_data in notification [10:32:04] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:04] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827], handled=false [10:32:04] [PUSH] No embedded data, pre-loading messages from server [10:32:04] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:05] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:05] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:05] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:05] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:05] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:05] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:05] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [PRELOAD_CACHE] Preserving 8 push-inserted messages: [28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:05] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=8, IDs=[28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:05] [PUSH_TRACE] 🔀 mergeMessages: merged.count=58, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [PUSH_PRELOAD] ⚡ Pre-cached 58 messages for instant display (preserved 8 from push) [10:32:05] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:05] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 59 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2260 vccs=0 [10:32:05] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28836 [10:32:05] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("message_id"): 28836, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [10:32:05] [PUSH] Parsed message_id: 28836 [10:32:05] [PUSH] Parsed operation_type: 3 [10:32:05] [PUSH] Taking direct action: opType=3, messageId=28836 [10:32:05] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28836 [10:32:05] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:05] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=59 [10:32:05] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28836 [10:32:05] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:05] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:05] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28836] [10:32:05] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 59 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 59, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:05] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:05] [SCROLL_END_DECEL] messagesTable offsetY=4826, insetTop=0, pendingVelocityY=0.0 [10:32:05] [SCROLL] 💓 alive, visible=53...60, rows=61, estHeight=0.0, heightCalls=1 [10:32:05] [CLIENT_SIG] Event received: type=3 messageId=28836 [10:32:05] [WS_EVENT] Received event: type=3, messageId=28836 [10:32:05] [WS_EVENT] Read receipt for message 28836 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:05] HELLO → sent (cached token, role=query) [10:32:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:05] [WS] Query connection failed - cleaning up all agent connections and views [10:32:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:05] [CLEANUP] ======================================== [10:32:05] [CLEANUP] Cleaning up all agent connections and views [10:32:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:05] [CLEANUP] Stopped and removed 0 video connections [10:32:05] [CLEANUP] Removed 0 video views [10:32:05] [CLEANUP] Removed 0 feed scroll views [10:32:05] [CLEANUP] Removed 0 status labels [10:32:05] [CLEANUP] Reset agent query state [10:32:05] [CLEANUP] Updated page indicator [10:32:05] [CLEANUP] Rebuilt video layout [10:32:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:05] [CLEANUP] ======================================== [10:32:05] [SERVER] Skipping reconnect polling - app is in background [10:32:05] [CLEANUP] ======================================== [10:32:05] [CLEANUP] Cleaning up all agent connections and views [10:32:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:05] [CLEANUP] Stopped and removed 0 video connections [10:32:05] [CLEANUP] Removed 0 video views [10:32:05] [CLEANUP] Removed 0 feed scroll views [10:32:05] [CLEANUP] Removed 0 status labels [10:32:05] [CLEANUP] Reset agent query state [10:32:05] [CLEANUP] Updated page indicator [10:32:05] [CLEANUP] Rebuilt video layout [10:32:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:05] [CLEANUP] ======================================== [10:32:05] [SERVER] Skipping reconnect polling - app is in background [10:32:05] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:05] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:05] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:05] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:05] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:05] [SCROLL] wasNearBottom=true, threshold=447, offset=4864, contentH=5350, boundsH=447, forceScroll=false [10:32:05] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:05] [SCROLL_END_DECEL] messagesTable offsetY=4864, insetTop=0, pendingVelocityY=0.0 [10:32:05] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=68 [10:32:05] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4903, currentOffset=4864 [10:32:05] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:07] [PUSH] Notification tapped - session_id: ILUIWU [10:32:07] [PUSH] Max message_id before tap: 28836 [10:32:07] [PUSH] Stored pending session: ILUIWU [10:32:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:07 +0000 [10:32:07] [PUSH_TRACE] ⬇️ Processing embedded message_id=28836 [10:32:07] [PUSH_EMBED] 📩 Received embedded message: id=28836, type=0, sender=Esra [10:32:07] [PUSH_TRACE] ⬇️ Message details: text="Same🥲🥲🥲🥲...", datesent=2026-04-23 08:32:02 [10:32:07] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:07] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28836 [10:32:07] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28836 [10:32:07] [PUSH_EMBED] ✅ Saved message 28836 to local DB (sync) [10:32:07] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28836 [10:32:07] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28836 [10:32:07] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28836 [10:32:07] [PUSH_TRACE] 📦 Cache state: valid=true, count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:07] [PUSH_TRACE] 📦 ⚠️ Message 28836 already in cache, skipping insert [10:32:07] [PUSH_TRACE] 📦 EXITING cache update queue for message 28836 [10:32:07] [PUSH_EMBED] Fetching evolution data for message 28836 in background [10:32:07] [PUSH_EMBED] ✅ Fully processed message 28836 [10:32:07] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28836 [10:32:07] [PUSH] Embedded message handled instantly on tap [10:32:07] [PUSH] Fetching server messages since_id=28836 to catch coalesced notifications on tap [10:32:07] [SECURITY] Timeout check: elapsed=13.648544311523438s, timeout=300.0s [10:32:07] [PUSH_PRELOAD] Fetching up to 50 messages since_id=28836 to catch coalesced notifications [10:32:07] [CLIENT_SIG] Reconnecting on foreground for session: ILUIWU [10:32:07] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:07] [CLIENT_SIG] Already connected/connecting to session ILUIWU [10:32:07] [LIFECYCLE] App entering foreground - restoring connections [10:32:07] [CAPTURE] Live-feed protection [app-will-enter-foreground] - fullscreen=false, isCaptured=false, secureReady=true [10:32:07] [CAPTURE] Refresh overlay [app-will-enter-foreground] - isCaptured: false, mediaFullscreen: false, liveFullscreen: false, pipFullscreen: false, screenshotTimer: false, fallbackWindowOverlay: false [10:32:07] [PUSH_TRACE] 🔄 FOREGROUND: memory has 59 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:07] [PUSH_TRACE] 🔄 FOREGROUND: cache has 58 msgs, valid=true, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:07] [UPLOAD_RETRY] No pending uploads to retry [10:32:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:07] [READBY_OPT] No message IDs to fetch - skipping server call [10:32:07] [LIFECYCLE] WebRTC audio re-enabled [10:32:07] [AUDIO] ✅ Chat mode - audio will be managed by WebRTCViewer (no microphone) [10:32:07] [CLIENT_SIG] Skipping connect - app in background (state=2) [10:32:07] [VIEWER] Reconnecting after background - querying agents [10:32:07] [CAM_CONN] ▶️ queryAgents ENTER tab=0 isServerConnected=false hasQueryConn=true wsState=running [10:32:07] [CAM_CONN] ⏸️ queryAgents SKIP — only works on tab 1, currently on tab 0 [10:32:07] [UNSENT_RETRY] Checking for unsent messages... [10:32:07] [PENDING_UPLOAD] Total pending upload messages: 0 [10:32:07] [UNSENT_RETRY] No unsent messages found [10:32:07] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:07] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:07] [PUSH_TRACE] 👁️ Received message id=28836, text="Same🥲🥲🥲🥲..." [10:32:07] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:07] [PUSH_UI] Message 28836 already in memory - skipping insert [10:32:07] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:07] [FOREGROUND] Enriched 0/0 unsettled messages with readBy data [10:32:07] [LIFECYCLE] scrollToBottomIfNeeded time=false, count=59>58=true, maxId=28836>28835=true, shouldScroll=true [10:32:07] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:07] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:07] [SCROLL] 💓 alive, visible=54...60, rows=61, estHeight=0.0, heightCalls=69 [10:32:07] [CLIENT_SIG] Task completed with error: Error Domain=NSURLErrorDomain Code=-1005 "The network connection was lost." UserInfo={NSErrorFailingURLStringKey=http://crivello.dyndns.org:8081/, NSErrorFailingURLKey=http://crivello.dyndns.org:8081/, _NSURLErrorRelatedURLSessionTaskErrorKey=( "LocalWebSocketTask .<1>" ), _NSURLErrorFailingURLSessionTaskErrorKey=LocalWebSocketTask .<1>, NSLocalizedDescription=The network connection was lost.} [10:32:07] [CLIENT_SIG] Reconnecting in 2.0s (attempt 1) [10:32:07] [CLIENT_SIG] Receive error: Error Domain=NSPOSIXErrorDomain Code=89 "Operation canceled" UserInfo={NSDescription=Operation canceled} [10:32:07] [CLIENT_SIG] Reconnecting in 4.0s (attempt 2) [10:32:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:07] HELLO → sent (cached token, role=query) [10:32:07] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:07] [WS] Query connection failed - cleaning up all agent connections and views [10:32:07] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:07] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:07] [CLEANUP] ======================================== [10:32:07] [CLEANUP] Cleaning up all agent connections and views [10:32:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:07] [CLEANUP] Stopped and removed 0 video connections [10:32:07] [CLEANUP] Removed 0 video views [10:32:07] [CLEANUP] Removed 0 feed scroll views [10:32:07] [CLEANUP] Removed 0 status labels [10:32:07] [CLEANUP] Reset agent query state [10:32:07] [CLEANUP] Updated page indicator [10:32:07] [CLEANUP] Rebuilt video layout [10:32:07] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:07] [CLEANUP] ======================================== [10:32:07] [SERVER] Starting reconnect polling (5s interval) [10:32:07] [CLEANUP] ======================================== [10:32:07] [CLEANUP] Cleaning up all agent connections and views [10:32:07] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:07] [CLEANUP] Stopped and removed 0 video connections [10:32:07] [CLEANUP] Removed 0 video views [10:32:07] [CLEANUP] Removed 0 feed scroll views [10:32:07] [CLEANUP] Removed 0 status labels [10:32:07] [CLEANUP] Reset agent query state [10:32:07] [CLEANUP] Updated page indicator [10:32:07] [CLEANUP] Rebuilt video layout [10:32:07] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:07] [CLEANUP] ======================================== [10:32:07] [SERVER] Starting reconnect polling (5s interval) [10:32:07] [PUSH_EMBED] Got evolution data for message 28836, saving to local DB [10:32:07] [PUSH_EMBED] Saved evolution data for message 28836 [10:32:07] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:07] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:07] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:07] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:07] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:07] [SCROLL] wasNearBottom=true, threshold=447, offset=4883, contentH=5350, boundsH=447, forceScroll=true [10:32:07] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:07] [SCROLL_END_DECEL] messagesTable offsetY=4903, insetTop=0, pendingVelocityY=0.0 [10:32:07] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=68 [10:32:07] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4903, currentOffset=4903 [10:32:07] [SCROLL] Scrolling to 4903, animated=false [10:32:07] [PUSH_PRELOAD] No messages or parse error [10:32:07] [PUSH] Server fetch on tap completed (success=false) [10:32:07] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 59 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:07] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2263 vccs=0 [10:32:07] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28836 [10:32:07] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("file_name"): , AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("operation_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("timer"): 0, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_id"): 28836, AnyHashable("message"): Same🥲🥲🥲🥲, AnyHashable("session_id"): ILUIWU, AnyHashable("datesent"): 2026-04-23 08:32:02, AnyHashable("thumb_file_name"): , AnyHashable("message_type"): 0, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:02"; "file_name" = ""; "is_encrypted" = 0; message = "Same\Ud83e\Udd72\Ud83e\Udd72\Ud83e\Udd72\Ud83e\Udd72"; "message_id" = 28836; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28835; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }] [10:32:07] [PUSH_EMBED_VC] Message 28836 already in memory - skipping [10:32:07] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:07] [PUSH] Parsed message_id: 28836 [10:32:07] [PUSH] Parsed operation_type: 0 [10:32:07] [PUSH] Taking direct action: opType=0, messageId=28836 [10:32:07] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28836 [10:32:07] [PUSH] ⚡ Message 28836 already in memory - skipping duplicate notification entirely [10:32:07] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:07] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=59 [10:32:07] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28836 [10:32:07] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28836] [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 59 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 59, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:08] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=68 [10:32:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:08] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:08] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:08] [SCROLL] wasNearBottom=true, threshold=447, offset=4903, contentH=5350, boundsH=447, forceScroll=true [10:32:08] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:08] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=68 [10:32:08] [SECURITY] sceneDidBecomeActive - isAuthenticated=true, didEnterBackground=true [10:32:08] [SECURITY] Within timeout - cleared background flag [10:32:08] [PUSH_DEBUG] 🟢 App became ACTIVE - resetting badges and triggering pollEventsNow [10:32:08] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 59 msgs, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2263 vccs=0 [10:32:08] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28836 [10:32:08] [PUSH] handlePollEventsNotification userInfo: [:] [10:32:08] [PUSH] No message_id in userInfo [10:32:08] [PUSH] No operation_type in userInfo [10:32:08] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:32:08] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [PUSH_TRACE] 📬 POLL: memory state: count=59, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [FAST_REFRESH] Already have 59 messages in memory [10:32:08] [FAST_REFRESH] maxMemoryId=28836, maxLocalId=28836 [10:32:08] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:32:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:08] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:32:08] [READBY_OPT] No message IDs to fetch - skipping server call [10:32:08] [GAP_FIX] Incremental sync will use since_id=28835 (background max=28835, current DB max=28836) [10:32:08] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=59 [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28836 [10:32:08] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:08] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4903, currentOffset=4903 [10:32:08] [SCROLL] Scrolling to 4903, animated=false [10:32:08] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:32:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:08] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28836] [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 59 msgs, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 59, first 10 IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:08] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=59 [10:32:08] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:08] [FAST_REFRESH] Incremental sync complete - 59 messages [10:32:08] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=68 [10:32:08] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=59, first5Ids=[28836, 28835, 28834, 28833, 28832] [10:32:08] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 59 messages [10:32:08] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:08] [RELOAD_TAB] 📊 Building chatRows from 59 messages [10:32:08] [SCROLL] wasNearBottom=true, threshold=447, offset=4903, contentH=5350, boundsH=447, forceScroll=true [10:32:08] [RELOAD_TAB] 📊 Built 61 chatRows, estHeight=0.0 [10:32:08] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=68 [10:32:08] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=4903, currentOffset=4903 [10:32:08] [SCROLL] Scrolling to 4903, animated=false [10:32:09] [CLIENT_SIG] Cannot send typing_start - not connected [10:32:09] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:09] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:09] HELLO → sent (cached token, role=query) [10:32:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:09] [WS] Query connection failed - cleaning up all agent connections and views [10:32:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:09] [CLEANUP] ======================================== [10:32:09] [CLEANUP] Cleaning up all agent connections and views [10:32:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:09] [CLEANUP] Stopped and removed 0 video connections [10:32:09] [CLEANUP] Removed 0 video views [10:32:09] [CLEANUP] Removed 0 feed scroll views [10:32:09] [CLEANUP] Removed 0 status labels [10:32:09] [CLEANUP] Reset agent query state [10:32:09] [CLEANUP] Updated page indicator [10:32:09] [CLEANUP] Rebuilt video layout [10:32:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:09] [CLEANUP] ======================================== [10:32:09] [SERVER] Starting reconnect polling (5s interval) [10:32:09] [CLEANUP] ======================================== [10:32:09] [CLEANUP] Cleaning up all agent connections and views [10:32:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:09] [CLEANUP] Stopped and removed 0 video connections [10:32:09] [CLEANUP] Removed 0 video views [10:32:09] [CLEANUP] Removed 0 feed scroll views [10:32:09] [CLEANUP] Removed 0 status labels [10:32:09] [CLEANUP] Reset agent query state [10:32:09] [CLEANUP] Updated page indicator [10:32:09] [CLEANUP] Rebuilt video layout [10:32:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:09] [CLEANUP] ======================================== [10:32:09] [SERVER] Starting reconnect polling (5s interval) [10:32:10] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:32:10] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=59, isReloading=false [10:32:10] [SEND_MESSAGE] ✅ Added optimistic message id=-8 to arrays, newMsgCount=60 [10:32:10] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=68 [10:32:10] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=60, first5Ids=[-8, 28836, 28835, 28834, 28833] [10:32:10] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 60 messages [10:32:10] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-8, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:10] [RELOAD_TAB] 📊 Building chatRows from 60 messages [10:32:10] [SCROLL] wasNearBottom=true, threshold=447, offset=4903, contentH=5350, boundsH=447, forceScroll=true [10:32:10] [RELOAD_TAB] 📊 Built 62 chatRows, estHeight=0.0 [10:32:10] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=70 [10:32:10] [SCROLL] 💓 alive, visible=54...61, rows=62, estHeight=0.0, heightCalls=133 [10:32:10] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:32:10] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:32:10] [CLIENT_SIG] Cannot send typing_stop - not connected [10:32:10] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=true, nearBottom=true), maxY=4980, currentOffset=4980 [10:32:10] [SCROLL] Scrolling to 4980, animated=false [10:32:10] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28837,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:10"} [10:32:10] [CHAT] receive_message.php JSON: ["message_type": 0, "file_name": , "message_id": 28837, "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-04-23 08:32:10] [10:32:10] [DB_UPGRADE] Upgrading message ID: -8 → 28837, preserveOriginalDate=false [10:32:10] [DB_UPGRADE] ✅ Upgraded -8 → 28837 with send_status=0, 1 row(s) affected [10:32:10] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -8 → 28837 [10:32:10] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -8 → 28837 [10:32:10] ReloadData 9 [10:32:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:11] HELLO → sent (cached token, role=query) [10:32:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:11] [WS] Query connection failed - cleaning up all agent connections and views [10:32:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:11] [CLEANUP] ======================================== [10:32:11] [CLEANUP] Cleaning up all agent connections and views [10:32:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:11] [CLEANUP] Stopped and removed 0 video connections [10:32:11] [CLEANUP] Removed 0 video views [10:32:11] [CLEANUP] Removed 0 feed scroll views [10:32:11] [CLEANUP] Removed 0 status labels [10:32:11] [CLEANUP] Reset agent query state [10:32:11] [CLEANUP] Updated page indicator [10:32:11] [CLEANUP] Rebuilt video layout [10:32:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:11] [CLEANUP] ======================================== [10:32:11] [SERVER] Starting reconnect polling (5s interval) [10:32:11] [CLEANUP] ======================================== [10:32:11] [CLEANUP] Cleaning up all agent connections and views [10:32:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:11] [CLEANUP] Stopped and removed 0 video connections [10:32:11] [CLEANUP] Removed 0 video views [10:32:11] [CLEANUP] Removed 0 feed scroll views [10:32:11] [CLEANUP] Removed 0 status labels [10:32:11] [CLEANUP] Reset agent query state [10:32:11] [CLEANUP] Updated page indicator [10:32:11] [CLEANUP] Rebuilt video layout [10:32:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:11] [CLEANUP] ======================================== [10:32:11] [SERVER] Starting reconnect polling (5s interval) [10:32:11] [CLIENT_SIG] Connecting to session ILUIWU as Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:11] [CLIENT_SIG] Cannot send typing_start - not connected [10:32:11] [CLIENT_SIG] WebSocket opened [10:32:11] [CLIENT_SIG] HELLO sent as client for session ILUIWU [10:32:11] [CLIENT_SIG] Connected! clientId=C2xCTE_c-9YWkHjI [10:32:12] [CLIENT_SIG] Received 2 clients for session 'ILUIWU' (my session: 'ILUIWU') [10:32:12] [CLIENT_SIG] - Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:12] [CLIENT_SIG] - Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:12] [PUSH] Silent push received [10:32:12] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:12 +0000, appState=0, message_id=nil, type=nil [10:32:12] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:12 +0000 [10:32:12] [PUSH_EMBED] No embedded message_data in notification [10:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:12] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827], handled=false [10:32:12] [PUSH] No embedded data, pre-loading messages from server [10:32:12] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:12] [PUSH] Silent push received [10:32:12] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:12 +0000, appState=0, message_id=nil, type=nil [10:32:12] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:12 +0000 [10:32:12] [PUSH_EMBED] No embedded message_data in notification [10:32:12] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:12] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827], handled=false [10:32:12] [PUSH] No embedded data, pre-loading messages from server [10:32:12] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:12] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:12] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:12] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:12] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=58, IDs=[28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828, 28827] [10:32:12] [PRELOAD_CACHE] Preserving 9 push-inserted messages: [28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=9, IDs=[28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: merged.count=59, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PUSH_PRELOAD] ⚡ Pre-cached 59 messages for instant display (preserved 9 from push) [10:32:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 60 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2267 vccs=0 [10:32:12] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28837 [10:32:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28837, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [10:32:12] [PUSH] Parsed message_id: 28837 [10:32:12] [PUSH] Parsed operation_type: 3 [10:32:12] [PUSH] Taking direct action: opType=3, messageId=28837 [10:32:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28837 [10:32:12] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:12] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:12] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=60 [10:32:12] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28837 [10:32:12] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:12] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:12] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:12] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:12] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=59, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PRELOAD_CACHE] Preserving 9 push-inserted messages: [28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=9, IDs=[28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:12] [PUSH_TRACE] 🔀 mergeMessages: merged.count=59, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PUSH_PRELOAD] ⚡ Pre-cached 59 messages for instant display (preserved 9 from push) [10:32:12] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:12] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 60 msgs, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2267 vccs=0 [10:32:12] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28837 [10:32:12] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28837, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }] [10:32:12] [PUSH] Parsed message_id: 28837 [10:32:12] [PUSH] Parsed operation_type: 3 [10:32:12] [PUSH] Taking direct action: opType=3, messageId=28837 [10:32:12] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28837 [10:32:12] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:12] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:12] [INCREMENTAL_SYNC] ✅ Found 2 new messages [10:32:12] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 2 new messages, IDs=[28837, 28836] [10:32:12] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 60 msgs, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 60, first 10 IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=2 [10:32:12] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=60 [10:32:12] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:32:12] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=60 [10:32:12] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28837, maxMemoryId=28837 [10:32:12] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28837 [10:32:12] [INCREMENTAL_SYNC] ✅ No new messages [10:32:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:12] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=69 [10:32:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=60, first5Ids=[28837, 28836, 28835, 28834, 28833] [10:32:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 60 messages [10:32:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:12] [RELOAD_TAB] 📊 Building chatRows from 60 messages [10:32:12] [SCROLL] wasNearBottom=true, threshold=447, offset=4980, contentH=5427, boundsH=447, forceScroll=false [10:32:12] [RELOAD_TAB] 📊 Built 62 chatRows, estHeight=0.0 [10:32:12] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=69 [10:32:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:12] HELLO → sent (cached token, role=query) [10:32:12] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=4980, currentOffset=4980 [10:32:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:12] [WS] Query connection failed - cleaning up all agent connections and views [10:32:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:12] [CLEANUP] ======================================== [10:32:12] [CLEANUP] Cleaning up all agent connections and views [10:32:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:12] [CLEANUP] Stopped and removed 0 video connections [10:32:12] [CLEANUP] Removed 0 video views [10:32:12] [CLEANUP] Removed 0 feed scroll views [10:32:12] [CLEANUP] Removed 0 status labels [10:32:12] [CLEANUP] Reset agent query state [10:32:12] [CLEANUP] Updated page indicator [10:32:12] [CLEANUP] Rebuilt video layout [10:32:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:12] [CLEANUP] ======================================== [10:32:12] [SERVER] Starting reconnect polling (5s interval) [10:32:12] [CLEANUP] ======================================== [10:32:12] [CLEANUP] Cleaning up all agent connections and views [10:32:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:12] [CLEANUP] Stopped and removed 0 video connections [10:32:12] [CLEANUP] Removed 0 video views [10:32:12] [CLEANUP] Removed 0 feed scroll views [10:32:12] [CLEANUP] Removed 0 status labels [10:32:12] [CLEANUP] Reset agent query state [10:32:12] [CLEANUP] Updated page indicator [10:32:12] [CLEANUP] Rebuilt video layout [10:32:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:12] [CLEANUP] ======================================== [10:32:12] [SERVER] Starting reconnect polling (5s interval) [10:32:13] [CLIENT_SIG] Event received: type=3 messageId=28837 [10:32:13] [WS_EVENT] Received event: type=3, messageId=28837 [10:32:13] [WS_EVENT] Read receipt for message 28837 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:14] HELLO → sent (cached token, role=query) [10:32:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:14] [WS] Query connection failed - cleaning up all agent connections and views [10:32:14] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:14] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:14] [CLEANUP] ======================================== [10:32:14] [CLEANUP] Cleaning up all agent connections and views [10:32:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:14] [CLEANUP] Stopped and removed 0 video connections [10:32:14] [CLEANUP] Removed 0 video views [10:32:14] [CLEANUP] Removed 0 feed scroll views [10:32:14] [CLEANUP] Removed 0 status labels [10:32:14] [CLEANUP] Reset agent query state [10:32:14] [CLEANUP] Updated page indicator [10:32:14] [CLEANUP] Rebuilt video layout [10:32:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:14] [CLEANUP] ======================================== [10:32:14] [SERVER] Starting reconnect polling (5s interval) [10:32:14] [CLEANUP] ======================================== [10:32:14] [CLEANUP] Cleaning up all agent connections and views [10:32:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:14] [CLEANUP] Stopped and removed 0 video connections [10:32:14] [CLEANUP] Removed 0 video views [10:32:14] [CLEANUP] Removed 0 feed scroll views [10:32:14] [CLEANUP] Removed 0 status labels [10:32:14] [CLEANUP] Reset agent query state [10:32:14] [CLEANUP] Updated page indicator [10:32:14] [CLEANUP] Rebuilt video layout [10:32:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:14] [CLEANUP] ======================================== [10:32:14] [SERVER] Starting reconnect polling (5s interval) [10:32:15] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:15] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:16] HELLO → sent (cached token, role=query) [10:32:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:16] [WS] Query connection failed - cleaning up all agent connections and views [10:32:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:16] [CLEANUP] ======================================== [10:32:16] [CLEANUP] Cleaning up all agent connections and views [10:32:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:16] [CLEANUP] Stopped and removed 0 video connections [10:32:16] [CLEANUP] Removed 0 video views [10:32:16] [CLEANUP] Removed 0 feed scroll views [10:32:16] [CLEANUP] Removed 0 status labels [10:32:16] [CLEANUP] Reset agent query state [10:32:16] [CLEANUP] Updated page indicator [10:32:16] [CLEANUP] Rebuilt video layout [10:32:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:16] [CLEANUP] ======================================== [10:32:16] [SERVER] Starting reconnect polling (5s interval) [10:32:16] [CLEANUP] ======================================== [10:32:16] [CLEANUP] Cleaning up all agent connections and views [10:32:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:16] [CLEANUP] Stopped and removed 0 video connections [10:32:16] [CLEANUP] Removed 0 video views [10:32:16] [CLEANUP] Removed 0 feed scroll views [10:32:16] [CLEANUP] Removed 0 status labels [10:32:16] [CLEANUP] Reset agent query state [10:32:16] [CLEANUP] Updated page indicator [10:32:16] [CLEANUP] Rebuilt video layout [10:32:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:16] [CLEANUP] ======================================== [10:32:16] [SERVER] Starting reconnect polling (5s interval) [10:32:17] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:17] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:17] HELLO → sent (cached token, role=query) [10:32:17] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:17] [WS] Query connection failed - cleaning up all agent connections and views [10:32:17] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:17] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:17] [CLEANUP] ======================================== [10:32:17] [CLEANUP] Cleaning up all agent connections and views [10:32:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:17] [CLEANUP] Stopped and removed 0 video connections [10:32:17] [CLEANUP] Removed 0 video views [10:32:17] [CLEANUP] Removed 0 feed scroll views [10:32:17] [CLEANUP] Removed 0 status labels [10:32:17] [CLEANUP] Reset agent query state [10:32:17] [CLEANUP] Updated page indicator [10:32:17] [CLEANUP] Rebuilt video layout [10:32:17] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:17] [CLEANUP] ======================================== [10:32:17] [SERVER] Starting reconnect polling (5s interval) [10:32:17] [CLEANUP] ======================================== [10:32:17] [CLEANUP] Cleaning up all agent connections and views [10:32:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:17] [CLEANUP] Stopped and removed 0 video connections [10:32:17] [CLEANUP] Removed 0 video views [10:32:17] [CLEANUP] Removed 0 feed scroll views [10:32:17] [CLEANUP] Removed 0 status labels [10:32:17] [CLEANUP] Reset agent query state [10:32:17] [CLEANUP] Updated page indicator [10:32:17] [CLEANUP] Rebuilt video layout [10:32:17] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:17] [CLEANUP] ======================================== [10:32:17] [SERVER] Starting reconnect polling (5s interval) [10:32:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:19] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:19] HELLO → sent (cached token, role=query) [10:32:19] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:19] [WS] Query connection failed - cleaning up all agent connections and views [10:32:19] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:19] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:19] [CLEANUP] ======================================== [10:32:19] [CLEANUP] Cleaning up all agent connections and views [10:32:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:19] [CLEANUP] Stopped and removed 0 video connections [10:32:19] [CLEANUP] Removed 0 video views [10:32:19] [CLEANUP] Removed 0 feed scroll views [10:32:19] [CLEANUP] Removed 0 status labels [10:32:19] [CLEANUP] Reset agent query state [10:32:19] [CLEANUP] Updated page indicator [10:32:19] [CLEANUP] Rebuilt video layout [10:32:19] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:19] [CLEANUP] ======================================== [10:32:19] [SERVER] Starting reconnect polling (5s interval) [10:32:19] [CLEANUP] ======================================== [10:32:19] [CLEANUP] Cleaning up all agent connections and views [10:32:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:19] [CLEANUP] Stopped and removed 0 video connections [10:32:19] [CLEANUP] Removed 0 video views [10:32:19] [CLEANUP] Removed 0 feed scroll views [10:32:19] [CLEANUP] Removed 0 status labels [10:32:19] [CLEANUP] Reset agent query state [10:32:19] [CLEANUP] Updated page indicator [10:32:19] [CLEANUP] Rebuilt video layout [10:32:19] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:19] [CLEANUP] ======================================== [10:32:19] [SERVER] Starting reconnect polling (5s interval) [10:32:20] [SCROLL] 💓 alive, visible=55...61, rows=62, estHeight=0.0, heightCalls=69 [10:32:20] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:20] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:21] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:21] HELLO → sent (cached token, role=query) [10:32:21] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:21] [WS] Query connection failed - cleaning up all agent connections and views [10:32:21] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:21] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:21] [CLEANUP] ======================================== [10:32:21] [CLEANUP] Cleaning up all agent connections and views [10:32:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:21] [CLEANUP] Stopped and removed 0 video connections [10:32:21] [CLEANUP] Removed 0 video views [10:32:21] [CLEANUP] Removed 0 feed scroll views [10:32:21] [CLEANUP] Removed 0 status labels [10:32:21] [CLEANUP] Reset agent query state [10:32:21] [CLEANUP] Updated page indicator [10:32:21] [CLEANUP] Rebuilt video layout [10:32:21] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:21] [CLEANUP] ======================================== [10:32:21] [SERVER] Starting reconnect polling (5s interval) [10:32:21] [CLEANUP] ======================================== [10:32:21] [CLEANUP] Cleaning up all agent connections and views [10:32:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:21] [CLEANUP] Stopped and removed 0 video connections [10:32:21] [CLEANUP] Removed 0 video views [10:32:21] [CLEANUP] Removed 0 feed scroll views [10:32:21] [CLEANUP] Removed 0 status labels [10:32:21] [CLEANUP] Reset agent query state [10:32:21] [CLEANUP] Updated page indicator [10:32:21] [CLEANUP] Rebuilt video layout [10:32:21] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:21] [CLEANUP] ======================================== [10:32:21] [SERVER] Starting reconnect polling (5s interval) [10:32:21] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:32:21] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=60, isReloading=false [10:32:21] [SEND_MESSAGE] ✅ Added optimistic message id=-9 to arrays, newMsgCount=61 [10:32:21] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=61, first5Ids=[-9, 28837, 28836, 28835, 28834] [10:32:21] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 61 messages [10:32:21] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-9, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:21] [RELOAD_TAB] 📊 Building chatRows from 61 messages [10:32:21] [SCROLL] wasNearBottom=true, threshold=429, offset=4997, contentH=5427, boundsH=429, forceScroll=false [10:32:21] [RELOAD_TAB] 📊 Built 63 chatRows, estHeight=0.0 [10:32:21] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=71 [10:32:21] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:32:21] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:32:21] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5053, currentOffset=5053 [10:32:21] [SCROLL] Scrolling to 5053, animated=true [10:32:21] [CLIENT_SIG] Event received: type=0 messageId=28838 [10:32:21] [WS_EVENT] Received event: type=0, messageId=28838 [10:32:21] [WS_EVENT] 📨 New message notification (msgId=28838) - triggering incremental refresh, currentMsgCount=61 [10:32:21] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=61 [10:32:21] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28837, maxMemoryId=28837 [10:32:21] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28837 [10:32:21] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28838,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:21"} [10:32:21] [CHAT] receive_message.php JSON: ["message_type": 0, "message_id": 28838, "session_id": ILUIWU, "file_name": , "datesent_utc": 2026-04-23 08:32:21, "ok": 1] [10:32:21] [DB_UPGRADE] Upgrading message ID: -9 → 28838, preserveOriginalDate=false [10:32:21] [DB_UPGRADE] ✅ Upgraded -9 → 28838 with send_status=0, 1 row(s) affected [10:32:21] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -9 → 28838 [10:32:21] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -9 → 28838 [10:32:21] ReloadData 9 [10:32:21] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:21] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28838] [10:32:21] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 61 msgs, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:21] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 61, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:21] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:21] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=61 [10:32:21] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=61 [10:32:21] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=205 [10:32:21] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=61, first5Ids=[28838, 28837, 28836, 28835, 28834] [10:32:21] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 61 messages [10:32:21] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:21] [RELOAD_TAB] 📊 Building chatRows from 61 messages [10:32:21] [SCROLL] wasNearBottom=true, threshold=447, offset=5053, contentH=5500, boundsH=447, forceScroll=true [10:32:21] [RELOAD_TAB] 📊 Built 63 chatRows, estHeight=0.0 [10:32:21] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=70 [10:32:21] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5053, currentOffset=5053 [10:32:21] [SCROLL] Scrolling to 5053, animated=false [10:32:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:22] HELLO → sent (cached token, role=query) [10:32:22] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:22] [WS] Query connection failed - cleaning up all agent connections and views [10:32:22] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:22] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:22] [CLEANUP] ======================================== [10:32:22] [CLEANUP] Cleaning up all agent connections and views [10:32:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:22] [CLEANUP] Stopped and removed 0 video connections [10:32:22] [CLEANUP] Removed 0 video views [10:32:22] [CLEANUP] Removed 0 feed scroll views [10:32:22] [CLEANUP] Removed 0 status labels [10:32:22] [CLEANUP] Reset agent query state [10:32:22] [CLEANUP] Updated page indicator [10:32:22] [CLEANUP] Rebuilt video layout [10:32:22] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:22] [CLEANUP] ======================================== [10:32:22] [SERVER] Starting reconnect polling (5s interval) [10:32:22] [CLEANUP] ======================================== [10:32:22] [CLEANUP] Cleaning up all agent connections and views [10:32:22] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:22] [CLEANUP] Stopped and removed 0 video connections [10:32:22] [CLEANUP] Removed 0 video views [10:32:22] [CLEANUP] Removed 0 feed scroll views [10:32:22] [CLEANUP] Removed 0 status labels [10:32:22] [CLEANUP] Reset agent query state [10:32:22] [CLEANUP] Updated page indicator [10:32:22] [CLEANUP] Rebuilt video layout [10:32:22] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:22] [CLEANUP] ======================================== [10:32:22] [SERVER] Starting reconnect polling (5s interval) [10:32:23] [PUSH] Silent push received [10:32:23] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:23 +0000, appState=0, message_id=nil, type=nil [10:32:23] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=59, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:23] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:23 +0000 [10:32:23] [PUSH_EMBED] No embedded message_data in notification [10:32:23] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:23] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=59, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828], handled=false [10:32:23] [PUSH] No embedded data, pre-loading messages from server [10:32:23] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:23] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:23] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:23] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:23] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:23] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:23] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:23] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=59, IDs=[28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829, 28828] [10:32:23] [PRELOAD_CACHE] Preserving 10 push-inserted messages: [28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:23] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=10, IDs=[28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:23] [PUSH_TRACE] 🔀 mergeMessages: merged.count=60, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [PUSH_PRELOAD] ⚡ Pre-cached 60 messages for instant display (preserved 10 from push) [10:32:23] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:23] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 61 msgs, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2278 vccs=0 [10:32:23] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28838 [10:32:23] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28838, AnyHashable("session_id"): ILUIWU, AnyHashable("aps"): { "content-available" = 1; }] [10:32:23] [PUSH] Parsed message_id: 28838 [10:32:23] [PUSH] Parsed operation_type: 3 [10:32:23] [PUSH] Taking direct action: opType=3, messageId=28838 [10:32:23] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28838 [10:32:23] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:23] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=61 [10:32:23] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28838 [10:32:23] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:23] [INCREMENTAL_SYNC] ✅ Found 3 new messages [10:32:23] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 3 new messages, IDs=[28838, 28837, 28836] [10:32:23] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 61 msgs, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 61, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=3 [10:32:23] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=61 [10:32:23] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=70 [10:32:23] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=61, first5Ids=[28838, 28837, 28836, 28835, 28834] [10:32:23] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 61 messages [10:32:23] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:23] [RELOAD_TAB] 📊 Building chatRows from 61 messages [10:32:23] [SCROLL] wasNearBottom=true, threshold=447, offset=5053, contentH=5500, boundsH=447, forceScroll=false [10:32:23] [RELOAD_TAB] 📊 Built 63 chatRows, estHeight=0.0 [10:32:23] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:24] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:24] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:24] [CLIENT_SIG] Event received: type=3 messageId=28838 [10:32:24] [WS_EVENT] Received event: type=3, messageId=28838 [10:32:24] [WS_EVENT] Read receipt for message 28838 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:24] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:24] HELLO → sent (cached token, role=query) [10:32:24] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:24] [WS] Query connection failed - cleaning up all agent connections and views [10:32:24] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:24] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:24] [CLEANUP] ======================================== [10:32:24] [CLEANUP] Cleaning up all agent connections and views [10:32:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:24] [CLEANUP] Stopped and removed 0 video connections [10:32:24] [CLEANUP] Removed 0 video views [10:32:24] [CLEANUP] Removed 0 feed scroll views [10:32:24] [CLEANUP] Removed 0 status labels [10:32:24] [CLEANUP] Reset agent query state [10:32:24] [CLEANUP] Updated page indicator [10:32:24] [CLEANUP] Rebuilt video layout [10:32:24] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:24] [CLEANUP] ======================================== [10:32:24] [SERVER] Starting reconnect polling (5s interval) [10:32:24] [CLEANUP] ======================================== [10:32:24] [CLEANUP] Cleaning up all agent connections and views [10:32:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:24] [CLEANUP] Stopped and removed 0 video connections [10:32:24] [CLEANUP] Removed 0 video views [10:32:24] [CLEANUP] Removed 0 feed scroll views [10:32:24] [CLEANUP] Removed 0 status labels [10:32:24] [CLEANUP] Reset agent query state [10:32:24] [CLEANUP] Updated page indicator [10:32:24] [CLEANUP] Rebuilt video layout [10:32:24] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:24] [CLEANUP] ======================================== [10:32:24] [SERVER] Starting reconnect polling (5s interval) [10:32:26] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:26] HELLO → sent (cached token, role=query) [10:32:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:26] [WS] Query connection failed - cleaning up all agent connections and views [10:32:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:26] [CLEANUP] ======================================== [10:32:26] [CLEANUP] Cleaning up all agent connections and views [10:32:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:26] [CLEANUP] Stopped and removed 0 video connections [10:32:26] [CLEANUP] Removed 0 video views [10:32:26] [CLEANUP] Removed 0 feed scroll views [10:32:26] [CLEANUP] Removed 0 status labels [10:32:26] [CLEANUP] Reset agent query state [10:32:26] [CLEANUP] Updated page indicator [10:32:26] [CLEANUP] Rebuilt video layout [10:32:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:26] [CLEANUP] ======================================== [10:32:26] [SERVER] Starting reconnect polling (5s interval) [10:32:26] [CLEANUP] ======================================== [10:32:26] [CLEANUP] Cleaning up all agent connections and views [10:32:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:26] [CLEANUP] Stopped and removed 0 video connections [10:32:26] [CLEANUP] Removed 0 video views [10:32:26] [CLEANUP] Removed 0 feed scroll views [10:32:26] [CLEANUP] Removed 0 status labels [10:32:26] [CLEANUP] Reset agent query state [10:32:26] [CLEANUP] Updated page indicator [10:32:26] [CLEANUP] Rebuilt video layout [10:32:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:26] [CLEANUP] ======================================== [10:32:26] [SERVER] Starting reconnect polling (5s interval) [10:32:27] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:27] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:27] HELLO → sent (cached token, role=query) [10:32:27] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:27] [WS] Query connection failed - cleaning up all agent connections and views [10:32:27] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:27] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:27] [CLEANUP] ======================================== [10:32:27] [CLEANUP] Cleaning up all agent connections and views [10:32:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:27] [CLEANUP] Stopped and removed 0 video connections [10:32:27] [CLEANUP] Removed 0 video views [10:32:27] [CLEANUP] Removed 0 feed scroll views [10:32:27] [CLEANUP] Removed 0 status labels [10:32:27] [CLEANUP] Reset agent query state [10:32:27] [CLEANUP] Updated page indicator [10:32:27] [CLEANUP] Rebuilt video layout [10:32:27] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:27] [CLEANUP] ======================================== [10:32:27] [SERVER] Starting reconnect polling (5s interval) [10:32:27] [CLEANUP] ======================================== [10:32:27] [CLEANUP] Cleaning up all agent connections and views [10:32:27] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:27] [CLEANUP] Stopped and removed 0 video connections [10:32:27] [CLEANUP] Removed 0 video views [10:32:27] [CLEANUP] Removed 0 feed scroll views [10:32:27] [CLEANUP] Removed 0 status labels [10:32:27] [CLEANUP] Reset agent query state [10:32:27] [CLEANUP] Updated page indicator [10:32:27] [CLEANUP] Rebuilt video layout [10:32:27] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:27] [CLEANUP] ======================================== [10:32:27] [SERVER] Starting reconnect polling (5s interval) [10:32:29] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:29] HELLO → sent (cached token, role=query) [10:32:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:29] [WS] Query connection failed - cleaning up all agent connections and views [10:32:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:29] [CLEANUP] ======================================== [10:32:29] [CLEANUP] Cleaning up all agent connections and views [10:32:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:29] [CLEANUP] Stopped and removed 0 video connections [10:32:29] [CLEANUP] Removed 0 video views [10:32:29] [CLEANUP] Removed 0 feed scroll views [10:32:29] [CLEANUP] Removed 0 status labels [10:32:29] [CLEANUP] Reset agent query state [10:32:29] [CLEANUP] Updated page indicator [10:32:29] [CLEANUP] Rebuilt video layout [10:32:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:29] [CLEANUP] ======================================== [10:32:29] [SERVER] Starting reconnect polling (5s interval) [10:32:29] [CLEANUP] ======================================== [10:32:29] [CLEANUP] Cleaning up all agent connections and views [10:32:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:29] [CLEANUP] Stopped and removed 0 video connections [10:32:29] [CLEANUP] Removed 0 video views [10:32:29] [CLEANUP] Removed 0 feed scroll views [10:32:29] [CLEANUP] Removed 0 status labels [10:32:29] [CLEANUP] Reset agent query state [10:32:29] [CLEANUP] Updated page indicator [10:32:29] [CLEANUP] Rebuilt video layout [10:32:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:29] [CLEANUP] ======================================== [10:32:29] [SERVER] Starting reconnect polling (5s interval) [10:32:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:31] HELLO → sent (cached token, role=query) [10:32:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:31] [WS] Query connection failed - cleaning up all agent connections and views [10:32:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:31] [CLEANUP] ======================================== [10:32:31] [CLEANUP] Cleaning up all agent connections and views [10:32:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:31] [CLEANUP] Stopped and removed 0 video connections [10:32:31] [CLEANUP] Removed 0 video views [10:32:31] [CLEANUP] Removed 0 feed scroll views [10:32:31] [CLEANUP] Removed 0 status labels [10:32:31] [CLEANUP] Reset agent query state [10:32:31] [CLEANUP] Updated page indicator [10:32:31] [CLEANUP] Rebuilt video layout [10:32:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:31] [CLEANUP] ======================================== [10:32:31] [SERVER] Starting reconnect polling (5s interval) [10:32:31] [CLEANUP] ======================================== [10:32:31] [CLEANUP] Cleaning up all agent connections and views [10:32:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:31] [CLEANUP] Stopped and removed 0 video connections [10:32:31] [CLEANUP] Removed 0 video views [10:32:31] [CLEANUP] Removed 0 feed scroll views [10:32:31] [CLEANUP] Removed 0 status labels [10:32:31] [CLEANUP] Reset agent query state [10:32:31] [CLEANUP] Updated page indicator [10:32:31] [CLEANUP] Rebuilt video layout [10:32:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:31] [CLEANUP] ======================================== [10:32:31] [SERVER] Starting reconnect polling (5s interval) [10:32:32] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:33] HELLO → sent (cached token, role=query) [10:32:33] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:33] [WS] Query connection failed - cleaning up all agent connections and views [10:32:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:33] [CLEANUP] ======================================== [10:32:33] [CLEANUP] Cleaning up all agent connections and views [10:32:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:33] [CLEANUP] Stopped and removed 0 video connections [10:32:33] [CLEANUP] Removed 0 video views [10:32:33] [CLEANUP] Removed 0 feed scroll views [10:32:33] [CLEANUP] Removed 0 status labels [10:32:33] [CLEANUP] Reset agent query state [10:32:33] [CLEANUP] Updated page indicator [10:32:33] [CLEANUP] Rebuilt video layout [10:32:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:33] [CLEANUP] ======================================== [10:32:33] [SERVER] Starting reconnect polling (5s interval) [10:32:33] [CLEANUP] ======================================== [10:32:33] [CLEANUP] Cleaning up all agent connections and views [10:32:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:33] [CLEANUP] Stopped and removed 0 video connections [10:32:33] [CLEANUP] Removed 0 video views [10:32:33] [CLEANUP] Removed 0 feed scroll views [10:32:33] [CLEANUP] Removed 0 status labels [10:32:33] [CLEANUP] Reset agent query state [10:32:33] [CLEANUP] Updated page indicator [10:32:33] [CLEANUP] Rebuilt video layout [10:32:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:33] [CLEANUP] ======================================== [10:32:33] [SERVER] Starting reconnect polling (5s interval) [10:32:34] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:34] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:34] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:34] HELLO → sent (cached token, role=query) [10:32:34] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:34] [WS] Query connection failed - cleaning up all agent connections and views [10:32:34] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:34] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:34] [CLEANUP] ======================================== [10:32:34] [CLEANUP] Cleaning up all agent connections and views [10:32:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:34] [CLEANUP] Stopped and removed 0 video connections [10:32:34] [CLEANUP] Removed 0 video views [10:32:34] [CLEANUP] Removed 0 feed scroll views [10:32:34] [CLEANUP] Removed 0 status labels [10:32:34] [CLEANUP] Reset agent query state [10:32:34] [CLEANUP] Updated page indicator [10:32:34] [CLEANUP] Rebuilt video layout [10:32:34] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:34] [CLEANUP] ======================================== [10:32:34] [SERVER] Starting reconnect polling (5s interval) [10:32:34] [CLEANUP] ======================================== [10:32:34] [CLEANUP] Cleaning up all agent connections and views [10:32:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:34] [CLEANUP] Stopped and removed 0 video connections [10:32:34] [CLEANUP] Removed 0 video views [10:32:34] [CLEANUP] Removed 0 feed scroll views [10:32:34] [CLEANUP] Removed 0 status labels [10:32:34] [CLEANUP] Reset agent query state [10:32:34] [CLEANUP] Updated page indicator [10:32:34] [CLEANUP] Rebuilt video layout [10:32:34] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:34] [CLEANUP] ======================================== [10:32:34] [SERVER] Starting reconnect polling (5s interval) [10:32:36] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:36] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:36] HELLO → sent (cached token, role=query) [10:32:36] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:36] [WS] Query connection failed - cleaning up all agent connections and views [10:32:36] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:36] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:36] [CLEANUP] ======================================== [10:32:36] [CLEANUP] Cleaning up all agent connections and views [10:32:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:36] [CLEANUP] Stopped and removed 0 video connections [10:32:36] [CLEANUP] Removed 0 video views [10:32:36] [CLEANUP] Removed 0 feed scroll views [10:32:36] [CLEANUP] Removed 0 status labels [10:32:36] [CLEANUP] Reset agent query state [10:32:36] [CLEANUP] Updated page indicator [10:32:36] [CLEANUP] Rebuilt video layout [10:32:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:36] [CLEANUP] ======================================== [10:32:36] [SERVER] Starting reconnect polling (5s interval) [10:32:36] [CLEANUP] ======================================== [10:32:36] [CLEANUP] Cleaning up all agent connections and views [10:32:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:36] [CLEANUP] Stopped and removed 0 video connections [10:32:36] [CLEANUP] Removed 0 video views [10:32:36] [CLEANUP] Removed 0 feed scroll views [10:32:36] [CLEANUP] Removed 0 status labels [10:32:36] [CLEANUP] Reset agent query state [10:32:36] [CLEANUP] Updated page indicator [10:32:36] [CLEANUP] Rebuilt video layout [10:32:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:36] [CLEANUP] ======================================== [10:32:36] [SERVER] Starting reconnect polling (5s interval) [10:32:36] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:37] [CLIENT_SIG] Event received: type=0 messageId=28839 [10:32:37] [WS_EVENT] Received event: type=0, messageId=28839 [10:32:37] [WS_EVENT] 📨 New message notification (msgId=28839) - triggering incremental refresh, currentMsgCount=61 [10:32:37] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=61 [10:32:37] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28838, maxMemoryId=28838 [10:32:37] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28838 [10:32:37] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:37] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28839] [10:32:37] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 61 msgs, first 10 IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:37] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28839 [10:32:37] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 62, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:37] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=62 [10:32:37] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=62 [10:32:37] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=62, first5Ids=[28839, 28838, 28837, 28836, 28835] [10:32:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 62 messages [10:32:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:37] [RELOAD_TAB] 📊 Building chatRows from 62 messages [10:32:37] [SCROLL] wasNearBottom=true, threshold=447, offset=5053, contentH=5500, boundsH=447, forceScroll=false [10:32:37] [RELOAD_TAB] 📊 Built 64 chatRows, estHeight=0.0 [10:32:37] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28838 → 28839 [10:32:37] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=72 [10:32:37] [SCROLL] 💓 alive, visible=56...63, rows=64, estHeight=0.0, heightCalls=137 [10:32:37] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5130, currentOffset=5130 [10:32:37] [SCROLL] Scrolling to 5130, animated=true [10:32:38] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:38] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:38] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:38] HELLO → sent (cached token, role=query) [10:32:38] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:38] [WS] Query connection failed - cleaning up all agent connections and views [10:32:38] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:38] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:38] [CLEANUP] ======================================== [10:32:38] [CLEANUP] Cleaning up all agent connections and views [10:32:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:38] [CLEANUP] Stopped and removed 0 video connections [10:32:38] [CLEANUP] Removed 0 video views [10:32:38] [CLEANUP] Removed 0 feed scroll views [10:32:38] [CLEANUP] Removed 0 status labels [10:32:38] [CLEANUP] Reset agent query state [10:32:38] [CLEANUP] Updated page indicator [10:32:38] [CLEANUP] Rebuilt video layout [10:32:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:38] [CLEANUP] ======================================== [10:32:38] [SERVER] Starting reconnect polling (5s interval) [10:32:38] [CLEANUP] ======================================== [10:32:38] [CLEANUP] Cleaning up all agent connections and views [10:32:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:38] [CLEANUP] Stopped and removed 0 video connections [10:32:38] [CLEANUP] Removed 0 video views [10:32:38] [CLEANUP] Removed 0 feed scroll views [10:32:38] [CLEANUP] Removed 0 status labels [10:32:38] [CLEANUP] Reset agent query state [10:32:38] [CLEANUP] Updated page indicator [10:32:38] [CLEANUP] Rebuilt video layout [10:32:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:38] [CLEANUP] ======================================== [10:32:38] [SERVER] Starting reconnect polling (5s interval) [10:32:38] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:32:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 62 msgs, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2293 vccs=0 [10:32:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28839 [10:32:38] [PUSH] handlePollEventsNotification userInfo: [:] [10:32:38] [PUSH] No message_id in userInfo [10:32:38] [PUSH] No operation_type in userInfo [10:32:38] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:32:38] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=60, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:38] [PUSH_TRACE] 📬 POLL: memory state: count=62, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [FAST_REFRESH] Already have 62 messages in memory [10:32:38] [FAST_REFRESH] maxMemoryId=28839, maxLocalId=28839 [10:32:38] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:32:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=62 [10:32:38] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:32:38] [READBY_OPT] No message IDs to fetch - skipping server call [10:32:38] [GAP_FIX] Incremental sync will use since_id=28835 (background max=28835, current DB max=28839) [10:32:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=62 [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28839 [10:32:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:38] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:32:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=62 [10:32:38] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:38] [PUSH] Silent push received [10:32:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:38 +0000, appState=0, message_id=nil, type=nil [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=60, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:38 +0000 [10:32:38] [PUSH_EMBED] No embedded message_data in notification [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=60, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829], handled=false [10:32:38] [PUSH] No embedded data, pre-loading messages from server [10:32:38] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:38] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:32:38 +0000 - type: unknown, operation_type: 0, message_id: 28839, session_id: ILUIWU, state: 0 [10:32:38] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28839, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:36"; "file_name" = ""; "is_encrypted" = 0; message = "I did baby. But let me do it again"; "message_id" = 28839; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:32:36, AnyHashable("message"): I did baby. But let me do it again, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra] [10:32:38] [PUSH] App active - suppressing notification UI, posting internal event [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:38 +0000 [10:32:38] [PUSH_TRACE] ⬇️ Processing embedded message_id=28839 [10:32:38] [PUSH_EMBED] 📩 Received embedded message: id=28839, type=0, sender=Esra [10:32:38] [PUSH_TRACE] ⬇️ Message details: text="I did baby. But let me do it again...", datesent=2026-04-23 08:32:36 [10:32:38] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:38] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_EMBED] ✅ Saved message 28839 to local DB (sync) [10:32:38] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28839 [10:32:38] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28839 [10:32:38] [PUSH_TRACE] 📦 Cache state: valid=true, count=60, IDs=[28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830, 28829] [10:32:38] [PUSH_EMBED] Inserted message 28839 into existing cache (now 61 messages) [10:32:38] [PUSH_TRACE] 📦 ✅ Inserted message 28839, cache now has IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 📦 EXITING cache update queue for message 28839 [10:32:38] [PUSH_EMBED] Fetching evolution data for message 28839 in background [10:32:38] [PUSH_EMBED] ✅ Fully processed message 28839 [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28839 [10:32:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 62 msgs, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2293 vccs=0 [10:32:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28839 [10:32:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28839, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:36"; "file_name" = ""; "is_encrypted" = 0; message = "I did baby. But let me do it again"; "message_id" = 28839; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:32:36, AnyHashable("message"): I did baby. But let me do it again, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra] [10:32:38] [PUSH_EMBED_VC] Message 28839 already in memory - skipping [10:32:38] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:38] [PUSH] Parsed message_id: 28839 [10:32:38] [PUSH] Parsed operation_type: 0 [10:32:38] [PUSH] Taking direct action: opType=0, messageId=28839 [10:32:38] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28839 [10:32:38] [PUSH] ⚡ Message 28839 already in memory - skipping duplicate notification entirely [10:32:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:38] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:38] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:38] [PUSH_TRACE] 👁️ Received message id=28839, text="I did baby. But let me do it a..." [10:32:38] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:38] [PUSH_UI] Message 28839 already in memory - skipping insert [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:38] [PUSH] Silent push received [10:32:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:38 +0000, appState=0, message_id=28839, type=nil [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:38 +0000 [10:32:38] [PUSH_TRACE] ⬇️ Processing embedded message_id=28839 [10:32:38] [PUSH_EMBED] 📩 Received embedded message: id=28839, type=0, sender=Esra [10:32:38] [PUSH_TRACE] ⬇️ Message details: text="I did baby. But let me do it again...", datesent=2026-04-23 08:32:36 [10:32:38] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:38] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_EMBED] ✅ Saved message 28839 to local DB (sync) [10:32:38] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28839 [10:32:38] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28839 [10:32:38] [PUSH_TRACE] 📦 Cache state: valid=true, count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 📦 ⚠️ Message 28839 already in cache, skipping insert [10:32:38] [PUSH_TRACE] 📦 EXITING cache update queue for message 28839 [10:32:38] [PUSH_EMBED] Fetching evolution data for message 28839 in background [10:32:38] [PUSH_EMBED] ✅ Fully processed message 28839 [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28839 [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830], handled=true [10:32:38] [PUSH] Embedded message handled instantly from silent push [10:32:38] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:32:38] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28839 [10:32:38] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:38] [PUSH_TRACE] 👁️ Received message id=28839, text="I did baby. But let me do it a..." [10:32:38] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:38] [PUSH_UI] Message 28839 already in memory - skipping insert [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 62 msgs, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2293 vccs=0 [10:32:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28839 [10:32:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("sender_name"): Esra, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:36, AnyHashable("operation_type"): 0, AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("timer"): 0, AnyHashable("message_id"): 28839, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("thumb_file_name"): , AnyHashable("message"): I did baby. But let me do it again, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:36"; "file_name" = ""; "is_encrypted" = 0; message = "I did baby. But let me do it again"; "message_id" = 28839; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE] [10:32:38] [PUSH_EMBED_VC] Message 28839 already in memory - skipping [10:32:38] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:38] [PUSH] Parsed message_id: 28839 [10:32:38] [PUSH] Parsed operation_type: 0 [10:32:38] [PUSH] Taking direct action: opType=0, messageId=28839 [10:32:38] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28839 [10:32:38] [PUSH] ⚡ Message 28839 already in memory - skipping duplicate notification entirely [10:32:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:38] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:38] [PUSH] Silent push received [10:32:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:38 +0000, appState=0, message_id=28839, type=nil [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:38 +0000 [10:32:38] [PUSH_TRACE] ⬇️ Processing embedded message_id=28839 [10:32:38] [PUSH_EMBED] 📩 Received embedded message: id=28839, type=0, sender=Esra [10:32:38] [PUSH_TRACE] ⬇️ Message details: text="I did baby. But let me do it again...", datesent=2026-04-23 08:32:36 [10:32:38] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:38] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_EMBED] ✅ Saved message 28839 to local DB (sync) [10:32:38] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28839 [10:32:38] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28839 [10:32:38] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28839 [10:32:38] [PUSH_TRACE] 📦 Cache state: valid=true, count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 📦 ⚠️ Message 28839 already in cache, skipping insert [10:32:38] [PUSH_TRACE] 📦 EXITING cache update queue for message 28839 [10:32:38] [PUSH_EMBED] Fetching evolution data for message 28839 in background [10:32:38] [PUSH_EMBED] ✅ Fully processed message 28839 [10:32:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28839 [10:32:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830], handled=true [10:32:38] [PUSH] Embedded message handled instantly from silent push [10:32:38] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:32:38] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28839 [10:32:38] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:38] [PUSH_TRACE] 👁️ Received message id=28839, text="I did baby. But let me do it a..." [10:32:38] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:38] [PUSH_UI] Message 28839 already in memory - skipping insert [10:32:38] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 62 msgs, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2293 vccs=0 [10:32:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28839 [10:32:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): , AnyHashable("message_type"): 0, AnyHashable("message"): I did baby. But let me do it again, AnyHashable("message_id"): 28839, AnyHashable("file_name"): , AnyHashable("datesent"): 2026-04-23 08:32:36, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:36"; "file_name" = ""; "is_encrypted" = 0; message = "I did baby. But let me do it again"; "message_id" = 28839; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28838; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): Esra, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }] [10:32:38] [PUSH_EMBED_VC] Message 28839 already in memory - skipping [10:32:38] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:38] [PUSH] Parsed message_id: 28839 [10:32:38] [PUSH] Parsed operation_type: 0 [10:32:38] [PUSH] Taking direct action: opType=0, messageId=28839 [10:32:38] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28839 [10:32:38] [PUSH] ⚡ Message 28839 already in memory - skipping duplicate notification entirely [10:32:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:38] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=62, first5Ids=[28839, 28838, 28837, 28836, 28835] [10:32:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 62 messages [10:32:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [RELOAD_TAB] 📊 Building chatRows from 62 messages [10:32:38] [SCROLL] wasNearBottom=true, threshold=447, offset=5130, contentH=5577, boundsH=447, forceScroll=true [10:32:38] [RELOAD_TAB] 📊 Built 64 chatRows, estHeight=0.0 [10:32:38] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=71 [10:32:38] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5130, currentOffset=5130 [10:32:38] [SCROLL] Scrolling to 5130, animated=false [10:32:38] [PUSH_EMBED] Got evolution data for message 28839, saving to local DB [10:32:38] [PUSH_EMBED] Saved evolution data for message 28839 [10:32:38] [PUSH_EMBED] Got evolution data for message 28839, saving to local DB [10:32:38] [PUSH_EMBED] Saved evolution data for message 28839 [10:32:38] [INCREMENTAL_SYNC] ✅ Found 4 new messages [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 4 new messages, IDs=[28839, 28838, 28837, 28836] [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 62 msgs, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 62, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=4 [10:32:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=62 [10:32:38] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:32:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=62 [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28839, maxMemoryId=28839 [10:32:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28839 [10:32:38] [FAST_REFRESH] Incremental sync complete - 62 messages [10:32:38] [PUSH_EMBED] Got evolution data for message 28839, saving to local DB [10:32:38] [PUSH_EMBED] Saved evolution data for message 28839 [10:32:38] [INCREMENTAL_SYNC] ✅ No new messages [10:32:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=71 [10:32:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=62, first5Ids=[28839, 28838, 28837, 28836, 28835] [10:32:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 62 messages [10:32:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [RELOAD_TAB] 📊 Building chatRows from 62 messages [10:32:38] [SCROLL] wasNearBottom=true, threshold=447, offset=5130, contentH=5577, boundsH=447, forceScroll=false [10:32:38] [RELOAD_TAB] 📊 Built 64 chatRows, estHeight=0.0 [10:32:38] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:38] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:38] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:38] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:38] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:38] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:38] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:38] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PRELOAD_CACHE] Preserving 11 push-inserted messages: [28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:38] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=11, IDs=[28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:38] [PUSH_TRACE] 🔀 mergeMessages: merged.count=61, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_PRELOAD] ⚡ Pre-cached 61 messages for instant display (preserved 11 from push) [10:32:38] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 62 msgs, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2294 vccs=0 [10:32:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28839 [10:32:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28839, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU] [10:32:38] [PUSH] Parsed message_id: 28839 [10:32:38] [PUSH] Parsed operation_type: 3 [10:32:38] [PUSH] Taking direct action: opType=3, messageId=28839 [10:32:38] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28839 [10:32:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=62 [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28839 [10:32:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:38] [INCREMENTAL_SYNC] ✅ Found 4 new messages [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 4 new messages, IDs=[28839, 28838, 28837, 28836] [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 62 msgs, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 62, first 10 IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:38] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=4 [10:32:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=62 [10:32:39] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:39] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=62, first5Ids=[28839, 28838, 28837, 28836, 28835] [10:32:39] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 62 messages [10:32:39] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:39] [RELOAD_TAB] 📊 Building chatRows from 62 messages [10:32:39] [SCROLL] wasNearBottom=true, threshold=447, offset=5130, contentH=5577, boundsH=447, forceScroll=false [10:32:39] [RELOAD_TAB] 📊 Built 64 chatRows, estHeight=0.0 [10:32:39] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:39] [CLIENT_SIG] Event received: type=3 messageId=28839 [10:32:39] [WS_EVENT] Received event: type=3, messageId=28839 [10:32:39] [WS_EVENT] Read receipt for message 28839 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:39] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:32:39] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:32:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:39] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:39] HELLO → sent (cached token, role=query) [10:32:39] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:39] [WS] Query connection failed - cleaning up all agent connections and views [10:32:39] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:39] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:39] [CLEANUP] ======================================== [10:32:39] [CLEANUP] Cleaning up all agent connections and views [10:32:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:39] [CLEANUP] Stopped and removed 0 video connections [10:32:39] [CLEANUP] Removed 0 video views [10:32:39] [CLEANUP] Removed 0 feed scroll views [10:32:39] [CLEANUP] Removed 0 status labels [10:32:39] [CLEANUP] Reset agent query state [10:32:39] [CLEANUP] Updated page indicator [10:32:39] [CLEANUP] Rebuilt video layout [10:32:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:39] [CLEANUP] ======================================== [10:32:39] [SERVER] Starting reconnect polling (5s interval) [10:32:39] [CLEANUP] ======================================== [10:32:39] [CLEANUP] Cleaning up all agent connections and views [10:32:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:39] [CLEANUP] Stopped and removed 0 video connections [10:32:39] [CLEANUP] Removed 0 video views [10:32:39] [CLEANUP] Removed 0 feed scroll views [10:32:39] [CLEANUP] Removed 0 status labels [10:32:39] [CLEANUP] Reset agent query state [10:32:39] [CLEANUP] Updated page indicator [10:32:39] [CLEANUP] Rebuilt video layout [10:32:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:39] [CLEANUP] ======================================== [10:32:39] [SERVER] Starting reconnect polling (5s interval) [10:32:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:41] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:41] HELLO → sent (cached token, role=query) [10:32:41] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:41] [WS] Query connection failed - cleaning up all agent connections and views [10:32:41] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:41] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:41] [CLEANUP] ======================================== [10:32:41] [CLEANUP] Cleaning up all agent connections and views [10:32:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:41] [CLEANUP] Stopped and removed 0 video connections [10:32:41] [CLEANUP] Removed 0 video views [10:32:41] [CLEANUP] Removed 0 feed scroll views [10:32:41] [CLEANUP] Removed 0 status labels [10:32:41] [CLEANUP] Reset agent query state [10:32:41] [CLEANUP] Updated page indicator [10:32:41] [CLEANUP] Rebuilt video layout [10:32:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:41] [CLEANUP] ======================================== [10:32:41] [SERVER] Starting reconnect polling (5s interval) [10:32:41] [CLEANUP] ======================================== [10:32:41] [CLEANUP] Cleaning up all agent connections and views [10:32:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:41] [CLEANUP] Stopped and removed 0 video connections [10:32:41] [CLEANUP] Removed 0 video views [10:32:41] [CLEANUP] Removed 0 feed scroll views [10:32:41] [CLEANUP] Removed 0 status labels [10:32:41] [CLEANUP] Reset agent query state [10:32:41] [CLEANUP] Updated page indicator [10:32:41] [CLEANUP] Rebuilt video layout [10:32:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:41] [CLEANUP] ======================================== [10:32:41] [SERVER] Starting reconnect polling (5s interval) [10:32:42] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:42] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:43] HELLO → sent (cached token, role=query) [10:32:43] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:43] [WS] Query connection failed - cleaning up all agent connections and views [10:32:43] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:43] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:43] [CLEANUP] ======================================== [10:32:43] [CLEANUP] Cleaning up all agent connections and views [10:32:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:43] [CLEANUP] Stopped and removed 0 video connections [10:32:43] [CLEANUP] Removed 0 video views [10:32:43] [CLEANUP] Removed 0 feed scroll views [10:32:43] [CLEANUP] Removed 0 status labels [10:32:43] [CLEANUP] Reset agent query state [10:32:43] [CLEANUP] Updated page indicator [10:32:43] [CLEANUP] Rebuilt video layout [10:32:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:43] [CLEANUP] ======================================== [10:32:43] [SERVER] Starting reconnect polling (5s interval) [10:32:43] [CLEANUP] ======================================== [10:32:43] [CLEANUP] Cleaning up all agent connections and views [10:32:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:43] [CLEANUP] Stopped and removed 0 video connections [10:32:43] [CLEANUP] Removed 0 video views [10:32:43] [CLEANUP] Removed 0 feed scroll views [10:32:43] [CLEANUP] Removed 0 status labels [10:32:43] [CLEANUP] Reset agent query state [10:32:43] [CLEANUP] Updated page indicator [10:32:43] [CLEANUP] Rebuilt video layout [10:32:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:43] [CLEANUP] ======================================== [10:32:43] [SERVER] Starting reconnect polling (5s interval) [10:32:44] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:44] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:44] HELLO → sent (cached token, role=query) [10:32:44] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:44] [WS] Query connection failed - cleaning up all agent connections and views [10:32:44] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:44] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:44] [CLEANUP] ======================================== [10:32:44] [CLEANUP] Cleaning up all agent connections and views [10:32:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:44] [CLEANUP] Stopped and removed 0 video connections [10:32:44] [CLEANUP] Removed 0 video views [10:32:44] [CLEANUP] Removed 0 feed scroll views [10:32:44] [CLEANUP] Removed 0 status labels [10:32:44] [CLEANUP] Reset agent query state [10:32:44] [CLEANUP] Updated page indicator [10:32:44] [CLEANUP] Rebuilt video layout [10:32:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:44] [CLEANUP] ======================================== [10:32:44] [SERVER] Starting reconnect polling (5s interval) [10:32:44] [CLEANUP] ======================================== [10:32:44] [CLEANUP] Cleaning up all agent connections and views [10:32:44] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:44] [CLEANUP] Stopped and removed 0 video connections [10:32:44] [CLEANUP] Removed 0 video views [10:32:44] [CLEANUP] Removed 0 feed scroll views [10:32:44] [CLEANUP] Removed 0 status labels [10:32:44] [CLEANUP] Reset agent query state [10:32:44] [CLEANUP] Updated page indicator [10:32:44] [CLEANUP] Rebuilt video layout [10:32:44] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:44] [CLEANUP] ======================================== [10:32:44] [SERVER] Starting reconnect polling (5s interval) [10:32:45] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:32:45] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=62, isReloading=false [10:32:45] [SEND_MESSAGE] ✅ Added optimistic message id=-10 to arrays, newMsgCount=63 [10:32:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=63, first5Ids=[-10, 28839, 28838, 28837, 28836] [10:32:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 63 messages [10:32:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-10, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:45] [RELOAD_TAB] 📊 Building chatRows from 63 messages [10:32:45] [SCROLL] wasNearBottom=true, threshold=447, offset=5130, contentH=5577, boundsH=447, forceScroll=false [10:32:45] [RELOAD_TAB] 📊 Built 65 chatRows, estHeight=0.0 [10:32:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=73 [10:32:45] [SCROLL] 💓 alive, visible=57...64, rows=65, estHeight=0.0, heightCalls=139 [10:32:45] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:32:45] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:32:45] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5207, currentOffset=5207 [10:32:45] [SCROLL] Scrolling to 5207, animated=true [10:32:45] [CLIENT_SIG] Event received: type=0 messageId=28840 [10:32:45] [WS_EVENT] Received event: type=0, messageId=28840 [10:32:45] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28840,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:32:45"} [10:32:45] [WS_EVENT] 📨 New message notification (msgId=28840) - triggering incremental refresh, currentMsgCount=63 [10:32:45] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=63 [10:32:45] [CHAT] receive_message.php JSON: ["message_type": 0, "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-04-23 08:32:45, "message_id": 28840, "file_name": ] [10:32:45] [DB_UPGRADE] Upgrading message ID: -10 → 28840, preserveOriginalDate=false [10:32:45] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28839, maxMemoryId=28839 [10:32:45] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28839 [10:32:45] [DB_UPGRADE] ✅ Upgraded -10 → 28840 with send_status=0, 1 row(s) affected [10:32:45] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -10 → 28840 [10:32:45] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -10 → 28840 [10:32:45] ReloadData 9 [10:32:45] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:45] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28840] [10:32:45] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 63 msgs, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:45] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 63, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:45] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:45] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=63 [10:32:45] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=63 [10:32:45] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=71 [10:32:45] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=63, first5Ids=[28840, 28839, 28838, 28837, 28836] [10:32:45] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 63 messages [10:32:45] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:45] [RELOAD_TAB] 📊 Building chatRows from 63 messages [10:32:45] [SCROLL] wasNearBottom=true, threshold=447, offset=5207, contentH=5654, boundsH=447, forceScroll=true [10:32:45] [RELOAD_TAB] 📊 Built 65 chatRows, estHeight=0.0 [10:32:45] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=71 [10:32:45] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5207, currentOffset=5207 [10:32:45] [SCROLL] Scrolling to 5207, animated=false [10:32:46] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:46] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:46] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:46] HELLO → sent (cached token, role=query) [10:32:46] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:46] [WS] Query connection failed - cleaning up all agent connections and views [10:32:46] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:46] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:46] [CLEANUP] ======================================== [10:32:46] [CLEANUP] Cleaning up all agent connections and views [10:32:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:46] [CLEANUP] Stopped and removed 0 video connections [10:32:46] [CLEANUP] Removed 0 video views [10:32:46] [CLEANUP] Removed 0 feed scroll views [10:32:46] [CLEANUP] Removed 0 status labels [10:32:46] [CLEANUP] Reset agent query state [10:32:46] [CLEANUP] Updated page indicator [10:32:46] [CLEANUP] Rebuilt video layout [10:32:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:46] [CLEANUP] ======================================== [10:32:46] [SERVER] Starting reconnect polling (5s interval) [10:32:46] [CLEANUP] ======================================== [10:32:46] [CLEANUP] Cleaning up all agent connections and views [10:32:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:46] [CLEANUP] Stopped and removed 0 video connections [10:32:46] [CLEANUP] Removed 0 video views [10:32:46] [CLEANUP] Removed 0 feed scroll views [10:32:46] [CLEANUP] Removed 0 status labels [10:32:46] [CLEANUP] Reset agent query state [10:32:46] [CLEANUP] Updated page indicator [10:32:46] [CLEANUP] Rebuilt video layout [10:32:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:46] [CLEANUP] ======================================== [10:32:46] [SERVER] Starting reconnect polling (5s interval) [10:32:47] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:47] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:48] HELLO → sent (cached token, role=query) [10:32:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:48] [WS] Query connection failed - cleaning up all agent connections and views [10:32:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:48] [CLEANUP] ======================================== [10:32:48] [CLEANUP] Cleaning up all agent connections and views [10:32:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:48] [CLEANUP] Stopped and removed 0 video connections [10:32:48] [CLEANUP] Removed 0 video views [10:32:48] [CLEANUP] Removed 0 feed scroll views [10:32:48] [CLEANUP] Removed 0 status labels [10:32:48] [CLEANUP] Reset agent query state [10:32:48] [CLEANUP] Updated page indicator [10:32:48] [CLEANUP] Rebuilt video layout [10:32:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:48] [CLEANUP] ======================================== [10:32:48] [SERVER] Starting reconnect polling (5s interval) [10:32:48] [CLEANUP] ======================================== [10:32:48] [CLEANUP] Cleaning up all agent connections and views [10:32:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:48] [CLEANUP] Stopped and removed 0 video connections [10:32:48] [CLEANUP] Removed 0 video views [10:32:48] [CLEANUP] Removed 0 feed scroll views [10:32:48] [CLEANUP] Removed 0 status labels [10:32:48] [CLEANUP] Reset agent query state [10:32:48] [CLEANUP] Updated page indicator [10:32:48] [CLEANUP] Rebuilt video layout [10:32:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:48] [CLEANUP] ======================================== [10:32:48] [SERVER] Starting reconnect polling (5s interval) [10:32:48] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:32:49] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:49] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:49] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:49] HELLO → sent (cached token, role=query) [10:32:49] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:49] [WS] Query connection failed - cleaning up all agent connections and views [10:32:49] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:49] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:49] [CLEANUP] ======================================== [10:32:49] [CLEANUP] Cleaning up all agent connections and views [10:32:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:49] [CLEANUP] Stopped and removed 0 video connections [10:32:49] [CLEANUP] Removed 0 video views [10:32:49] [CLEANUP] Removed 0 feed scroll views [10:32:49] [CLEANUP] Removed 0 status labels [10:32:49] [CLEANUP] Reset agent query state [10:32:49] [CLEANUP] Updated page indicator [10:32:49] [CLEANUP] Rebuilt video layout [10:32:49] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:49] [CLEANUP] ======================================== [10:32:49] [SERVER] Starting reconnect polling (5s interval) [10:32:49] [CLEANUP] ======================================== [10:32:49] [CLEANUP] Cleaning up all agent connections and views [10:32:49] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:49] [CLEANUP] Stopped and removed 0 video connections [10:32:49] [CLEANUP] Removed 0 video views [10:32:49] [CLEANUP] Removed 0 feed scroll views [10:32:49] [CLEANUP] Removed 0 status labels [10:32:49] [CLEANUP] Reset agent query state [10:32:49] [CLEANUP] Updated page indicator [10:32:49] [CLEANUP] Rebuilt video layout [10:32:49] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:49] [CLEANUP] ======================================== [10:32:49] [SERVER] Starting reconnect polling (5s interval) [10:32:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:51] HELLO → sent (cached token, role=query) [10:32:51] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:51] [WS] Query connection failed - cleaning up all agent connections and views [10:32:51] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:51] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:51] [CLEANUP] ======================================== [10:32:51] [CLEANUP] Cleaning up all agent connections and views [10:32:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:51] [CLEANUP] Stopped and removed 0 video connections [10:32:51] [CLEANUP] Removed 0 video views [10:32:51] [CLEANUP] Removed 0 feed scroll views [10:32:51] [CLEANUP] Removed 0 status labels [10:32:51] [CLEANUP] Reset agent query state [10:32:51] [CLEANUP] Updated page indicator [10:32:51] [CLEANUP] Rebuilt video layout [10:32:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:51] [CLEANUP] ======================================== [10:32:51] [SERVER] Starting reconnect polling (5s interval) [10:32:51] [CLEANUP] ======================================== [10:32:51] [CLEANUP] Cleaning up all agent connections and views [10:32:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:51] [CLEANUP] Stopped and removed 0 video connections [10:32:51] [CLEANUP] Removed 0 video views [10:32:51] [CLEANUP] Removed 0 feed scroll views [10:32:51] [CLEANUP] Removed 0 status labels [10:32:51] [CLEANUP] Reset agent query state [10:32:51] [CLEANUP] Updated page indicator [10:32:51] [CLEANUP] Rebuilt video layout [10:32:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:51] [CLEANUP] ======================================== [10:32:51] [SERVER] Starting reconnect polling (5s interval) [10:32:51] [PUSH] Silent push received [10:32:51] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:51 +0000, appState=0, message_id=nil, type=nil [10:32:51] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:51] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:51 +0000 [10:32:51] [PUSH_EMBED] No embedded message_data in notification [10:32:51] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:51] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830], handled=false [10:32:51] [PUSH] No embedded data, pre-loading messages from server [10:32:51] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:52] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:52] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:52] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:52] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:52] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:52] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:52] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=61, IDs=[28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831, 28830] [10:32:52] [PRELOAD_CACHE] Preserving 12 push-inserted messages: [28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:52] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=12, IDs=[28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:52] [PUSH_TRACE] 🔀 mergeMessages: merged.count=62, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [PUSH_PRELOAD] ⚡ Pre-cached 62 messages for instant display (preserved 12 from push) [10:32:52] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:52] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 63 msgs, IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2307 vccs=0 [10:32:52] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28840 [10:32:52] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28840, AnyHashable("operation_type"): 3] [10:32:52] [PUSH] Parsed message_id: 28840 [10:32:52] [PUSH] Parsed operation_type: 3 [10:32:52] [PUSH] Taking direct action: opType=3, messageId=28840 [10:32:52] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28840 [10:32:52] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:52] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=63 [10:32:52] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28840 [10:32:52] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:52] [CLIENT_SIG] Event received: type=3 messageId=28840 [10:32:52] [WS_EVENT] Received event: type=3, messageId=28840 [10:32:52] [WS_EVENT] Read receipt for message 28840 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:52] [INCREMENTAL_SYNC] ✅ Found 5 new messages [10:32:52] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 5 new messages, IDs=[28840, 28839, 28838, 28837, 28836] [10:32:52] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 63 msgs, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 63, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=5 [10:32:52] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=63 [10:32:52] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=71 [10:32:52] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=63, first5Ids=[28840, 28839, 28838, 28837, 28836] [10:32:52] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 63 messages [10:32:52] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:52] [RELOAD_TAB] 📊 Building chatRows from 63 messages [10:32:52] [SCROLL] wasNearBottom=true, threshold=447, offset=5207, contentH=5654, boundsH=447, forceScroll=false [10:32:52] [RELOAD_TAB] 📊 Built 65 chatRows, estHeight=0.0 [10:32:52] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=71 [10:32:52] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=5207, currentOffset=5207 [10:32:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:53] HELLO → sent (cached token, role=query) [10:32:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:53] [WS] Query connection failed - cleaning up all agent connections and views [10:32:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:53] [CLEANUP] ======================================== [10:32:53] [CLEANUP] Cleaning up all agent connections and views [10:32:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:53] [CLEANUP] Stopped and removed 0 video connections [10:32:53] [CLEANUP] Removed 0 video views [10:32:53] [CLEANUP] Removed 0 feed scroll views [10:32:53] [CLEANUP] Removed 0 status labels [10:32:53] [CLEANUP] Reset agent query state [10:32:53] [CLEANUP] Updated page indicator [10:32:53] [CLEANUP] Rebuilt video layout [10:32:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:53] [CLEANUP] ======================================== [10:32:53] [SERVER] Starting reconnect polling (5s interval) [10:32:53] [CLEANUP] ======================================== [10:32:53] [CLEANUP] Cleaning up all agent connections and views [10:32:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:53] [CLEANUP] Stopped and removed 0 video connections [10:32:53] [CLEANUP] Removed 0 video views [10:32:53] [CLEANUP] Removed 0 feed scroll views [10:32:53] [CLEANUP] Removed 0 status labels [10:32:53] [CLEANUP] Reset agent query state [10:32:53] [CLEANUP] Updated page indicator [10:32:53] [CLEANUP] Rebuilt video layout [10:32:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:53] [CLEANUP] ======================================== [10:32:53] [SERVER] Starting reconnect polling (5s interval) [10:32:54] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:54] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:54] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:54] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:54] HELLO → sent (cached token, role=query) [10:32:54] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:54] [WS] Query connection failed - cleaning up all agent connections and views [10:32:54] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:54] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:54] [CLEANUP] ======================================== [10:32:54] [CLEANUP] Cleaning up all agent connections and views [10:32:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:54] [CLEANUP] Stopped and removed 0 video connections [10:32:54] [CLEANUP] Removed 0 video views [10:32:54] [CLEANUP] Removed 0 feed scroll views [10:32:54] [CLEANUP] Removed 0 status labels [10:32:54] [CLEANUP] Reset agent query state [10:32:54] [CLEANUP] Updated page indicator [10:32:54] [CLEANUP] Rebuilt video layout [10:32:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:54] [CLEANUP] ======================================== [10:32:54] [SERVER] Starting reconnect polling (5s interval) [10:32:54] [CLEANUP] ======================================== [10:32:54] [CLEANUP] Cleaning up all agent connections and views [10:32:54] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:54] [CLEANUP] Stopped and removed 0 video connections [10:32:54] [CLEANUP] Removed 0 video views [10:32:54] [CLEANUP] Removed 0 feed scroll views [10:32:54] [CLEANUP] Removed 0 status labels [10:32:54] [CLEANUP] Reset agent query state [10:32:54] [CLEANUP] Updated page indicator [10:32:54] [CLEANUP] Rebuilt video layout [10:32:54] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:54] [CLEANUP] ======================================== [10:32:54] [SERVER] Starting reconnect polling (5s interval) [10:32:55] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:32:55] [CLIENT_SIG] Event received: type=0 messageId=28841 [10:32:55] [WS_EVENT] Received event: type=0, messageId=28841 [10:32:55] [WS_EVENT] 📨 New message notification (msgId=28841) - triggering incremental refresh, currentMsgCount=63 [10:32:55] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=63 [10:32:55] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28840, maxMemoryId=28840 [10:32:55] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28840 [10:32:55] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:32:55] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28841] [10:32:55] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 63 msgs, first 10 IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:55] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28841 [10:32:55] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 64, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:55] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:32:55] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=64 [10:32:55] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=64 [10:32:55] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=71 [10:32:55] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=64, first5Ids=[28841, 28840, 28839, 28838, 28837] [10:32:55] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 64 messages [10:32:55] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:55] [RELOAD_TAB] 📊 Building chatRows from 64 messages [10:32:55] [SCROLL] wasNearBottom=true, threshold=447, offset=5207, contentH=5654, boundsH=447, forceScroll=false [10:32:55] [RELOAD_TAB] 📊 Built 66 chatRows, estHeight=0.0 [10:32:55] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28840 → 28841 [10:32:55] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=73 [10:32:55] [SCROLL] 💓 alive, visible=59...65, rows=66, estHeight=0.0, heightCalls=140 [10:32:55] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5284, currentOffset=5284 [10:32:55] [SCROLL] Scrolling to 5284, animated=true [10:32:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:56] HELLO → sent (cached token, role=query) [10:32:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:56] [WS] Query connection failed - cleaning up all agent connections and views [10:32:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:56] [CLEANUP] ======================================== [10:32:56] [CLEANUP] Cleaning up all agent connections and views [10:32:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:56] [CLEANUP] Stopped and removed 0 video connections [10:32:56] [CLEANUP] Removed 0 video views [10:32:56] [CLEANUP] Removed 0 feed scroll views [10:32:56] [CLEANUP] Removed 0 status labels [10:32:56] [CLEANUP] Reset agent query state [10:32:56] [CLEANUP] Updated page indicator [10:32:56] [CLEANUP] Rebuilt video layout [10:32:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:56] [CLEANUP] ======================================== [10:32:56] [SERVER] Starting reconnect polling (5s interval) [10:32:56] [CLEANUP] ======================================== [10:32:56] [CLEANUP] Cleaning up all agent connections and views [10:32:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:56] [CLEANUP] Stopped and removed 0 video connections [10:32:56] [CLEANUP] Removed 0 video views [10:32:56] [CLEANUP] Removed 0 feed scroll views [10:32:56] [CLEANUP] Removed 0 status labels [10:32:56] [CLEANUP] Reset agent query state [10:32:56] [CLEANUP] Updated page indicator [10:32:56] [CLEANUP] Rebuilt video layout [10:32:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:56] [CLEANUP] ======================================== [10:32:56] [SERVER] Starting reconnect polling (5s interval) [10:32:56] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:32:56] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:32:57] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:32:57] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 64 msgs, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2312 vccs=0 [10:32:57] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28841 [10:32:57] [PUSH] handlePollEventsNotification userInfo: [:] [10:32:57] [PUSH] No message_id in userInfo [10:32:57] [PUSH] No operation_type in userInfo [10:32:57] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:32:57] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=62, IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:57] [PUSH_TRACE] 📬 POLL: memory state: count=64, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [FAST_REFRESH] Already have 64 messages in memory [10:32:57] [FAST_REFRESH] maxMemoryId=28841, maxLocalId=28841 [10:32:57] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:32:57] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=64 [10:32:57] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:32:57] [READBY_OPT] No message IDs to fetch - skipping server call [10:32:57] [GAP_FIX] Incremental sync will use since_id=28835 (background max=28835, current DB max=28841) [10:32:57] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=64 [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28841 [10:32:57] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:57] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:32:57] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=64 [10:32:57] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:32:57] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:32:57 +0000 - type: unknown, operation_type: 0, message_id: 28841, session_id: ILUIWU, state: 0 [10:32:57] [PUSH_DEBUG] Full userInfo: [AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Oki, AnyHashable("operation_type"): 0, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28841, AnyHashable("datesent"): 2026-04-23 08:32:55, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:55"; "file_name" = ""; "is_encrypted" = 0; message = Oki; "message_id" = 28841; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28840; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): ] [10:32:57] [PUSH] App active - suppressing notification UI, posting internal event [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:57 +0000 [10:32:57] [PUSH_TRACE] ⬇️ Processing embedded message_id=28841 [10:32:57] [PUSH_EMBED] 📩 Received embedded message: id=28841, type=0, sender=Esra [10:32:57] [PUSH_TRACE] ⬇️ Message details: text="Oki...", datesent=2026-04-23 08:32:55 [10:32:57] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:57] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_EMBED] ✅ Saved message 28841 to local DB (sync) [10:32:57] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28841 [10:32:57] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28841 [10:32:57] [PUSH_TRACE] 📦 Cache state: valid=true, count=62, IDs=[28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832, 28831] [10:32:57] [PUSH_EMBED] Inserted message 28841 into existing cache (now 63 messages) [10:32:57] [PUSH_TRACE] 📦 ✅ Inserted message 28841, cache now has IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] 📦 EXITING cache update queue for message 28841 [10:32:57] [PUSH_EMBED] Fetching evolution data for message 28841 in background [10:32:57] [PUSH_EMBED] ✅ Fully processed message 28841 [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28841 [10:32:57] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 64 msgs, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2312 vccs=0 [10:32:57] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28841 [10:32:57] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("timer"): 0, AnyHashable("thumb_file_name"): , AnyHashable("session_id"): ILUIWU, AnyHashable("message"): Oki, AnyHashable("operation_type"): 0, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28841, AnyHashable("datesent"): 2026-04-23 08:32:55, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:55"; "file_name" = ""; "is_encrypted" = 0; message = Oki; "message_id" = 28841; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28840; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): ] [10:32:57] [PUSH_EMBED_VC] Message 28841 already in memory - skipping [10:32:57] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:57] [PUSH] Parsed message_id: 28841 [10:32:57] [PUSH] Parsed operation_type: 0 [10:32:57] [PUSH] Taking direct action: opType=0, messageId=28841 [10:32:57] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28841 [10:32:57] [PUSH] ⚡ Message 28841 already in memory - skipping duplicate notification entirely [10:32:57] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:57] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:57] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:57] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:57] [PUSH_TRACE] 👁️ Received message id=28841, text="Oki..." [10:32:57] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:57] [PUSH_UI] Message 28841 already in memory - skipping insert [10:32:57] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:57] [PUSH] Silent push received [10:32:57] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:57 +0000, appState=0, message_id=28841, type=nil [10:32:57] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:57 +0000 [10:32:57] [PUSH_TRACE] ⬇️ Processing embedded message_id=28841 [10:32:57] [PUSH_EMBED] 📩 Received embedded message: id=28841, type=0, sender=Esra [10:32:57] [PUSH_TRACE] ⬇️ Message details: text="Oki...", datesent=2026-04-23 08:32:55 [10:32:57] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:32:57] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_EMBED] ✅ Saved message 28841 to local DB (sync) [10:32:57] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28841 [10:32:57] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28841 [10:32:57] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28841 [10:32:57] [PUSH_TRACE] 📦 Cache state: valid=true, count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] 📦 ⚠️ Message 28841 already in cache, skipping insert [10:32:57] [PUSH_TRACE] 📦 EXITING cache update queue for message 28841 [10:32:57] [PUSH_EMBED] Fetching evolution data for message 28841 in background [10:32:57] [PUSH_EMBED] ✅ Fully processed message 28841 [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28841 [10:32:57] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832], handled=true [10:32:57] [PUSH] Embedded message handled instantly from silent push [10:32:57] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:32:57] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28841 [10:32:57] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:32:57] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:32:57] [PUSH_TRACE] 👁️ Received message id=28841, text="Oki..." [10:32:57] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:32:57] [PUSH_UI] Message 28841 already in memory - skipping insert [10:32:57] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:32:57] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 64 msgs, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2312 vccs=0 [10:32:57] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28841 [10:32:57] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("thumb_file_name"): , AnyHashable("timer"): 0, AnyHashable("message"): Oki, AnyHashable("message_id"): 28841, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra, AnyHashable("datesent"): 2026-04-23 08:32:55, AnyHashable("file_name"): , AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:32:55"; "file_name" = ""; "is_encrypted" = 0; message = Oki; "message_id" = 28841; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28840; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("operation_type"): 0] [10:32:57] [PUSH_EMBED_VC] Message 28841 already in memory - skipping [10:32:57] [PUSH] ⚡ Embedded message handled directly in ViewController [10:32:57] [PUSH] Parsed message_id: 28841 [10:32:57] [PUSH] Parsed operation_type: 0 [10:32:57] [PUSH] Taking direct action: opType=0, messageId=28841 [10:32:57] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28841 [10:32:57] [PUSH] ⚡ Message 28841 already in memory - skipping duplicate notification entirely [10:32:57] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:57] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:32:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=64, first5Ids=[28841, 28840, 28839, 28838, 28837] [10:32:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 64 messages [10:32:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [RELOAD_TAB] 📊 Building chatRows from 64 messages [10:32:57] [SCROLL] wasNearBottom=true, threshold=447, offset=5284, contentH=5731, boundsH=447, forceScroll=false [10:32:57] [RELOAD_TAB] 📊 Built 66 chatRows, estHeight=0.0 [10:32:57] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:57] [PUSH_EMBED] Got evolution data for message 28841, saving to local DB [10:32:57] [PUSH_EMBED] Saved evolution data for message 28841 [10:32:57] [PUSH_EMBED] Got evolution data for message 28841, saving to local DB [10:32:57] [PUSH_EMBED] Saved evolution data for message 28841 [10:32:57] [INCREMENTAL_SYNC] ✅ Found 6 new messages [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 6 new messages, IDs=[28841, 28840, 28839, 28838, 28837, 28836] [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 64 msgs, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 64, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=6 [10:32:57] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=64 [10:32:57] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:32:57] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=64 [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28841, maxMemoryId=28841 [10:32:57] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28841 [10:32:57] [FAST_REFRESH] Incremental sync complete - 64 messages [10:32:57] [PUSH] Silent push received [10:32:57] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:32:57 +0000, appState=0, message_id=nil, type=nil [10:32:57] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:32:57 +0000 [10:32:57] [PUSH_EMBED] No embedded message_data in notification [10:32:57] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:32:57] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832], handled=false [10:32:57] [PUSH] No embedded data, pre-loading messages from server [10:32:57] [PUSH_PRELOAD] Fetching messages for instant display cache [10:32:57] [INCREMENTAL_SYNC] ✅ No new messages [10:32:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=64, first5Ids=[28841, 28840, 28839, 28838, 28837] [10:32:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 64 messages [10:32:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [RELOAD_TAB] 📊 Building chatRows from 64 messages [10:32:57] [SCROLL] wasNearBottom=true, threshold=447, offset=5284, contentH=5731, boundsH=447, forceScroll=false [10:32:57] [RELOAD_TAB] 📊 Built 66 chatRows, estHeight=0.0 [10:32:57] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:57] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:32:57] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:32:57] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:32:57] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:32:57] [REPLY_LOAD] AppDelegate mid=28752 raw='At least not for me🫠😏😏😏' decoded='At least not for me🫠😏😏😏' rawScalars=[U+41=A, U+74=t, U+20= , U+6C=l, U+65=e, U+61=a, U+73=s, U+74=t, U+20= , U+6E=n, U+6F=o, U+74=t, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+6D=m, U+65=e, U+1FAE0=🫠, U+1F60F=😏, U+1F60F=😏, U+1F60F=😏] [10:32:57] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:32:57] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PRELOAD_CACHE] Preserving 13 push-inserted messages: [28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:57] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=13, IDs=[28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:32:57] [PUSH_TRACE] 🔀 mergeMessages: merged.count=63, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_PRELOAD] ⚡ Pre-cached 63 messages for instant display (preserved 13 from push) [10:32:57] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:32:57] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 64 msgs, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2312 vccs=0 [10:32:57] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28841 [10:32:57] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("message_id"): 28841, AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU] [10:32:57] [PUSH] Parsed message_id: 28841 [10:32:57] [PUSH] Parsed operation_type: 3 [10:32:57] [PUSH] Taking direct action: opType=3, messageId=28841 [10:32:57] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28841 [10:32:57] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:32:57] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=64 [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28841 [10:32:57] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:32:57] [INCREMENTAL_SYNC] ✅ Found 6 new messages [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 6 new messages, IDs=[28841, 28840, 28839, 28838, 28837, 28836] [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 64 msgs, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 64, first 10 IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=6 [10:32:57] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=64 [10:32:57] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:32:57] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=64, first5Ids=[28841, 28840, 28839, 28838, 28837] [10:32:57] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 64 messages [10:32:57] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:32:57] [RELOAD_TAB] 📊 Building chatRows from 64 messages [10:32:57] [SCROLL] wasNearBottom=true, threshold=447, offset=5284, contentH=5731, boundsH=447, forceScroll=false [10:32:57] [RELOAD_TAB] 📊 Built 66 chatRows, estHeight=0.0 [10:32:57] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:32:57] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:57] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:57] [CLIENT_SIG] Event received: type=3 messageId=28841 [10:32:57] [WS_EVENT] Received event: type=3, messageId=28841 [10:32:57] [WS_EVENT] Read receipt for message 28841 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:32:58] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:58] HELLO → sent (cached token, role=query) [10:32:58] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:58] [WS] Query connection failed - cleaning up all agent connections and views [10:32:58] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:58] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:58] [CLEANUP] ======================================== [10:32:58] [CLEANUP] Cleaning up all agent connections and views [10:32:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:58] [CLEANUP] Stopped and removed 0 video connections [10:32:58] [CLEANUP] Removed 0 video views [10:32:58] [CLEANUP] Removed 0 feed scroll views [10:32:58] [CLEANUP] Removed 0 status labels [10:32:58] [CLEANUP] Reset agent query state [10:32:58] [CLEANUP] Updated page indicator [10:32:58] [CLEANUP] Rebuilt video layout [10:32:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:58] [CLEANUP] ======================================== [10:32:58] [SERVER] Starting reconnect polling (5s interval) [10:32:58] [CLEANUP] ======================================== [10:32:58] [CLEANUP] Cleaning up all agent connections and views [10:32:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:58] [CLEANUP] Stopped and removed 0 video connections [10:32:58] [CLEANUP] Removed 0 video views [10:32:58] [CLEANUP] Removed 0 feed scroll views [10:32:58] [CLEANUP] Removed 0 status labels [10:32:58] [CLEANUP] Reset agent query state [10:32:58] [CLEANUP] Updated page indicator [10:32:58] [CLEANUP] Rebuilt video layout [10:32:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:58] [CLEANUP] ======================================== [10:32:58] [SERVER] Starting reconnect polling (5s interval) [10:32:59] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:32:59] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:32:59] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:32:59] HELLO → sent (cached token, role=query) [10:32:59] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:32:59] [WS] Query connection failed - cleaning up all agent connections and views [10:32:59] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:32:59] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:32:59] [CLEANUP] ======================================== [10:32:59] [CLEANUP] Cleaning up all agent connections and views [10:32:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:59] [CLEANUP] Stopped and removed 0 video connections [10:32:59] [CLEANUP] Removed 0 video views [10:32:59] [CLEANUP] Removed 0 feed scroll views [10:32:59] [CLEANUP] Removed 0 status labels [10:32:59] [CLEANUP] Reset agent query state [10:32:59] [CLEANUP] Updated page indicator [10:32:59] [CLEANUP] Rebuilt video layout [10:32:59] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:59] [CLEANUP] ======================================== [10:32:59] [SERVER] Starting reconnect polling (5s interval) [10:32:59] [CLEANUP] ======================================== [10:32:59] [CLEANUP] Cleaning up all agent connections and views [10:32:59] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:32:59] [CLEANUP] Stopped and removed 0 video connections [10:32:59] [CLEANUP] Removed 0 video views [10:32:59] [CLEANUP] Removed 0 feed scroll views [10:32:59] [CLEANUP] Removed 0 status labels [10:32:59] [CLEANUP] Reset agent query state [10:32:59] [CLEANUP] Updated page indicator [10:32:59] [CLEANUP] Rebuilt video layout [10:32:59] [CLEANUP] ✅ All agent connections and views cleaned up [10:32:59] [CLEANUP] ======================================== [10:32:59] [SERVER] Starting reconnect polling (5s interval) [10:33:01] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:01] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:01] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:01] HELLO → sent (cached token, role=query) [10:33:01] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:01] [WS] Query connection failed - cleaning up all agent connections and views [10:33:01] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:01] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:01] [CLEANUP] ======================================== [10:33:01] [CLEANUP] Cleaning up all agent connections and views [10:33:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:01] [CLEANUP] Stopped and removed 0 video connections [10:33:01] [CLEANUP] Removed 0 video views [10:33:01] [CLEANUP] Removed 0 feed scroll views [10:33:01] [CLEANUP] Removed 0 status labels [10:33:01] [CLEANUP] Reset agent query state [10:33:01] [CLEANUP] Updated page indicator [10:33:01] [CLEANUP] Rebuilt video layout [10:33:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:01] [CLEANUP] ======================================== [10:33:01] [SERVER] Starting reconnect polling (5s interval) [10:33:01] [CLEANUP] ======================================== [10:33:01] [CLEANUP] Cleaning up all agent connections and views [10:33:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:01] [CLEANUP] Stopped and removed 0 video connections [10:33:01] [CLEANUP] Removed 0 video views [10:33:01] [CLEANUP] Removed 0 feed scroll views [10:33:01] [CLEANUP] Removed 0 status labels [10:33:01] [CLEANUP] Reset agent query state [10:33:01] [CLEANUP] Updated page indicator [10:33:01] [CLEANUP] Rebuilt video layout [10:33:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:01] [CLEANUP] ======================================== [10:33:01] [SERVER] Starting reconnect polling (5s interval) [10:33:02] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:02] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:02] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:02] HELLO → sent (cached token, role=query) [10:33:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:03] [WS] Query connection failed - cleaning up all agent connections and views [10:33:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:03] [CLEANUP] ======================================== [10:33:03] [CLEANUP] Cleaning up all agent connections and views [10:33:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:03] [CLEANUP] Stopped and removed 0 video connections [10:33:03] [CLEANUP] Removed 0 video views [10:33:03] [CLEANUP] Removed 0 feed scroll views [10:33:03] [CLEANUP] Removed 0 status labels [10:33:03] [CLEANUP] Reset agent query state [10:33:03] [CLEANUP] Updated page indicator [10:33:03] [CLEANUP] Rebuilt video layout [10:33:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:03] [CLEANUP] ======================================== [10:33:03] [SERVER] Starting reconnect polling (5s interval) [10:33:03] [CLEANUP] ======================================== [10:33:03] [CLEANUP] Cleaning up all agent connections and views [10:33:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:03] [CLEANUP] Stopped and removed 0 video connections [10:33:03] [CLEANUP] Removed 0 video views [10:33:03] [CLEANUP] Removed 0 feed scroll views [10:33:03] [CLEANUP] Removed 0 status labels [10:33:03] [CLEANUP] Reset agent query state [10:33:03] [CLEANUP] Updated page indicator [10:33:03] [CLEANUP] Rebuilt video layout [10:33:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:03] [CLEANUP] ======================================== [10:33:03] [SERVER] Starting reconnect polling (5s interval) [10:33:04] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:04] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:04] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:04] HELLO → sent (cached token, role=query) [10:33:04] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:04] [WS] Query connection failed - cleaning up all agent connections and views [10:33:04] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:04] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:04] [CLEANUP] ======================================== [10:33:04] [CLEANUP] Cleaning up all agent connections and views [10:33:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:04] [CLEANUP] Stopped and removed 0 video connections [10:33:04] [CLEANUP] Removed 0 video views [10:33:04] [CLEANUP] Removed 0 feed scroll views [10:33:04] [CLEANUP] Removed 0 status labels [10:33:04] [CLEANUP] Reset agent query state [10:33:04] [CLEANUP] Updated page indicator [10:33:04] [CLEANUP] Rebuilt video layout [10:33:04] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:04] [CLEANUP] ======================================== [10:33:04] [SERVER] Starting reconnect polling (5s interval) [10:33:04] [CLEANUP] ======================================== [10:33:04] [CLEANUP] Cleaning up all agent connections and views [10:33:04] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:04] [CLEANUP] Stopped and removed 0 video connections [10:33:04] [CLEANUP] Removed 0 video views [10:33:04] [CLEANUP] Removed 0 feed scroll views [10:33:04] [CLEANUP] Removed 0 status labels [10:33:04] [CLEANUP] Reset agent query state [10:33:04] [CLEANUP] Updated page indicator [10:33:04] [CLEANUP] Rebuilt video layout [10:33:04] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:04] [CLEANUP] ======================================== [10:33:04] [SERVER] Starting reconnect polling (5s interval) [10:33:06] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:06] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:06] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:06] HELLO → sent (cached token, role=query) [10:33:06] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:06] [WS] Query connection failed - cleaning up all agent connections and views [10:33:06] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:06] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:06] [CLEANUP] ======================================== [10:33:06] [CLEANUP] Cleaning up all agent connections and views [10:33:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:06] [CLEANUP] Stopped and removed 0 video connections [10:33:06] [CLEANUP] Removed 0 video views [10:33:06] [CLEANUP] Removed 0 feed scroll views [10:33:06] [CLEANUP] Removed 0 status labels [10:33:06] [CLEANUP] Reset agent query state [10:33:06] [CLEANUP] Updated page indicator [10:33:06] [CLEANUP] Rebuilt video layout [10:33:06] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:06] [CLEANUP] ======================================== [10:33:06] [SERVER] Starting reconnect polling (5s interval) [10:33:06] [CLEANUP] ======================================== [10:33:06] [CLEANUP] Cleaning up all agent connections and views [10:33:06] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:06] [CLEANUP] Stopped and removed 0 video connections [10:33:06] [CLEANUP] Removed 0 video views [10:33:06] [CLEANUP] Removed 0 feed scroll views [10:33:06] [CLEANUP] Removed 0 status labels [10:33:06] [CLEANUP] Reset agent query state [10:33:06] [CLEANUP] Updated page indicator [10:33:06] [CLEANUP] Rebuilt video layout [10:33:06] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:06] [CLEANUP] ======================================== [10:33:06] [SERVER] Starting reconnect polling (5s interval) [10:33:07] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:07] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:07] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:07] HELLO → sent (cached token, role=query) [10:33:08] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:08] [WS] Query connection failed - cleaning up all agent connections and views [10:33:08] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:08] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:08] [CLEANUP] ======================================== [10:33:08] [CLEANUP] Cleaning up all agent connections and views [10:33:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:08] [CLEANUP] Stopped and removed 0 video connections [10:33:08] [CLEANUP] Removed 0 video views [10:33:08] [CLEANUP] Removed 0 feed scroll views [10:33:08] [CLEANUP] Removed 0 status labels [10:33:08] [CLEANUP] Reset agent query state [10:33:08] [CLEANUP] Updated page indicator [10:33:08] [CLEANUP] Rebuilt video layout [10:33:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:08] [CLEANUP] ======================================== [10:33:08] [SERVER] Starting reconnect polling (5s interval) [10:33:08] [CLEANUP] ======================================== [10:33:08] [CLEANUP] Cleaning up all agent connections and views [10:33:08] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:08] [CLEANUP] Stopped and removed 0 video connections [10:33:08] [CLEANUP] Removed 0 video views [10:33:08] [CLEANUP] Removed 0 feed scroll views [10:33:08] [CLEANUP] Removed 0 status labels [10:33:08] [CLEANUP] Reset agent query state [10:33:08] [CLEANUP] Updated page indicator [10:33:08] [CLEANUP] Rebuilt video layout [10:33:08] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:08] [CLEANUP] ======================================== [10:33:08] [SERVER] Starting reconnect polling (5s interval) [10:33:09] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:09] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:09] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:09] HELLO → sent (cached token, role=query) [10:33:09] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:09] [WS] Query connection failed - cleaning up all agent connections and views [10:33:09] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:09] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:09] [CLEANUP] ======================================== [10:33:09] [CLEANUP] Cleaning up all agent connections and views [10:33:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:09] [CLEANUP] Stopped and removed 0 video connections [10:33:09] [CLEANUP] Removed 0 video views [10:33:09] [CLEANUP] Removed 0 feed scroll views [10:33:09] [CLEANUP] Removed 0 status labels [10:33:09] [CLEANUP] Reset agent query state [10:33:09] [CLEANUP] Updated page indicator [10:33:09] [CLEANUP] Rebuilt video layout [10:33:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:09] [CLEANUP] ======================================== [10:33:09] [SERVER] Starting reconnect polling (5s interval) [10:33:09] [CLEANUP] ======================================== [10:33:09] [CLEANUP] Cleaning up all agent connections and views [10:33:09] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:09] [CLEANUP] Stopped and removed 0 video connections [10:33:09] [CLEANUP] Removed 0 video views [10:33:09] [CLEANUP] Removed 0 feed scroll views [10:33:09] [CLEANUP] Removed 0 status labels [10:33:09] [CLEANUP] Reset agent query state [10:33:09] [CLEANUP] Updated page indicator [10:33:09] [CLEANUP] Rebuilt video layout [10:33:09] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:09] [CLEANUP] ======================================== [10:33:09] [SERVER] Starting reconnect polling (5s interval) [10:33:11] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:11] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:11] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:11] HELLO → sent (cached token, role=query) [10:33:11] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:11] [WS] Query connection failed - cleaning up all agent connections and views [10:33:11] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:11] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:11] [CLEANUP] ======================================== [10:33:11] [CLEANUP] Cleaning up all agent connections and views [10:33:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:11] [CLEANUP] Stopped and removed 0 video connections [10:33:11] [CLEANUP] Removed 0 video views [10:33:11] [CLEANUP] Removed 0 feed scroll views [10:33:11] [CLEANUP] Removed 0 status labels [10:33:11] [CLEANUP] Reset agent query state [10:33:11] [CLEANUP] Updated page indicator [10:33:11] [CLEANUP] Rebuilt video layout [10:33:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:11] [CLEANUP] ======================================== [10:33:11] [SERVER] Starting reconnect polling (5s interval) [10:33:11] [CLEANUP] ======================================== [10:33:11] [CLEANUP] Cleaning up all agent connections and views [10:33:11] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:11] [CLEANUP] Stopped and removed 0 video connections [10:33:11] [CLEANUP] Removed 0 video views [10:33:11] [CLEANUP] Removed 0 feed scroll views [10:33:11] [CLEANUP] Removed 0 status labels [10:33:11] [CLEANUP] Reset agent query state [10:33:11] [CLEANUP] Updated page indicator [10:33:11] [CLEANUP] Rebuilt video layout [10:33:11] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:11] [CLEANUP] ======================================== [10:33:11] [SERVER] Starting reconnect polling (5s interval) [10:33:12] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:33:12] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=64, isReloading=false [10:33:12] [SEND_MESSAGE] ✅ Added optimistic message id=-11 to arrays, newMsgCount=65 [10:33:12] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:33:12] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=65, first5Ids=[-11, 28841, 28840, 28839, 28838] [10:33:12] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 65 messages [10:33:12] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-11, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [10:33:12] [RELOAD_TAB] 📊 Building chatRows from 65 messages [10:33:12] [SCROLL] wasNearBottom=true, threshold=447, offset=5284, contentH=5731, boundsH=447, forceScroll=false [10:33:12] [RELOAD_TAB] 📊 Built 67 chatRows, estHeight=0.0 [10:33:12] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=74 [10:33:12] [SCROLL] 💓 alive, visible=60...66, rows=67, estHeight=0.0, heightCalls=142 [10:33:12] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:33:12] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:33:12] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5361, currentOffset=5361 [10:33:12] [SCROLL] Scrolling to 5361, animated=true [10:33:12] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:12] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:12] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:12] HELLO → sent (cached token, role=query) [10:33:12] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:12] [WS] Query connection failed - cleaning up all agent connections and views [10:33:12] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:12] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:12] [CLEANUP] ======================================== [10:33:12] [CLEANUP] Cleaning up all agent connections and views [10:33:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:12] [CLEANUP] Stopped and removed 0 video connections [10:33:12] [CLEANUP] Removed 0 video views [10:33:12] [CLEANUP] Removed 0 feed scroll views [10:33:12] [CLEANUP] Removed 0 status labels [10:33:12] [CLEANUP] Reset agent query state [10:33:12] [CLEANUP] Updated page indicator [10:33:12] [CLEANUP] Rebuilt video layout [10:33:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:12] [CLEANUP] ======================================== [10:33:12] [SERVER] Starting reconnect polling (5s interval) [10:33:12] [CLEANUP] ======================================== [10:33:12] [CLEANUP] Cleaning up all agent connections and views [10:33:12] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:12] [CLEANUP] Stopped and removed 0 video connections [10:33:12] [CLEANUP] Removed 0 video views [10:33:12] [CLEANUP] Removed 0 feed scroll views [10:33:12] [CLEANUP] Removed 0 status labels [10:33:12] [CLEANUP] Reset agent query state [10:33:12] [CLEANUP] Updated page indicator [10:33:12] [CLEANUP] Rebuilt video layout [10:33:12] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:12] [CLEANUP] ======================================== [10:33:12] [SERVER] Starting reconnect polling (5s interval) [10:33:13] [CLIENT_SIG] Event received: type=0 messageId=28842 [10:33:13] [WS_EVENT] Received event: type=0, messageId=28842 [10:33:13] [WS_EVENT] 📨 New message notification (msgId=28842) - triggering incremental refresh, currentMsgCount=65 [10:33:13] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=65 [10:33:13] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28841, maxMemoryId=28841 [10:33:13] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28841 [10:33:13] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28842,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:33:13"} [10:33:13] [CHAT] receive_message.php JSON: ["message_type": 0, "ok": 1, "session_id": ILUIWU, "datesent_utc": 2026-04-23 08:33:13, "message_id": 28842, "file_name": ] [10:33:13] [DB_UPGRADE] Upgrading message ID: -11 → 28842, preserveOriginalDate=false [10:33:13] [DB_UPGRADE] ✅ Upgraded -11 → 28842 with send_status=0, 1 row(s) affected [10:33:13] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -11 → 28842 [10:33:13] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -11 → 28842 [10:33:13] ReloadData 9 [10:33:13] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:33:13] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28842] [10:33:13] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 65 msgs, first 10 IDs=[28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [10:33:13] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 65, first 10 IDs=[28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [10:33:13] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:33:13] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=65 [10:33:13] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=65 [10:33:13] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=73 [10:33:13] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=65, first5Ids=[28842, 28841, 28840, 28839, 28838] [10:33:13] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 65 messages [10:33:13] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833] [10:33:13] [RELOAD_TAB] 📊 Building chatRows from 65 messages [10:33:13] [SCROLL] wasNearBottom=true, threshold=447, offset=5361, contentH=5808, boundsH=447, forceScroll=true [10:33:13] [RELOAD_TAB] 📊 Built 67 chatRows, estHeight=0.0 [10:33:13] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=73 [10:33:13] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5361, currentOffset=5361 [10:33:13] [SCROLL] Scrolling to 5361, animated=false [10:33:14] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:14] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:14] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:14] HELLO → sent (cached token, role=query) [10:33:14] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:14] [WS] Query connection failed - cleaning up all agent connections and views [10:33:14] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:14] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:14] [CLEANUP] ======================================== [10:33:14] [CLEANUP] Cleaning up all agent connections and views [10:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:14] [CLEANUP] Stopped and removed 0 video connections [10:33:14] [CLEANUP] Removed 0 video views [10:33:14] [CLEANUP] Removed 0 feed scroll views [10:33:14] [CLEANUP] Removed 0 status labels [10:33:14] [CLEANUP] Reset agent query state [10:33:14] [CLEANUP] Updated page indicator [10:33:14] [CLEANUP] Rebuilt video layout [10:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:14] [CLEANUP] ======================================== [10:33:14] [SERVER] Starting reconnect polling (5s interval) [10:33:14] [CLEANUP] ======================================== [10:33:14] [CLEANUP] Cleaning up all agent connections and views [10:33:14] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:14] [CLEANUP] Stopped and removed 0 video connections [10:33:14] [CLEANUP] Removed 0 video views [10:33:14] [CLEANUP] Removed 0 feed scroll views [10:33:14] [CLEANUP] Removed 0 status labels [10:33:14] [CLEANUP] Reset agent query state [10:33:14] [CLEANUP] Updated page indicator [10:33:14] [CLEANUP] Rebuilt video layout [10:33:14] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:14] [CLEANUP] ======================================== [10:33:14] [SERVER] Starting reconnect polling (5s interval) [10:33:16] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:16] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:16] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:16] HELLO → sent (cached token, role=query) [10:33:16] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:16] [WS] Query connection failed - cleaning up all agent connections and views [10:33:16] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:16] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:16] [CLEANUP] ======================================== [10:33:16] [CLEANUP] Cleaning up all agent connections and views [10:33:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:16] [CLEANUP] Stopped and removed 0 video connections [10:33:16] [CLEANUP] Removed 0 video views [10:33:16] [CLEANUP] Removed 0 feed scroll views [10:33:16] [CLEANUP] Removed 0 status labels [10:33:16] [CLEANUP] Reset agent query state [10:33:16] [CLEANUP] Updated page indicator [10:33:16] [CLEANUP] Rebuilt video layout [10:33:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:16] [CLEANUP] ======================================== [10:33:16] [SERVER] Starting reconnect polling (5s interval) [10:33:16] [CLEANUP] ======================================== [10:33:16] [CLEANUP] Cleaning up all agent connections and views [10:33:16] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:16] [CLEANUP] Stopped and removed 0 video connections [10:33:16] [CLEANUP] Removed 0 video views [10:33:16] [CLEANUP] Removed 0 feed scroll views [10:33:16] [CLEANUP] Removed 0 status labels [10:33:16] [CLEANUP] Reset agent query state [10:33:16] [CLEANUP] Updated page indicator [10:33:16] [CLEANUP] Rebuilt video layout [10:33:16] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:16] [CLEANUP] ======================================== [10:33:16] [SERVER] Starting reconnect polling (5s interval) [10:33:17] [REPLY_DEBUG] 📤 didTapSend - Sending message WITHOUT reply [10:33:17] [SEND_MESSAGE] 📤 Sending message, currentMsgCount=65, isReloading=false [10:33:17] [SEND_MESSAGE] ✅ Added optimistic message id=-12 to arrays, newMsgCount=66 [10:33:17] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=73 [10:33:17] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=66, first5Ids=[-12, 28842, 28841, 28840, 28839] [10:33:17] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 66 messages [10:33:17] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [-12, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:17] [RELOAD_TAB] 📊 Building chatRows from 66 messages [10:33:17] [SCROLL] wasNearBottom=true, threshold=447, offset=5361, contentH=5808, boundsH=447, forceScroll=false [10:33:17] [RELOAD_TAB] 📊 Built 68 chatRows, estHeight=0.0 [10:33:17] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=75 [10:33:17] [SCROLL] 💓 alive, visible=61...67, rows=68, estHeight=0.0, heightCalls=144 [10:33:17] [REPLY_DEBUG] ❌ cancelReply called - clearing messageToReplyTo [10:33:17] [REPLY_DEBUG] ⚠️ sendMessage HTTP BODY - No reply message captured [10:33:17] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5413, currentOffset=5413 [10:33:17] [SCROLL] Scrolling to 5413, animated=true [10:33:17] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:17] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:17] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:17] HELLO → sent (cached token, role=query) [10:33:17] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:17] [WS] Query connection failed - cleaning up all agent connections and views [10:33:17] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:17] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:17] [CLEANUP] ======================================== [10:33:17] [CLEANUP] Cleaning up all agent connections and views [10:33:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:17] [CLEANUP] Stopped and removed 0 video connections [10:33:17] [CLEANUP] Removed 0 video views [10:33:17] [CLEANUP] Removed 0 feed scroll views [10:33:17] [CLEANUP] Removed 0 status labels [10:33:17] [CLEANUP] Reset agent query state [10:33:17] [CLEANUP] Updated page indicator [10:33:17] [CLEANUP] Rebuilt video layout [10:33:17] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:17] [CLEANUP] ======================================== [10:33:17] [SERVER] Starting reconnect polling (5s interval) [10:33:17] [CLEANUP] ======================================== [10:33:17] [CLEANUP] Cleaning up all agent connections and views [10:33:17] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:17] [CLEANUP] Stopped and removed 0 video connections [10:33:17] [CLEANUP] Removed 0 video views [10:33:17] [CLEANUP] Removed 0 feed scroll views [10:33:17] [CLEANUP] Removed 0 status labels [10:33:17] [CLEANUP] Reset agent query state [10:33:17] [CLEANUP] Updated page indicator [10:33:17] [CLEANUP] Rebuilt video layout [10:33:17] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:17] [CLEANUP] ======================================== [10:33:17] [SERVER] Starting reconnect polling (5s interval) [10:33:17] [CLIENT_SIG] Event received: type=0 messageId=28843 [10:33:17] [WS_EVENT] Received event: type=0, messageId=28843 [10:33:17] [WS_EVENT] 📨 New message notification (msgId=28843) - triggering incremental refresh, currentMsgCount=66 [10:33:17] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=66 [10:33:17] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28842, maxMemoryId=28842 [10:33:17] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28842 [10:33:17] [CHAT] receive_message.php HTTP 200: {"ok":true,"message_id":28843,"session_id":"ILUIWU","message_type":0,"file_name":"","datesent_utc":"2026-04-23 08:33:17"} [10:33:17] [CHAT] receive_message.php JSON: ["ok": 1, "file_name": , "message_type": 0, "message_id": 28843, "session_id": ILUIWU, "datesent_utc": 2026-04-23 08:33:17] [10:33:17] [DB_UPGRADE] Upgrading message ID: -12 → 28843, preserveOriginalDate=false [10:33:17] [DB_UPGRADE] ✅ Upgraded -12 → 28843 with send_status=0, 1 row(s) affected [10:33:17] [SEND_UPGRADE] ✅ Updated chatMessages[0].id: -12 → 28843 [10:33:17] [SEND_UPGRADE] ✅ Updated allMessagesWithReadBy[0].id: -12 → 28843 [10:33:17] ReloadData 9 [10:33:18] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:33:18] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28843] [10:33:18] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 66 msgs, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:18] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 66, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:18] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:33:18] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=66 [10:33:18] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=66 [10:33:18] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [10:33:18] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=66, first5Ids=[28843, 28842, 28841, 28840, 28839] [10:33:18] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 66 messages [10:33:18] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:18] [RELOAD_TAB] 📊 Building chatRows from 66 messages [10:33:18] [SCROLL] wasNearBottom=true, threshold=447, offset=5413, contentH=5860, boundsH=447, forceScroll=true [10:33:18] [RELOAD_TAB] 📊 Built 68 chatRows, estHeight=0.0 [10:33:18] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=75 [10:33:18] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5413, currentOffset=5413 [10:33:18] [SCROLL] Scrolling to 5413, animated=false [10:33:19] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:19] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:19] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:19] HELLO → sent (cached token, role=query) [10:33:19] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:19] [WS] Query connection failed - cleaning up all agent connections and views [10:33:19] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:19] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:19] [CLEANUP] ======================================== [10:33:19] [CLEANUP] Cleaning up all agent connections and views [10:33:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:19] [CLEANUP] Stopped and removed 0 video connections [10:33:19] [CLEANUP] Removed 0 video views [10:33:19] [CLEANUP] Removed 0 feed scroll views [10:33:19] [CLEANUP] Removed 0 status labels [10:33:19] [CLEANUP] Reset agent query state [10:33:19] [CLEANUP] Updated page indicator [10:33:19] [CLEANUP] Rebuilt video layout [10:33:19] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:19] [CLEANUP] ======================================== [10:33:19] [SERVER] Starting reconnect polling (5s interval) [10:33:19] [CLEANUP] ======================================== [10:33:19] [CLEANUP] Cleaning up all agent connections and views [10:33:19] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:19] [CLEANUP] Stopped and removed 0 video connections [10:33:19] [CLEANUP] Removed 0 video views [10:33:19] [CLEANUP] Removed 0 feed scroll views [10:33:19] [CLEANUP] Removed 0 status labels [10:33:19] [CLEANUP] Reset agent query state [10:33:19] [CLEANUP] Updated page indicator [10:33:19] [CLEANUP] Rebuilt video layout [10:33:19] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:19] [CLEANUP] ======================================== [10:33:19] [SERVER] Starting reconnect polling (5s interval) [10:33:21] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:21] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:21] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:21] HELLO → sent (cached token, role=query) [10:33:21] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:21] [WS] Query connection failed - cleaning up all agent connections and views [10:33:21] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:21] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:21] [CLEANUP] ======================================== [10:33:21] [CLEANUP] Cleaning up all agent connections and views [10:33:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:21] [CLEANUP] Stopped and removed 0 video connections [10:33:21] [CLEANUP] Removed 0 video views [10:33:21] [CLEANUP] Removed 0 feed scroll views [10:33:21] [CLEANUP] Removed 0 status labels [10:33:21] [CLEANUP] Reset agent query state [10:33:21] [CLEANUP] Updated page indicator [10:33:21] [CLEANUP] Rebuilt video layout [10:33:21] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:21] [CLEANUP] ======================================== [10:33:21] [SERVER] Starting reconnect polling (5s interval) [10:33:21] [CLEANUP] ======================================== [10:33:21] [CLEANUP] Cleaning up all agent connections and views [10:33:21] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:21] [CLEANUP] Stopped and removed 0 video connections [10:33:21] [CLEANUP] Removed 0 video views [10:33:21] [CLEANUP] Removed 0 feed scroll views [10:33:21] [CLEANUP] Removed 0 status labels [10:33:21] [CLEANUP] Reset agent query state [10:33:21] [CLEANUP] Updated page indicator [10:33:21] [CLEANUP] Rebuilt video layout [10:33:21] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:21] [CLEANUP] ======================================== [10:33:21] [SERVER] Starting reconnect polling (5s interval) [10:33:22] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:22] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:22] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:33:22] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:22] HELLO → sent (cached token, role=query) [10:33:23] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:23] [WS] Query connection failed - cleaning up all agent connections and views [10:33:23] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:23] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:23] [CLEANUP] ======================================== [10:33:23] [CLEANUP] Cleaning up all agent connections and views [10:33:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:23] [CLEANUP] Stopped and removed 0 video connections [10:33:23] [CLEANUP] Removed 0 video views [10:33:23] [CLEANUP] Removed 0 feed scroll views [10:33:23] [CLEANUP] Removed 0 status labels [10:33:23] [CLEANUP] Reset agent query state [10:33:23] [CLEANUP] Updated page indicator [10:33:23] [CLEANUP] Rebuilt video layout [10:33:23] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:23] [CLEANUP] ======================================== [10:33:23] [SERVER] Starting reconnect polling (5s interval) [10:33:23] [CLEANUP] ======================================== [10:33:23] [CLEANUP] Cleaning up all agent connections and views [10:33:23] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:23] [CLEANUP] Stopped and removed 0 video connections [10:33:23] [CLEANUP] Removed 0 video views [10:33:23] [CLEANUP] Removed 0 feed scroll views [10:33:23] [CLEANUP] Removed 0 status labels [10:33:23] [CLEANUP] Reset agent query state [10:33:23] [CLEANUP] Updated page indicator [10:33:23] [CLEANUP] Rebuilt video layout [10:33:23] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:23] [CLEANUP] ======================================== [10:33:23] [SERVER] Starting reconnect polling (5s interval) [10:33:24] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:24] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:24] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:24] HELLO → sent (cached token, role=query) [10:33:24] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:24] [WS] Query connection failed - cleaning up all agent connections and views [10:33:24] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:24] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:24] [CLEANUP] ======================================== [10:33:24] [CLEANUP] Cleaning up all agent connections and views [10:33:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:24] [CLEANUP] Stopped and removed 0 video connections [10:33:24] [CLEANUP] Removed 0 video views [10:33:24] [CLEANUP] Removed 0 feed scroll views [10:33:24] [CLEANUP] Removed 0 status labels [10:33:24] [CLEANUP] Reset agent query state [10:33:24] [CLEANUP] Updated page indicator [10:33:24] [CLEANUP] Rebuilt video layout [10:33:24] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:24] [CLEANUP] ======================================== [10:33:24] [SERVER] Starting reconnect polling (5s interval) [10:33:24] [CLEANUP] ======================================== [10:33:24] [CLEANUP] Cleaning up all agent connections and views [10:33:24] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:24] [CLEANUP] Stopped and removed 0 video connections [10:33:24] [CLEANUP] Removed 0 video views [10:33:24] [CLEANUP] Removed 0 feed scroll views [10:33:24] [CLEANUP] Removed 0 status labels [10:33:24] [CLEANUP] Reset agent query state [10:33:24] [CLEANUP] Updated page indicator [10:33:24] [CLEANUP] Rebuilt video layout [10:33:24] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:24] [CLEANUP] ======================================== [10:33:24] [SERVER] Starting reconnect polling (5s interval) [10:33:25] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:33:25] [CLIENT_SIG] Client disconnected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:33:26] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:26] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:26] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:26] HELLO → sent (cached token, role=query) [10:33:26] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:26] [WS] Query connection failed - cleaning up all agent connections and views [10:33:26] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:26] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:26] [CLEANUP] ======================================== [10:33:26] [CLEANUP] Cleaning up all agent connections and views [10:33:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:26] [CLEANUP] Stopped and removed 0 video connections [10:33:26] [CLEANUP] Removed 0 video views [10:33:26] [CLEANUP] Removed 0 feed scroll views [10:33:26] [CLEANUP] Removed 0 status labels [10:33:26] [CLEANUP] Reset agent query state [10:33:26] [CLEANUP] Updated page indicator [10:33:26] [CLEANUP] Rebuilt video layout [10:33:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:26] [CLEANUP] ======================================== [10:33:26] [SERVER] Starting reconnect polling (5s interval) [10:33:26] [CLEANUP] ======================================== [10:33:26] [CLEANUP] Cleaning up all agent connections and views [10:33:26] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:26] [CLEANUP] Stopped and removed 0 video connections [10:33:26] [CLEANUP] Removed 0 video views [10:33:26] [CLEANUP] Removed 0 feed scroll views [10:33:26] [CLEANUP] Removed 0 status labels [10:33:26] [CLEANUP] Reset agent query state [10:33:26] [CLEANUP] Updated page indicator [10:33:26] [CLEANUP] Rebuilt video layout [10:33:26] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:26] [CLEANUP] ======================================== [10:33:26] [SERVER] Starting reconnect polling (5s interval) [10:33:27] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:27] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:28] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:28] HELLO → sent (cached token, role=query) [10:33:28] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:28] [WS] Query connection failed - cleaning up all agent connections and views [10:33:28] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:28] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:28] [CLEANUP] ======================================== [10:33:28] [CLEANUP] Cleaning up all agent connections and views [10:33:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:28] [CLEANUP] Stopped and removed 0 video connections [10:33:28] [CLEANUP] Removed 0 video views [10:33:28] [CLEANUP] Removed 0 feed scroll views [10:33:28] [CLEANUP] Removed 0 status labels [10:33:28] [CLEANUP] Reset agent query state [10:33:28] [CLEANUP] Updated page indicator [10:33:28] [CLEANUP] Rebuilt video layout [10:33:28] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:28] [CLEANUP] ======================================== [10:33:28] [SERVER] Starting reconnect polling (5s interval) [10:33:28] [CLEANUP] ======================================== [10:33:28] [CLEANUP] Cleaning up all agent connections and views [10:33:28] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:28] [CLEANUP] Stopped and removed 0 video connections [10:33:28] [CLEANUP] Removed 0 video views [10:33:28] [CLEANUP] Removed 0 feed scroll views [10:33:28] [CLEANUP] Removed 0 status labels [10:33:28] [CLEANUP] Reset agent query state [10:33:28] [CLEANUP] Updated page indicator [10:33:28] [CLEANUP] Rebuilt video layout [10:33:28] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:28] [CLEANUP] ======================================== [10:33:28] [SERVER] Starting reconnect polling (5s interval) [10:33:29] [CLIENT_SIG] Client connected: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) on session 'ILUIWU' (my session: 'ILUIWU') [10:33:29] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:29] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:29] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:29] HELLO → sent (cached token, role=query) [10:33:29] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:29] [WS] Query connection failed - cleaning up all agent connections and views [10:33:29] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:29] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:29] [CLEANUP] ======================================== [10:33:29] [CLEANUP] Cleaning up all agent connections and views [10:33:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:29] [CLEANUP] Stopped and removed 0 video connections [10:33:29] [CLEANUP] Removed 0 video views [10:33:29] [CLEANUP] Removed 0 feed scroll views [10:33:29] [CLEANUP] Removed 0 status labels [10:33:29] [CLEANUP] Reset agent query state [10:33:29] [CLEANUP] Updated page indicator [10:33:29] [CLEANUP] Rebuilt video layout [10:33:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:29] [CLEANUP] ======================================== [10:33:29] [SERVER] Starting reconnect polling (5s interval) [10:33:29] [CLEANUP] ======================================== [10:33:29] [CLEANUP] Cleaning up all agent connections and views [10:33:29] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:29] [CLEANUP] Stopped and removed 0 video connections [10:33:29] [CLEANUP] Removed 0 video views [10:33:29] [CLEANUP] Removed 0 feed scroll views [10:33:29] [CLEANUP] Removed 0 status labels [10:33:29] [CLEANUP] Reset agent query state [10:33:29] [CLEANUP] Updated page indicator [10:33:29] [CLEANUP] Rebuilt video layout [10:33:29] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:29] [CLEANUP] ======================================== [10:33:29] [SERVER] Starting reconnect polling (5s interval) [10:33:31] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:31] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:31] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:31] HELLO → sent (cached token, role=query) [10:33:31] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:31] [WS] Query connection failed - cleaning up all agent connections and views [10:33:31] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:31] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:31] [CLEANUP] ======================================== [10:33:31] [CLEANUP] Cleaning up all agent connections and views [10:33:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:31] [CLEANUP] Stopped and removed 0 video connections [10:33:31] [CLEANUP] Removed 0 video views [10:33:31] [CLEANUP] Removed 0 feed scroll views [10:33:31] [CLEANUP] Removed 0 status labels [10:33:31] [CLEANUP] Reset agent query state [10:33:31] [CLEANUP] Updated page indicator [10:33:31] [CLEANUP] Rebuilt video layout [10:33:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:31] [CLEANUP] ======================================== [10:33:31] [SERVER] Starting reconnect polling (5s interval) [10:33:31] [CLEANUP] ======================================== [10:33:31] [CLEANUP] Cleaning up all agent connections and views [10:33:31] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:31] [CLEANUP] Stopped and removed 0 video connections [10:33:31] [CLEANUP] Removed 0 video views [10:33:31] [CLEANUP] Removed 0 feed scroll views [10:33:31] [CLEANUP] Removed 0 status labels [10:33:31] [CLEANUP] Reset agent query state [10:33:31] [CLEANUP] Updated page indicator [10:33:31] [CLEANUP] Rebuilt video layout [10:33:31] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:31] [CLEANUP] ======================================== [10:33:31] [SERVER] Starting reconnect polling (5s interval) [10:33:32] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:32] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:33] [PUSH] Silent push received [10:33:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:33 +0000, appState=0, message_id=nil, type=nil [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:33 +0000 [10:33:33] [PUSH_EMBED] No embedded message_data in notification [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832], handled=false [10:33:33] [PUSH] No embedded data, pre-loading messages from server [10:33:33] [PUSH_PRELOAD] Fetching messages for instant display cache [10:33:33] [PUSH] Silent push received [10:33:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:33 +0000, appState=0, message_id=nil, type=nil [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:33 +0000 [10:33:33] [PUSH_EMBED] No embedded message_data in notification [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832], handled=false [10:33:33] [PUSH] No embedded data, pre-loading messages from server [10:33:33] [PUSH_PRELOAD] Fetching messages for instant display cache [10:33:33] [PUSH] Silent push received [10:33:33] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:33 +0000, appState=0, message_id=nil, type=nil [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:33 +0000 [10:33:33] [PUSH_EMBED] No embedded message_data in notification [10:33:33] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:33:33] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832], handled=false [10:33:33] [PUSH] No embedded data, pre-loading messages from server [10:33:33] [PUSH_PRELOAD] Fetching messages for instant display cache [10:33:33] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:33] HELLO → sent (cached token, role=query) [10:33:33] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:33] [WS] Query connection failed - cleaning up all agent connections and views [10:33:33] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:33] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:33] [CLEANUP] ======================================== [10:33:33] [CLEANUP] Cleaning up all agent connections and views [10:33:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:33] [CLEANUP] Stopped and removed 0 video connections [10:33:33] [CLEANUP] Removed 0 video views [10:33:33] [CLEANUP] Removed 0 feed scroll views [10:33:33] [CLEANUP] Removed 0 status labels [10:33:33] [CLEANUP] Reset agent query state [10:33:33] [CLEANUP] Updated page indicator [10:33:33] [CLEANUP] Rebuilt video layout [10:33:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:33] [CLEANUP] ======================================== [10:33:33] [SERVER] Starting reconnect polling (5s interval) [10:33:33] [CLEANUP] ======================================== [10:33:33] [CLEANUP] Cleaning up all agent connections and views [10:33:33] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:33] [CLEANUP] Stopped and removed 0 video connections [10:33:33] [CLEANUP] Removed 0 video views [10:33:33] [CLEANUP] Removed 0 feed scroll views [10:33:33] [CLEANUP] Removed 0 status labels [10:33:33] [CLEANUP] Reset agent query state [10:33:33] [CLEANUP] Updated page indicator [10:33:33] [CLEANUP] Rebuilt video layout [10:33:33] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:33] [CLEANUP] ======================================== [10:33:33] [SERVER] Starting reconnect polling (5s interval) [10:33:34] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:34] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:34] [CLIENT_SIG] Event received: type=3 messageId=28842 [10:33:34] [WS_EVENT] Received event: type=3, messageId=28842 [10:33:34] [WS_EVENT] Read receipt for message 28842 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:34] [CLIENT_SIG] Event received: type=3 messageId=28843 [10:33:34] [WS_EVENT] Received event: type=3, messageId=28843 [10:33:34] [WS_EVENT] Read receipt for message 28843 by Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:33:34] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:33:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:33:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=63, IDs=[28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834, 28833, 28832] [10:33:34] [PRELOAD_CACHE] Preserving 15 push-inserted messages: [28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=15, IDs=[28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=65, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_PRELOAD] ⚡ Pre-cached 65 messages for instant display (preserved 15 from push) [10:33:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:33:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 66 msgs, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2349 vccs=0 [10:33:34] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28843 [10:33:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28843, AnyHashable("operation_type"): 3] [10:33:34] [PUSH] Parsed message_id: 28843 [10:33:34] [PUSH] Parsed operation_type: 3 [10:33:34] [PUSH] Taking direct action: opType=3, messageId=28843 [10:33:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28843 [10:33:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:33:34] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:34] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=66 [10:33:34] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28843 [10:33:34] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:33:34] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:34] HELLO → sent (cached token, role=query) [10:33:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:33:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:33:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=65, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PRELOAD_CACHE] Preserving 15 push-inserted messages: [28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=15, IDs=[28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=65, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_PRELOAD] ⚡ Pre-cached 65 messages for instant display (preserved 15 from push) [10:33:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:33:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 66 msgs, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2349 vccs=0 [10:33:34] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28843 [10:33:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 3, AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28842] [10:33:34] [PUSH] Parsed message_id: 28842 [10:33:34] [PUSH] Parsed operation_type: 3 [10:33:34] [PUSH] Taking direct action: opType=3, messageId=28842 [10:33:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28842 [10:33:34] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:34] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:33:34] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:33:34] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:33:34] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:33:34] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=65, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PRELOAD_CACHE] Preserving 15 push-inserted messages: [28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=15, IDs=[28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:34] [PUSH_TRACE] 🔀 mergeMessages: merged.count=65, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_PRELOAD] ⚡ Pre-cached 65 messages for instant display (preserved 15 from push) [10:33:34] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:33:34] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 66 msgs, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2350 vccs=0 [10:33:34] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28843 [10:33:34] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 3, AnyHashable("message_id"): 28843, AnyHashable("aps"): { "content-available" = 1; }] [10:33:34] [PUSH] Parsed message_id: 28843 [10:33:34] [PUSH] Parsed operation_type: 3 [10:33:34] [PUSH] Taking direct action: opType=3, messageId=28843 [10:33:34] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28843 [10:33:34] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:34] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:33:34] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:34] [WS] Query connection failed - cleaning up all agent connections and views [10:33:34] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:34] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:34] [CLEANUP] ======================================== [10:33:34] [CLEANUP] Cleaning up all agent connections and views [10:33:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:34] [CLEANUP] Stopped and removed 0 video connections [10:33:34] [CLEANUP] Removed 0 video views [10:33:34] [CLEANUP] Removed 0 feed scroll views [10:33:34] [CLEANUP] Removed 0 status labels [10:33:34] [CLEANUP] Reset agent query state [10:33:34] [CLEANUP] Updated page indicator [10:33:34] [CLEANUP] Rebuilt video layout [10:33:34] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:34] [CLEANUP] ======================================== [10:33:34] [SERVER] Starting reconnect polling (5s interval) [10:33:34] [CLEANUP] ======================================== [10:33:34] [CLEANUP] Cleaning up all agent connections and views [10:33:34] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:34] [CLEANUP] Stopped and removed 0 video connections [10:33:34] [CLEANUP] Removed 0 video views [10:33:34] [CLEANUP] Removed 0 feed scroll views [10:33:34] [CLEANUP] Removed 0 status labels [10:33:34] [CLEANUP] Reset agent query state [10:33:34] [CLEANUP] Updated page indicator [10:33:34] [CLEANUP] Rebuilt video layout [10:33:34] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:34] [CLEANUP] ======================================== [10:33:34] [SERVER] Starting reconnect polling (5s interval) [10:33:34] [INCREMENTAL_SYNC] ✅ Found 8 new messages [10:33:34] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 8 new messages, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836] [10:33:34] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 66 msgs, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 66, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:34] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=8 [10:33:34] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=66 [10:33:34] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:33:34] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=66 [10:33:34] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28843, maxMemoryId=28843 [10:33:34] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28843 [10:33:34] [INCREMENTAL_SYNC] ✅ No new messages [10:33:35] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [10:33:35] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=66, first5Ids=[28843, 28842, 28841, 28840, 28839] [10:33:35] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 66 messages [10:33:35] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:35] [RELOAD_TAB] 📊 Building chatRows from 66 messages [10:33:35] [SCROLL] wasNearBottom=true, threshold=447, offset=5413, contentH=5860, boundsH=447, forceScroll=false [10:33:35] [RELOAD_TAB] 📊 Built 68 chatRows, estHeight=0.0 [10:33:35] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=75 [10:33:35] [SCROLL] Async handler: shouldScroll=false (force=false, newMsgs=false, nearBottom=true), maxY=5413, currentOffset=5413 [10:33:36] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:36] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:36] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:36] HELLO → sent (cached token, role=query) [10:33:36] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:36] [WS] Query connection failed - cleaning up all agent connections and views [10:33:36] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:36] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:36] [CLEANUP] ======================================== [10:33:36] [CLEANUP] Cleaning up all agent connections and views [10:33:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:36] [CLEANUP] Stopped and removed 0 video connections [10:33:36] [CLEANUP] Removed 0 video views [10:33:36] [CLEANUP] Removed 0 feed scroll views [10:33:36] [CLEANUP] Removed 0 status labels [10:33:36] [CLEANUP] Reset agent query state [10:33:36] [CLEANUP] Updated page indicator [10:33:36] [CLEANUP] Rebuilt video layout [10:33:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:36] [CLEANUP] ======================================== [10:33:36] [SERVER] Starting reconnect polling (5s interval) [10:33:36] [CLEANUP] ======================================== [10:33:36] [CLEANUP] Cleaning up all agent connections and views [10:33:36] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:36] [CLEANUP] Stopped and removed 0 video connections [10:33:36] [CLEANUP] Removed 0 video views [10:33:36] [CLEANUP] Removed 0 feed scroll views [10:33:36] [CLEANUP] Removed 0 status labels [10:33:36] [CLEANUP] Reset agent query state [10:33:36] [CLEANUP] Updated page indicator [10:33:36] [CLEANUP] Rebuilt video layout [10:33:36] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:36] [CLEANUP] ======================================== [10:33:36] [SERVER] Starting reconnect polling (5s interval) [10:33:36] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:37] [CLIENT_SIG] Event received: type=0 messageId=28844 [10:33:37] [WS_EVENT] Received event: type=0, messageId=28844 [10:33:37] [WS_EVENT] 📨 New message notification (msgId=28844) - triggering incremental refresh, currentMsgCount=66 [10:33:37] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=66 [10:33:37] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28843, maxMemoryId=28843 [10:33:37] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28843 [10:33:37] [INCREMENTAL_SYNC] ✅ Found 1 new messages [10:33:37] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 1 new messages, IDs=[28844] [10:33:37] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 66 msgs, first 10 IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:37] [PUSH_TRACE] 📡 INCREMENTAL: Adding new message id=28844 [10:33:37] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 1 new, total 67, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:37] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=1 [10:33:37] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=67 [10:33:37] [WS_EVENT] ✅ Incremental refresh complete, newMsgCount=67 [10:33:37] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [10:33:37] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=67, first5Ids=[28844, 28843, 28842, 28841, 28840] [10:33:37] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 67 messages [10:33:37] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:37] [RELOAD_TAB] 📊 Building chatRows from 67 messages [10:33:37] [SCROLL] wasNearBottom=true, threshold=447, offset=5413, contentH=5860, boundsH=447, forceScroll=false [10:33:37] [RELOAD_TAB] 📊 Built 69 chatRows, estHeight=0.0 [10:33:37] [EVOLUTION_FILTER] 📝 Updated lastSeenMessageId after marking as read: 28843 → 28844 [10:33:37] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=77 [10:33:37] [SCROLL] 💓 alive, visible=61...68, rows=69, estHeight=0.0, heightCalls=147 [10:33:37] [SCROLL] Async handler: shouldScroll=true (force=false, newMsgs=true, nearBottom=true), maxY=5490, currentOffset=5490 [10:33:37] [SCROLL] Scrolling to 5490, animated=true [10:33:38] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:38] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:38] [PUSH_DEBUG] 📣 Darwin notification from NSE — posting pollEventsNow [10:33:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 67 msgs, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2353 vccs=0 [10:33:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28844 [10:33:38] [PUSH] handlePollEventsNotification userInfo: [:] [10:33:38] [PUSH] No message_id in userInfo [10:33:38] [PUSH] No operation_type in userInfo [10:33:38] [FAST_REFRESH] Evolution disabled - performing incremental sync [10:33:38] [PUSH_TRACE] 📬 POLL: cache state: valid=true, count=65, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:38] [PUSH_TRACE] 📬 POLL: memory state: count=67, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [FAST_REFRESH] Already have 67 messages in memory [10:33:38] [FAST_REFRESH] maxMemoryId=28844, maxLocalId=28844 [10:33:38] [FAST_REFRESH] About to call reloadMessagesForCurrentTab(), isMainThread=true, viewLoaded=true [10:33:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=67 [10:33:38] [FAST_REFRESH] reloadMessagesForCurrentTab() called successfully [10:33:38] [READBY_OPT] No message IDs to fetch - skipping server call [10:33:38] [GAP_FIX] Incremental sync will use since_id=28835 (background max=28835, current DB max=28844) [10:33:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=67 [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28844 [10:33:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:33:38] [FAST_REFRESH] Enriched 0/0 unsettled messages with readBy data [10:33:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=67 [10:33:38] [RELOAD_TAB] ⏳ Already pending, waiting for debounce [10:33:38] [PUSH_DEBUG] ⬇️ PUSH RECEIVED at 2026-04-23 08:33:38 +0000 - type: unknown, operation_type: 0, message_id: 28844, session_id: ILUIWU, state: 0 [10:33:38] [PUSH_DEBUG] Full userInfo: [AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28844, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:33:36"; "file_name" = ""; "is_encrypted" = 0; message = "Yes\Ud83d\Ude25\Ud83d\Ude25\Ud83d\Ude25"; "message_id" = 28844; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28843; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:33:36, AnyHashable("message"): Yes😥😥😥, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra] [10:33:38] [PUSH] App active - suppressing notification UI, posting internal event [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:38 +0000 [10:33:38] [PUSH_TRACE] ⬇️ Processing embedded message_id=28844 [10:33:38] [PUSH_EMBED] 📩 Received embedded message: id=28844, type=0, sender=Esra [10:33:38] [PUSH_TRACE] ⬇️ Message details: text="Yes😥😥😥...", datesent=2026-04-23 08:33:36 [10:33:38] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:33:38] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_EMBED] ✅ Saved message 28844 to local DB (sync) [10:33:38] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28844 [10:33:38] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28844 [10:33:38] [PUSH_TRACE] 📦 Cache state: valid=true, count=65, IDs=[28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835, 28834] [10:33:38] [PUSH_EMBED] Inserted message 28844 into existing cache (now 66 messages) [10:33:38] [PUSH_TRACE] 📦 ✅ Inserted message 28844, cache now has IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] 📦 EXITING cache update queue for message 28844 [10:33:38] [PUSH_EMBED] Fetching evolution data for message 28844 in background [10:33:38] [PUSH_EMBED] ✅ Fully processed message 28844 [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28844 [10:33:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 67 msgs, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2353 vccs=0 [10:33:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28844 [10:33:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("operation_type"): 0, AnyHashable("timer"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message_id"): 28844, AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("file_name"): , AnyHashable("thumb_file_name"): , AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:33:36"; "file_name" = ""; "is_encrypted" = 0; message = "Yes\Ud83d\Ude25\Ud83d\Ude25\Ud83d\Ude25"; "message_id" = 28844; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28843; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("datesent"): 2026-04-23 08:33:36, AnyHashable("message"): Yes😥😥😥, AnyHashable("message_type"): 0, AnyHashable("sender_name"): Esra] [10:33:38] [PUSH_EMBED_VC] Message 28844 already in memory - skipping [10:33:38] [PUSH] ⚡ Embedded message handled directly in ViewController [10:33:38] [PUSH] Parsed message_id: 28844 [10:33:38] [PUSH] Parsed operation_type: 0 [10:33:38] [PUSH] Taking direct action: opType=0, messageId=28844 [10:33:38] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28844 [10:33:38] [PUSH] ⚡ Message 28844 already in memory - skipping duplicate notification entirely [10:33:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:38] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:33:38] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:33:38] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:33:38] [PUSH_TRACE] 👁️ Received message id=28844, text="Yes😥😥😥..." [10:33:38] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:33:38] [PUSH_UI] Message 28844 already in memory - skipping insert [10:33:38] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:33:38] [PUSH] Silent push received [10:33:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:38 +0000, appState=0, message_id=28844, type=nil [10:33:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:38 +0000 [10:33:38] [PUSH_TRACE] ⬇️ Processing embedded message_id=28844 [10:33:38] [PUSH_EMBED] 📩 Received embedded message: id=28844, type=0, sender=Esra [10:33:38] [PUSH_TRACE] ⬇️ Message details: text="Yes😥😥😥...", datesent=2026-04-23 08:33:36 [10:33:38] [PUSH_TRACE] ⬇️ Session check: msgSession=ILUIWU, currentSession=ILUIWU [10:33:38] [PUSH_TRACE] ⬇️ About to enter pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_TRACE] ⬇️ INSIDE pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_EMBED] ✅ Saved message 28844 to local DB (sync) [10:33:38] [PUSH_TRACE] ⬇️ EXITING pushMessageQueue.sync for message 28844 [10:33:38] [PUSH_TRACE] 📦 About to update PreloadedDataCache for message 28844 [10:33:38] [PUSH_TRACE] 📦 INSIDE cache update queue for message 28844 [10:33:38] [PUSH_TRACE] 📦 Cache state: valid=true, count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] 📦 ⚠️ Message 28844 already in cache, skipping insert [10:33:38] [PUSH_TRACE] 📦 EXITING cache update queue for message 28844 [10:33:38] [PUSH_EMBED] Fetching evolution data for message 28844 in background [10:33:38] [PUSH_EMBED] ✅ Fully processed message 28844 [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - SUCCESS for message 28844 [10:33:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835], handled=true [10:33:38] [PUSH] Embedded message handled instantly from silent push [10:33:38] [PUSH_TRACE] 🔔 SILENT: About to post pollEventsNow notification [10:33:38] [PUSH_TRACE] 🔔 SILENT: Completed with .newData for message_id=28844 [10:33:38] [PUSH_UI] 🔔 handlePushMessageReceived CALLED [10:33:38] [PUSH_TRACE] 👁️ handlePushMessageReceived START [10:33:38] [PUSH_TRACE] 👁️ Received message id=28844, text="Yes😥😥😥..." [10:33:38] [PUSH_UI_BLACKOUT] blackoutView=false, currentTab=0, senderId=EDAD55A1-003F-415D-AA60-672B34B504FE, myUserId=3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF, type=0 [10:33:38] [PUSH_UI] Message 28844 already in memory - skipping insert [10:33:38] [PUSH_TRACE] 👁️ handlePushMessageReceived END - already exists [10:33:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 67 msgs, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=running pings=2 secsSinceLastPong=2353 vccs=0 [10:33:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28844 [10:33:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("file_name"): , AnyHashable("aps"): { alert = { body = "You have received a new message"; title = Eye; }; badge = 1; "content-available" = 1; "mutable-content" = 1; sound = default; }, AnyHashable("message_data"): { "crypto_version" = 0; datesent = "2026-04-23 08:33:36"; "file_name" = ""; "is_encrypted" = 0; message = "Yes\Ud83d\Ude25\Ud83d\Ude25\Ud83d\Ude25"; "message_id" = 28844; "message_type" = 0; "mime_type" = ""; "plaintext_size" = 0; "prev_session_message_id" = 28843; "sender_id" = "EDAD55A1-003F-415D-AA60-672B34B504FE"; "sender_name" = Esra; "session_id" = ILUIWU; "thumb_file_name" = ""; timer = 0; "upload_status" = 0; }, AnyHashable("sender_name"): Esra, AnyHashable("sender_id"): EDAD55A1-003F-415D-AA60-672B34B504FE, AnyHashable("message"): Yes😥😥😥, AnyHashable("thumb_file_name"): , AnyHashable("message_type"): 0, AnyHashable("session_id"): ILUIWU, AnyHashable("operation_type"): 0, AnyHashable("message_id"): 28844, AnyHashable("timer"): 0, AnyHashable("datesent"): 2026-04-23 08:33:36] [10:33:38] [PUSH_EMBED_VC] Message 28844 already in memory - skipping [10:33:38] [PUSH] ⚡ Embedded message handled directly in ViewController [10:33:38] [PUSH] Parsed message_id: 28844 [10:33:38] [PUSH] Parsed operation_type: 0 [10:33:38] [PUSH] Taking direct action: opType=0, messageId=28844 [10:33:38] [PUSH] TakeActionFromPush called: OperationType=0, MessageIds=28844 [10:33:38] [PUSH] ⚡ Message 28844 already in memory - skipping duplicate notification entirely [10:33:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:38] [INCREMENTAL_SYNC] ⚠️ Already reloading - queuing retry after current completes [10:33:38] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:38] HELLO → sent (cached token, role=query) [10:33:38] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:38] [WS] Query connection failed - cleaning up all agent connections and views [10:33:38] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:38] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:38] [CLEANUP] ======================================== [10:33:38] [CLEANUP] Cleaning up all agent connections and views [10:33:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:38] [CLEANUP] Stopped and removed 0 video connections [10:33:38] [CLEANUP] Removed 0 video views [10:33:38] [CLEANUP] Removed 0 feed scroll views [10:33:38] [CLEANUP] Removed 0 status labels [10:33:38] [CLEANUP] Reset agent query state [10:33:38] [CLEANUP] Updated page indicator [10:33:38] [CLEANUP] Rebuilt video layout [10:33:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:38] [CLEANUP] ======================================== [10:33:38] [SERVER] Starting reconnect polling (5s interval) [10:33:38] [CLEANUP] ======================================== [10:33:38] [CLEANUP] Cleaning up all agent connections and views [10:33:38] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:38] [CLEANUP] Stopped and removed 0 video connections [10:33:38] [CLEANUP] Removed 0 video views [10:33:38] [CLEANUP] Removed 0 feed scroll views [10:33:38] [CLEANUP] Removed 0 status labels [10:33:38] [CLEANUP] Reset agent query state [10:33:38] [CLEANUP] Updated page indicator [10:33:38] [CLEANUP] Rebuilt video layout [10:33:38] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:38] [CLEANUP] ======================================== [10:33:38] [SERVER] Starting reconnect polling (5s interval) [10:33:38] [PUSH_EMBED] Got evolution data for message 28844, saving to local DB [10:33:38] [PUSH_EMBED] Saved evolution data for message 28844 [10:33:38] [PUSH_EMBED] Got evolution data for message 28844, saving to local DB [10:33:38] [PUSH_EMBED] Saved evolution data for message 28844 [10:33:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=0 [10:33:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=67, first5Ids=[28844, 28843, 28842, 28841, 28840] [10:33:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 67 messages [10:33:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [RELOAD_TAB] 📊 Building chatRows from 67 messages [10:33:38] [SCROLL] wasNearBottom=true, threshold=447, offset=5490, contentH=5937, boundsH=447, forceScroll=true [10:33:38] [RELOAD_TAB] 📊 Built 69 chatRows, estHeight=0.0 [10:33:38] [INCREMENTAL_SYNC] ✅ Found 9 new messages [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 9 new messages, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836] [10:33:38] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=75 [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 67 msgs, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 67, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=9 [10:33:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=67 [10:33:38] [INCREMENTAL_SYNC] 🔁 Processing queued retry refresh [10:33:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=67 [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28844, maxMemoryId=28844 [10:33:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28844 [10:33:38] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5490, currentOffset=5490 [10:33:38] [SCROLL] Scrolling to 5490, animated=false [10:33:38] [FAST_REFRESH] Incremental sync complete - 67 messages [10:33:38] [INCREMENTAL_SYNC] ✅ No new messages [10:33:38] [PUSH] Silent push received [10:33:38] [PUSH_TRACE] 🔔 SILENT PUSH at 2026-04-23 08:33:38 +0000, appState=0, message_id=nil, type=nil [10:33:38] [PUSH_TRACE] 🔔 SILENT: cache BEFORE: count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData START at 2026-04-23 08:33:38 +0000 [10:33:38] [PUSH_EMBED] No embedded message_data in notification [10:33:38] [PUSH_TRACE] ⬇️ handleEmbeddedMessageData END - no message_data [10:33:38] [PUSH_TRACE] 🔔 SILENT: cache AFTER: count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835], handled=false [10:33:38] [PUSH] No embedded data, pre-loading messages from server [10:33:38] [PUSH_PRELOAD] Fetching messages for instant display cache [10:33:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [10:33:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=67, first5Ids=[28844, 28843, 28842, 28841, 28840] [10:33:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 67 messages [10:33:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [RELOAD_TAB] 📊 Building chatRows from 67 messages [10:33:38] [SCROLL] wasNearBottom=true, threshold=447, offset=5490, contentH=5937, boundsH=447, forceScroll=true [10:33:38] [RELOAD_TAB] 📊 Built 69 chatRows, estHeight=0.0 [10:33:38] [RELOAD_TAB] ⚡ performReload LAYOUT DONE, heightCalls=75 [10:33:38] [SCROLL] Async handler: shouldScroll=true (force=true, newMsgs=false, nearBottom=true), maxY=5490, currentOffset=5490 [10:33:38] [SCROLL] Scrolling to 5490, animated=false [10:33:38] [PUSH_PRELOAD] Fetched 50 messages - caching for instant display [10:33:38] [REPLY_LOAD] AppDelegate mid=28818 raw='Any plans for today baby ?' decoded='Any plans for today baby ?' rawScalars=[U+41=A, U+6E=n, U+79=y, U+20= , U+70=p, U+6C=l, U+61=a, U+6E=n, U+73=s, U+20= , U+66=f, U+6F=o, U+72=r, U+20= , U+74=t, U+6F=o, U+64=d, U+61=a, U+79=y, U+20= , U+62=b, U+61=a, U+62=b, U+79=y] [10:33:38] [REPLY_LOAD] AppDelegate mid=28817 raw='And you, anyway, don't really need more reliefs, right 😉?' decoded='And you, anyway, don't really need more reliefs, right 😉?' rawScalars=[U+41=A, U+6E=n, U+64=d, U+20= , U+79=y, U+6F=o, U+75=u, U+2C=,, U+20= , U+61=a, U+6E=n, U+79=y, U+77=w, U+61=a, U+79=y, U+2C=,, U+20= , U+64=d, U+6F=o, U+6E=n, U+27=', U+74=t, U+20= , U+72=r] [10:33:38] [REPLY_LOAD] AppDelegate mid=28810 raw='🤭' decoded='🤭' rawScalars=[U+1F92D=🤭] [10:33:38] [PUSH_TRACE] 🔀 mergeMessages called: newMessages.count=50, sessionId=ILUIWU [10:33:38] [PUSH_TRACE] 🔀 mergeMessages: newMessages IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] 🔀 mergeMessages: existingMessages.count=66, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PRELOAD_CACHE] Preserving 16 push-inserted messages: [28756, 28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:38] [PUSH_TRACE] 🔀 mergeMessages: preservedMessages.count=16, IDs=[28756, 28752, 28751, 28750, 28749, 28748, 28747, 28746, 28745, 28744, 28743, 28742, 28741, 28740, 28739, 28738] [10:33:38] [PUSH_TRACE] 🔀 mergeMessages: merged.count=66, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_PRELOAD] ⚡ Pre-cached 66 messages for instant display (preserved 16 from push) [10:33:38] [PUSH_PRELOAD] ✅ Pre-load complete with thumbnails [10:33:38] [PUSH_TRACE] 📬 handlePollEventsNotification START: memory has 67 msgs, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [CAM_CONN] 📬 handlePollEvents — pushType= tab=0 hasQueryConn=true wsState=completed pings=2 secsSinceLastPong=2353 vccs=0 [10:33:38] [GAP_FIX] maxMessageIdAtBackground=28835, currentMaxLocalId=28844 [10:33:38] [PUSH] handlePollEventsNotification userInfo: [AnyHashable("aps"): { "content-available" = 1; }, AnyHashable("operation_type"): 3, AnyHashable("session_id"): ILUIWU, AnyHashable("message_id"): 28844] [10:33:38] [PUSH] Parsed message_id: 28844 [10:33:38] [PUSH] Parsed operation_type: 3 [10:33:38] [PUSH] Taking direct action: opType=3, messageId=28844 [10:33:38] [PUSH] TakeActionFromPush called: OperationType=3, MessageIds=28844 [10:33:38] [GAP_FIX] Post-action sync: using background max 28835 to catch coalesced messages [10:33:38] [INCREMENTAL_SYNC] 🔄 Starting incremental refresh, currentMsgCount=67 [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: maxLocalId (from DB)=28835, maxMemoryId=28844 [10:33:38] [INCREMENTAL_SYNC] 📡 Fetching messages since ID 28835 [10:33:38] [INCREMENTAL_SYNC] ✅ Found 9 new messages [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: Server returned 9 new messages, IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836] [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: BEFORE merge, memory has 67 msgs, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [PUSH_TRACE] 📡 INCREMENTAL: AFTER merge, added 0 new, total 67, first 10 IDs=[28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [BLACKOUT_DEBUG] blackoutView=nil, newMessages.count=9 [10:33:38] [RELOAD_TAB] 📢 reloadMessagesForCurrentTab (debounced) called, msgs=67 [10:33:38] [RELOAD_TAB] ⚡ performReload ENTER, skip=false, estHeight=0.0, heightCalls=75 [10:33:38] [RELOAD_TAB] 🔄 reloadMessagesForCurrentTab called, allMsgsCount=67, first5Ids=[28844, 28843, 28842, 28841, 28840] [10:33:38] [PUSH_TRACE] 📺 RELOAD: allMessagesWithReadBy has 67 messages [10:33:38] [PUSH_TRACE] 📺 RELOAD: First 10 IDs: [28844, 28843, 28842, 28841, 28840, 28839, 28838, 28837, 28836, 28835] [10:33:38] [RELOAD_TAB] 📊 Building chatRows from 67 messages [10:33:38] [SCROLL] wasNearBottom=true, threshold=447, offset=5490, contentH=5937, boundsH=447, forceScroll=false [10:33:38] [RELOAD_TAB] 📊 Built 69 chatRows, estHeight=0.0 [10:33:38] [RELOAD_TAB] ⏭️ Skipping reloadData - row signature unchanged [10:33:39] [CLIENT_SIG] Event received: type=3 messageId=28844 [10:33:39] [WS_EVENT] Received event: type=3, messageId=28844 [10:33:39] [WS_EVENT] Read receipt for message 28844 by Laurent (3B8A4F00-5ABD-47E5-8C88-F15DA9EF83AF) [10:33:39] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:39] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:39] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:39] HELLO → sent (cached token, role=query) [10:33:39] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:39] [WS] Query connection failed - cleaning up all agent connections and views [10:33:39] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:39] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:39] [CLEANUP] ======================================== [10:33:39] [CLEANUP] Cleaning up all agent connections and views [10:33:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:39] [CLEANUP] Stopped and removed 0 video connections [10:33:39] [CLEANUP] Removed 0 video views [10:33:39] [CLEANUP] Removed 0 feed scroll views [10:33:39] [CLEANUP] Removed 0 status labels [10:33:39] [CLEANUP] Reset agent query state [10:33:39] [CLEANUP] Updated page indicator [10:33:39] [CLEANUP] Rebuilt video layout [10:33:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:39] [CLEANUP] ======================================== [10:33:39] [SERVER] Starting reconnect polling (5s interval) [10:33:39] [CLEANUP] ======================================== [10:33:39] [CLEANUP] Cleaning up all agent connections and views [10:33:39] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:39] [CLEANUP] Stopped and removed 0 video connections [10:33:39] [CLEANUP] Removed 0 video views [10:33:39] [CLEANUP] Removed 0 feed scroll views [10:33:39] [CLEANUP] Removed 0 status labels [10:33:39] [CLEANUP] Reset agent query state [10:33:39] [CLEANUP] Updated page indicator [10:33:39] [CLEANUP] Rebuilt video layout [10:33:39] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:39] [CLEANUP] ======================================== [10:33:39] [SERVER] Starting reconnect polling (5s interval) [10:33:41] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:41] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:41] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:41] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:41] HELLO → sent (cached token, role=query) [10:33:41] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:41] [WS] Query connection failed - cleaning up all agent connections and views [10:33:41] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:41] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:41] [CLEANUP] ======================================== [10:33:41] [CLEANUP] Cleaning up all agent connections and views [10:33:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:41] [CLEANUP] Stopped and removed 0 video connections [10:33:41] [CLEANUP] Removed 0 video views [10:33:41] [CLEANUP] Removed 0 feed scroll views [10:33:41] [CLEANUP] Removed 0 status labels [10:33:41] [CLEANUP] Reset agent query state [10:33:41] [CLEANUP] Updated page indicator [10:33:41] [CLEANUP] Rebuilt video layout [10:33:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:41] [CLEANUP] ======================================== [10:33:41] [SERVER] Starting reconnect polling (5s interval) [10:33:41] [CLEANUP] ======================================== [10:33:41] [CLEANUP] Cleaning up all agent connections and views [10:33:41] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:41] [CLEANUP] Stopped and removed 0 video connections [10:33:41] [CLEANUP] Removed 0 video views [10:33:41] [CLEANUP] Removed 0 feed scroll views [10:33:41] [CLEANUP] Removed 0 status labels [10:33:41] [CLEANUP] Reset agent query state [10:33:41] [CLEANUP] Updated page indicator [10:33:41] [CLEANUP] Rebuilt video layout [10:33:41] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:41] [CLEANUP] ======================================== [10:33:41] [SERVER] Starting reconnect polling (5s interval) [10:33:43] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:43] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:43] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:43] HELLO → sent (cached token, role=query) [10:33:43] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:43] [WS] Query connection failed - cleaning up all agent connections and views [10:33:43] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:43] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:43] [CLEANUP] ======================================== [10:33:43] [CLEANUP] Cleaning up all agent connections and views [10:33:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:43] [CLEANUP] Stopped and removed 0 video connections [10:33:43] [CLEANUP] Removed 0 video views [10:33:43] [CLEANUP] Removed 0 feed scroll views [10:33:43] [CLEANUP] Removed 0 status labels [10:33:43] [CLEANUP] Reset agent query state [10:33:43] [CLEANUP] Updated page indicator [10:33:43] [CLEANUP] Rebuilt video layout [10:33:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:43] [CLEANUP] ======================================== [10:33:43] [SERVER] Starting reconnect polling (5s interval) [10:33:43] [CLEANUP] ======================================== [10:33:43] [CLEANUP] Cleaning up all agent connections and views [10:33:43] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:43] [CLEANUP] Stopped and removed 0 video connections [10:33:43] [CLEANUP] Removed 0 video views [10:33:43] [CLEANUP] Removed 0 feed scroll views [10:33:43] [CLEANUP] Removed 0 status labels [10:33:43] [CLEANUP] Reset agent query state [10:33:43] [CLEANUP] Updated page indicator [10:33:43] [CLEANUP] Rebuilt video layout [10:33:43] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:43] [CLEANUP] ======================================== [10:33:43] [SERVER] Starting reconnect polling (5s interval) [10:33:44] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:44] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:44] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:44] HELLO → sent (cached token, role=query) [10:33:45] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:45] [WS] Query connection failed - cleaning up all agent connections and views [10:33:45] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:45] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:45] [CLEANUP] ======================================== [10:33:45] [CLEANUP] Cleaning up all agent connections and views [10:33:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:45] [CLEANUP] Stopped and removed 0 video connections [10:33:45] [CLEANUP] Removed 0 video views [10:33:45] [CLEANUP] Removed 0 feed scroll views [10:33:45] [CLEANUP] Removed 0 status labels [10:33:45] [CLEANUP] Reset agent query state [10:33:45] [CLEANUP] Updated page indicator [10:33:45] [CLEANUP] Rebuilt video layout [10:33:45] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:45] [CLEANUP] ======================================== [10:33:45] [SERVER] Starting reconnect polling (5s interval) [10:33:45] [CLEANUP] ======================================== [10:33:45] [CLEANUP] Cleaning up all agent connections and views [10:33:45] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:45] [CLEANUP] Stopped and removed 0 video connections [10:33:45] [CLEANUP] Removed 0 video views [10:33:45] [CLEANUP] Removed 0 feed scroll views [10:33:45] [CLEANUP] Removed 0 status labels [10:33:45] [CLEANUP] Reset agent query state [10:33:45] [CLEANUP] Updated page indicator [10:33:45] [CLEANUP] Rebuilt video layout [10:33:45] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:45] [CLEANUP] ======================================== [10:33:45] [SERVER] Starting reconnect polling (5s interval) [10:33:46] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:46] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:46] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:46] HELLO → sent (cached token, role=query) [10:33:46] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:46] [WS] Query connection failed - cleaning up all agent connections and views [10:33:46] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:46] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:46] [CLEANUP] ======================================== [10:33:46] [CLEANUP] Cleaning up all agent connections and views [10:33:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:46] [CLEANUP] Stopped and removed 0 video connections [10:33:46] [CLEANUP] Removed 0 video views [10:33:46] [CLEANUP] Removed 0 feed scroll views [10:33:46] [CLEANUP] Removed 0 status labels [10:33:46] [CLEANUP] Reset agent query state [10:33:46] [CLEANUP] Updated page indicator [10:33:46] [CLEANUP] Rebuilt video layout [10:33:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:46] [CLEANUP] ======================================== [10:33:46] [SERVER] Starting reconnect polling (5s interval) [10:33:46] [CLEANUP] ======================================== [10:33:46] [CLEANUP] Cleaning up all agent connections and views [10:33:46] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:46] [CLEANUP] Stopped and removed 0 video connections [10:33:46] [CLEANUP] Removed 0 video views [10:33:46] [CLEANUP] Removed 0 feed scroll views [10:33:46] [CLEANUP] Removed 0 status labels [10:33:46] [CLEANUP] Reset agent query state [10:33:46] [CLEANUP] Updated page indicator [10:33:46] [CLEANUP] Rebuilt video layout [10:33:46] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:46] [CLEANUP] ======================================== [10:33:46] [SERVER] Starting reconnect polling (5s interval) [10:33:46] [LOG] Long press on chat icon detected! Triggering log upload... [10:33:46] [LOG-PROMPT] ====== promptForLogDescription START ====== [10:33:46] [LOG-PROMPT] presentedVC=nil [10:33:46] [LOG-PROMPT] isViewLoaded=true, view.window=YES [10:33:46] [LOG-PROMPT] inputField.isFirstResponder=true [10:33:46] [LOG-PROMPT] allowKeyboardDismiss BEFORE=false [10:33:46] [LOG-PROMPT] allowKeyboardDismiss set to TRUE [10:33:46] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 223pt [10:33:48] [SCROLL_END_DECEL] messagesTable offsetY=5490, insetTop=0, pendingVelocityY=0.0 [10:33:48] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:48] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:48] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:48] HELLO → sent (cached token, role=query) [10:33:48] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:48] [WS] Query connection failed - cleaning up all agent connections and views [10:33:48] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:48] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:48] [CLEANUP] ======================================== [10:33:48] [CLEANUP] Cleaning up all agent connections and views [10:33:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:48] [CLEANUP] Stopped and removed 0 video connections [10:33:48] [CLEANUP] Removed 0 video views [10:33:48] [CLEANUP] Removed 0 feed scroll views [10:33:48] [CLEANUP] Removed 0 status labels [10:33:48] [CLEANUP] Reset agent query state [10:33:48] [CLEANUP] Updated page indicator [10:33:48] [CLEANUP] Rebuilt video layout [10:33:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:48] [CLEANUP] ======================================== [10:33:48] [SERVER] Starting reconnect polling (5s interval) [10:33:48] [CLEANUP] ======================================== [10:33:48] [CLEANUP] Cleaning up all agent connections and views [10:33:48] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:48] [CLEANUP] Stopped and removed 0 video connections [10:33:48] [CLEANUP] Removed 0 video views [10:33:48] [CLEANUP] Removed 0 feed scroll views [10:33:48] [CLEANUP] Removed 0 status labels [10:33:48] [CLEANUP] Reset agent query state [10:33:48] [CLEANUP] Updated page indicator [10:33:48] [CLEANUP] Rebuilt video layout [10:33:48] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:48] [CLEANUP] ======================================== [10:33:48] [SERVER] Starting reconnect polling (5s interval) [10:33:50] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:50] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:50] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:50] HELLO → sent (cached token, role=query) [10:33:50] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:50] [WS] Query connection failed - cleaning up all agent connections and views [10:33:50] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:50] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:50] [CLEANUP] ======================================== [10:33:50] [CLEANUP] Cleaning up all agent connections and views [10:33:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:50] [CLEANUP] Stopped and removed 0 video connections [10:33:50] [CLEANUP] Removed 0 video views [10:33:50] [CLEANUP] Removed 0 feed scroll views [10:33:50] [CLEANUP] Removed 0 status labels [10:33:50] [CLEANUP] Reset agent query state [10:33:50] [CLEANUP] Updated page indicator [10:33:50] [CLEANUP] Rebuilt video layout [10:33:50] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:50] [CLEANUP] ======================================== [10:33:50] [SERVER] Starting reconnect polling (5s interval) [10:33:50] [CLEANUP] ======================================== [10:33:50] [CLEANUP] Cleaning up all agent connections and views [10:33:50] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:50] [CLEANUP] Stopped and removed 0 video connections [10:33:50] [CLEANUP] Removed 0 video views [10:33:50] [CLEANUP] Removed 0 feed scroll views [10:33:50] [CLEANUP] Removed 0 status labels [10:33:50] [CLEANUP] Reset agent query state [10:33:50] [CLEANUP] Updated page indicator [10:33:50] [CLEANUP] Rebuilt video layout [10:33:50] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:50] [CLEANUP] ======================================== [10:33:50] [SERVER] Starting reconnect polling (5s interval) [10:33:51] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:51] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:51] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:51] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:51] HELLO → sent (cached token, role=query) [10:33:51] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:51] [WS] Query connection failed - cleaning up all agent connections and views [10:33:51] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:51] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:51] [CLEANUP] ======================================== [10:33:51] [CLEANUP] Cleaning up all agent connections and views [10:33:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:51] [CLEANUP] Stopped and removed 0 video connections [10:33:51] [CLEANUP] Removed 0 video views [10:33:51] [CLEANUP] Removed 0 feed scroll views [10:33:51] [CLEANUP] Removed 0 status labels [10:33:51] [CLEANUP] Reset agent query state [10:33:51] [CLEANUP] Updated page indicator [10:33:51] [CLEANUP] Rebuilt video layout [10:33:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:51] [CLEANUP] ======================================== [10:33:51] [SERVER] Starting reconnect polling (5s interval) [10:33:51] [CLEANUP] ======================================== [10:33:51] [CLEANUP] Cleaning up all agent connections and views [10:33:51] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:51] [CLEANUP] Stopped and removed 0 video connections [10:33:51] [CLEANUP] Removed 0 video views [10:33:51] [CLEANUP] Removed 0 feed scroll views [10:33:51] [CLEANUP] Removed 0 status labels [10:33:51] [CLEANUP] Reset agent query state [10:33:51] [CLEANUP] Updated page indicator [10:33:51] [CLEANUP] Rebuilt video layout [10:33:51] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:51] [CLEANUP] ======================================== [10:33:51] [SERVER] Starting reconnect polling (5s interval) [10:33:53] [SCROLL] 💓 alive, visible=58...68, rows=69, estHeight=0.0, heightCalls=7 [10:33:53] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:53] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:53] [LOG] Upload tapped with description: 'Notification received' [10:33:53] [LOG] Uploading log as '2026-04-23-10-33-notification-received-Laurent.log' (1.4 MB) to server... [10:33:53] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:53] HELLO → sent (cached token, role=query) [10:33:53] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:53] [WS] Query connection failed - cleaning up all agent connections and views [10:33:53] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:53] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:53] [CLEANUP] ======================================== [10:33:53] [CLEANUP] Cleaning up all agent connections and views [10:33:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:53] [CLEANUP] Stopped and removed 0 video connections [10:33:53] [CLEANUP] Removed 0 video views [10:33:53] [CLEANUP] Removed 0 feed scroll views [10:33:53] [CLEANUP] Removed 0 status labels [10:33:53] [CLEANUP] Reset agent query state [10:33:53] [CLEANUP] Updated page indicator [10:33:53] [CLEANUP] Rebuilt video layout [10:33:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:53] [CLEANUP] ======================================== [10:33:53] [SERVER] Starting reconnect polling (5s interval) [10:33:53] [CLEANUP] ======================================== [10:33:53] [CLEANUP] Cleaning up all agent connections and views [10:33:53] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:53] [CLEANUP] Stopped and removed 0 video connections [10:33:53] [CLEANUP] Removed 0 video views [10:33:53] [CLEANUP] Removed 0 feed scroll views [10:33:53] [CLEANUP] Removed 0 status labels [10:33:53] [CLEANUP] Reset agent query state [10:33:53] [CLEANUP] Updated page indicator [10:33:53] [CLEANUP] Rebuilt video layout [10:33:53] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:53] [CLEANUP] ======================================== [10:33:53] [SERVER] Starting reconnect polling (5s interval) [10:33:53] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:54] [LOG] Upload HTTP status: 200 [10:33:54] [LOG] Upload successful: 2026-04-23-10-33-notification-received-Laurent.log [10:33:54] [LOG] Skipping cross-device log request (description doesn't end with '2') [10:33:55] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:55] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:55] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:55] HELLO → sent (cached token, role=query) [10:33:55] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:55] [WS] Query connection failed - cleaning up all agent connections and views [10:33:55] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:55] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:55] [CLEANUP] ======================================== [10:33:55] [CLEANUP] Cleaning up all agent connections and views [10:33:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:55] [CLEANUP] Stopped and removed 0 video connections [10:33:55] [CLEANUP] Removed 0 video views [10:33:55] [CLEANUP] Removed 0 feed scroll views [10:33:55] [CLEANUP] Removed 0 status labels [10:33:55] [CLEANUP] Reset agent query state [10:33:55] [CLEANUP] Updated page indicator [10:33:55] [CLEANUP] Rebuilt video layout [10:33:55] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:55] [CLEANUP] ======================================== [10:33:55] [SERVER] Starting reconnect polling (5s interval) [10:33:55] [CLEANUP] ======================================== [10:33:55] [CLEANUP] Cleaning up all agent connections and views [10:33:55] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:55] [CLEANUP] Stopped and removed 0 video connections [10:33:55] [CLEANUP] Removed 0 video views [10:33:55] [CLEANUP] Removed 0 feed scroll views [10:33:55] [CLEANUP] Removed 0 status labels [10:33:55] [CLEANUP] Reset agent query state [10:33:55] [CLEANUP] Updated page indicator [10:33:55] [CLEANUP] Rebuilt video layout [10:33:55] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:55] [CLEANUP] ======================================== [10:33:55] [SERVER] Starting reconnect polling (5s interval) [10:33:56] [SCROLL] 💓 alive, visible=58...64, rows=69, estHeight=0.0, heightCalls=6 [10:33:56] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt [10:33:56] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:56] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:56] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:56] HELLO → sent (cached token, role=query) [10:33:56] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:56] [WS] Query connection failed - cleaning up all agent connections and views [10:33:56] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:56] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:56] [CLEANUP] ======================================== [10:33:56] [CLEANUP] Cleaning up all agent connections and views [10:33:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:56] [CLEANUP] Stopped and removed 0 video connections [10:33:56] [CLEANUP] Removed 0 video views [10:33:56] [CLEANUP] Removed 0 feed scroll views [10:33:56] [CLEANUP] Removed 0 status labels [10:33:56] [CLEANUP] Reset agent query state [10:33:56] [CLEANUP] Updated page indicator [10:33:56] [CLEANUP] Rebuilt video layout [10:33:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:56] [CLEANUP] ======================================== [10:33:56] [SERVER] Starting reconnect polling (5s interval) [10:33:56] [CLEANUP] ======================================== [10:33:56] [CLEANUP] Cleaning up all agent connections and views [10:33:56] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:56] [CLEANUP] Stopped and removed 0 video connections [10:33:56] [CLEANUP] Removed 0 video views [10:33:56] [CLEANUP] Removed 0 feed scroll views [10:33:56] [CLEANUP] Removed 0 status labels [10:33:56] [CLEANUP] Reset agent query state [10:33:56] [CLEANUP] Updated page indicator [10:33:56] [CLEANUP] Rebuilt video layout [10:33:56] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:56] [CLEANUP] ======================================== [10:33:56] [SERVER] Starting reconnect polling (5s interval) [10:33:56] [SCROLL_END_DECEL] messagesTable offsetY=5490, insetTop=0, pendingVelocityY=0.0 [10:33:58] [CLIENT_SIG] Typing stop from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:58] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:33:58] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:33:58] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:33:58] HELLO → sent (cached token, role=query) [10:33:58] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:33:58] [WS] Query connection failed - cleaning up all agent connections and views [10:33:58] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:33:58] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:33:58] [CLEANUP] ======================================== [10:33:58] [CLEANUP] Cleaning up all agent connections and views [10:33:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:58] [CLEANUP] Stopped and removed 0 video connections [10:33:58] [CLEANUP] Removed 0 video views [10:33:58] [CLEANUP] Removed 0 feed scroll views [10:33:58] [CLEANUP] Removed 0 status labels [10:33:58] [CLEANUP] Reset agent query state [10:33:58] [CLEANUP] Updated page indicator [10:33:58] [CLEANUP] Rebuilt video layout [10:33:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:58] [CLEANUP] ======================================== [10:33:58] [SERVER] Starting reconnect polling (5s interval) [10:33:58] [CLEANUP] ======================================== [10:33:58] [CLEANUP] Cleaning up all agent connections and views [10:33:58] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:33:58] [CLEANUP] Stopped and removed 0 video connections [10:33:58] [CLEANUP] Removed 0 video views [10:33:58] [CLEANUP] Removed 0 feed scroll views [10:33:58] [CLEANUP] Removed 0 status labels [10:33:58] [CLEANUP] Reset agent query state [10:33:58] [CLEANUP] Updated page indicator [10:33:58] [CLEANUP] Rebuilt video layout [10:33:58] [CLEANUP] ✅ All agent connections and views cleaned up [10:33:58] [CLEANUP] ======================================== [10:33:58] [SERVER] Starting reconnect polling (5s interval) [10:33:58] [CLIENT_SIG] Typing start from: Esra (EDAD55A1-003F-415D-AA60-672B34B504FE) [10:33:59] [LOG] Long press on chat icon detected! Triggering log upload... [10:33:59] [LOG-PROMPT] ====== promptForLogDescription START ====== [10:33:59] [LOG-PROMPT] presentedVC=nil [10:33:59] [LOG-PROMPT] isViewLoaded=true, view.window=YES [10:33:59] [LOG-PROMPT] inputField.isFirstResponder=true [10:33:59] [LOG-PROMPT] allowKeyboardDismiss BEFORE=false [10:33:59] [LOG-PROMPT] allowKeyboardDismiss set to TRUE [10:33:59] [LOG-KB] textViewShouldEndEditing: isInputField=true, allowKeyboardDismiss=true, returning=true, textView= half 223pt [10:34:00] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:34:00] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:34:00] [SCROLL] 💓 alive, visible=59...65, rows=69, estHeight=0.0, heightCalls=8 [10:34:00] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:34:00] HELLO → sent (cached token, role=query) [10:34:00] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:34:00] [WS] Query connection failed - cleaning up all agent connections and views [10:34:00] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:34:00] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:34:00] [CLEANUP] ======================================== [10:34:00] [CLEANUP] Cleaning up all agent connections and views [10:34:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:00] [CLEANUP] Stopped and removed 0 video connections [10:34:00] [CLEANUP] Removed 0 video views [10:34:00] [CLEANUP] Removed 0 feed scroll views [10:34:00] [CLEANUP] Removed 0 status labels [10:34:00] [CLEANUP] Reset agent query state [10:34:00] [CLEANUP] Updated page indicator [10:34:00] [CLEANUP] Rebuilt video layout [10:34:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:00] [CLEANUP] ======================================== [10:34:00] [SERVER] Starting reconnect polling (5s interval) [10:34:00] [CLEANUP] ======================================== [10:34:00] [CLEANUP] Cleaning up all agent connections and views [10:34:00] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:00] [CLEANUP] Stopped and removed 0 video connections [10:34:00] [CLEANUP] Removed 0 video views [10:34:00] [CLEANUP] Removed 0 feed scroll views [10:34:00] [CLEANUP] Removed 0 status labels [10:34:00] [CLEANUP] Reset agent query state [10:34:00] [CLEANUP] Updated page indicator [10:34:00] [CLEANUP] Rebuilt video layout [10:34:00] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:00] [CLEANUP] ======================================== [10:34:00] [SERVER] Starting reconnect polling (5s interval) [10:34:00] [SCROLL_END_DECEL] messagesTable offsetY=5490, insetTop=0, pendingVelocityY=0.0 [10:34:01] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:34:01] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:34:01] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:34:01] HELLO → sent (cached token, role=query) [10:34:01] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:34:01] [WS] Query connection failed - cleaning up all agent connections and views [10:34:01] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:34:01] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:34:01] [CLEANUP] ======================================== [10:34:01] [CLEANUP] Cleaning up all agent connections and views [10:34:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:01] [CLEANUP] Stopped and removed 0 video connections [10:34:01] [CLEANUP] Removed 0 video views [10:34:01] [CLEANUP] Removed 0 feed scroll views [10:34:01] [CLEANUP] Removed 0 status labels [10:34:01] [CLEANUP] Reset agent query state [10:34:01] [CLEANUP] Updated page indicator [10:34:01] [CLEANUP] Rebuilt video layout [10:34:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:01] [CLEANUP] ======================================== [10:34:01] [SERVER] Starting reconnect polling (5s interval) [10:34:01] [CLEANUP] ======================================== [10:34:01] [CLEANUP] Cleaning up all agent connections and views [10:34:01] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:01] [CLEANUP] Stopped and removed 0 video connections [10:34:01] [CLEANUP] Removed 0 video views [10:34:01] [CLEANUP] Removed 0 feed scroll views [10:34:01] [CLEANUP] Removed 0 status labels [10:34:01] [CLEANUP] Reset agent query state [10:34:01] [CLEANUP] Updated page indicator [10:34:01] [CLEANUP] Rebuilt video layout [10:34:01] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:01] [CLEANUP] ======================================== [10:34:01] [SERVER] Starting reconnect polling (5s interval) [10:34:03] [SCROLL] 💓 alive, visible=58...68, rows=69, estHeight=0.0, heightCalls=5 [10:34:03] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:34:03] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:34:03] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:34:03] HELLO → sent (cached token, role=query) [10:34:03] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:34:03] [WS] Query connection failed - cleaning up all agent connections and views [10:34:03] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:34:03] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:34:03] [CLEANUP] ======================================== [10:34:03] [CLEANUP] Cleaning up all agent connections and views [10:34:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:03] [CLEANUP] Stopped and removed 0 video connections [10:34:03] [CLEANUP] Removed 0 video views [10:34:03] [CLEANUP] Removed 0 feed scroll views [10:34:03] [CLEANUP] Removed 0 status labels [10:34:03] [CLEANUP] Reset agent query state [10:34:03] [CLEANUP] Updated page indicator [10:34:03] [CLEANUP] Rebuilt video layout [10:34:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:03] [CLEANUP] ======================================== [10:34:03] [SERVER] Starting reconnect polling (5s interval) [10:34:03] [CLEANUP] ======================================== [10:34:03] [CLEANUP] Cleaning up all agent connections and views [10:34:03] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:03] [CLEANUP] Stopped and removed 0 video connections [10:34:03] [CLEANUP] Removed 0 video views [10:34:03] [CLEANUP] Removed 0 feed scroll views [10:34:03] [CLEANUP] Removed 0 status labels [10:34:03] [CLEANUP] Reset agent query state [10:34:03] [CLEANUP] Updated page indicator [10:34:03] [CLEANUP] Rebuilt video layout [10:34:03] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:03] [CLEANUP] ======================================== [10:34:03] [SERVER] Starting reconnect polling (5s interval) [10:34:03] [LOG] Upload tapped with description: 'Notification2' [10:34:03] [LOG] Uploading log as '2026-04-23-10-34-notification2-Laurent.log' (1.4 MB) to server... [10:34:05] [LOG] Upload HTTP status: 200 [10:34:05] [LOG] Upload successful: 2026-04-23-10-34-notification2-Laurent.log [10:34:05] [WS] Creating new WebSocket - isQueryOnly=true, connectionStr=iosILUIWU [10:34:05] [WS] Opening session at ws://crivello.dyndns.org:8081/ [10:34:05] [WS] WebSocket ACTUALLY OPENED - isQueryOnly=true, connectionStr=iosILUIWU [10:34:05] HELLO → sent (cached token, role=query) [10:34:05] [WS] Connection failed: The operation couldn’t be completed. Socket is not connected [10:34:05] [WS] Query connection failed - cleaning up all agent connections and views [10:34:05] [WS] WebSocket ACTUALLY CLOSED - isQueryOnly=true, connectionStr=iosILUIWU, closeCode=1000 [10:34:05] [WS] Query connection to iosILUIWU closed - cleaning up all agent connections and views [10:34:05] [CLEANUP] ======================================== [10:34:05] [CLEANUP] Cleaning up all agent connections and views [10:34:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:05] [CLEANUP] Stopped and removed 0 video connections [10:34:05] [CLEANUP] Removed 0 video views [10:34:05] [CLEANUP] Removed 0 feed scroll views [10:34:05] [CLEANUP] Removed 0 status labels [10:34:05] [CLEANUP] Reset agent query state [10:34:05] [CLEANUP] Updated page indicator [10:34:05] [CLEANUP] Rebuilt video layout [10:34:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:05] [CLEANUP] ======================================== [10:34:05] [SERVER] Starting reconnect polling (5s interval) [10:34:05] [CLEANUP] ======================================== [10:34:05] [CLEANUP] Cleaning up all agent connections and views [10:34:05] [CLEANUP] Current state: vccs=0, videoViews=0, feedScrollViews=0 [10:34:05] [CLEANUP] Stopped and removed 0 video connections [10:34:05] [CLEANUP] Removed 0 video views [10:34:05] [CLEANUP] Removed 0 feed scroll views [10:34:05] [CLEANUP] Removed 0 status labels [10:34:05] [CLEANUP] Reset agent query state [10:34:05] [CLEANUP] Updated page indicator [10:34:05] [CLEANUP] Rebuilt video layout [10:34:05] [CLEANUP] ✅ All agent connections and views cleaned up [10:34:05] [CLEANUP] ======================================== [10:34:05] [SERVER] Starting reconnect polling (5s interval) [10:34:06] [SCROLL] 💓 alive, visible=58...64, rows=69, estHeight=0.0, heightCalls=6 [10:34:06] [SCROLL_BTN] Showing button - 310pt from bottom > half 223pt