On web, every edit ended in "Sync needs attention / The cloud could not be reached" while the library stayed connected. The op queue checks convexConnectionSnapshotProvider before sending, and that provider read ConvexClient.isConnected once and kept the value: on web the socket is still opening when it is first read, so it said offline for the life of the page and no op was ever sent. The snapshot is now the latest value of the connection stream, so it follows every change. The failure was invisible, so op queue and media queue send failures now report through AppErrorReporter (a warning, echoed to the browser console on web). Their text goes through a new redactSyncDiagnosticText, which strips URL queries (a presigned upload URL carries its signature there) and token assignments; media logs, which held full presigned URLs, use it too. tool/check_convex_web_binding.mjs loads web/convex.browser.bundle.js and checks every external member of the Dart web binding exists on the object it binds. It runs in the linux CI job; it fails on the pre-#185 binding (_JsConvexClient.clearAuth) and passes now. Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
9 files changedLine totals unavailable