{ "publishedAt": "2026-09-01T18:35:43+08:00", "issue": "message badge stayed visible after conversation was read", "rootCause": "legacy client compared a read receipt against the newest conversation sequence, including the current user outgoing messages, and discarded a valid receipt", "backendRelease": "/www/server/xingyu-im/releases/read-badge-20260901-183536", "backendBackup": "/www/backup/xingyu-read-badge-20260901-183536", "backendSha256": "e8344e81cc828e6817bc7c232a261884fbb5d7e8123420da121ede908502329e", "changedBackendFiles": [ "backend/internal/app/im.go" ], "databaseMigrationsApplied": [], "businessDataWrites": false, "productionReadStateCheck": { "userId": 41, "conversationId": 3, "storedReadSeq": 18, "ackReadSeq": 18, "unread": 0 }, "h5Release": "/www/wwwroot/xingyu-h5/releases/20260901-183142", "h5Backup": "/www/backup/xingyu-h5-publish-20260901-183143", "h5ArchiveSha256": "1bb1244ed4d8eee8364586da24d75977819c344f31f92c9eb274e15027f1fab4", "h5Asset": "/app/assets/index-NcP3DyNC.js", "h5AssetSha256": "2637479d3d937576eeb7a79154f725011de904c9c825a8e5568f757e004742b0", "remoteMatchesLocal": true, "healthStatus": 200, "mobileIMTests": "25 passed", "mobileNavigationTests": "6 passed", "typeCheck": "passed", "backendTests": "passed", "mysqlWebSocketIntegration": "passed", "appBuild": "passed", "h5Build": "passed", "nativeOutput": "D:\\web\\age\\im\\mobile\\dist\\build\\app", "legacyClientCompatibility": "READ_ACK covers later outgoing-only sequences when authoritative unread is zero" }