Patience alone will not solve the problem
After the Android app (Joplin 2.14.9) on my S10 still hadn't finished the very long sync process this morning, I discovered a message in the mobile-log.log that prompted me to quit and restart the app.
I suspect that the session / connection to the Joplin cloud expired without the Android app reacting accordingly. I can imagine that this behaviour of the Android app could / has led to inconsistent / incorrect data in the database on the Android device.
06-13T03:14:54: JoplinServerApi: "curl -v -X GET -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://api.joplincloud.com/api/share_users'"
06-13T03:14:54: JoplinServerApi: "Code:", "403"
06-13T03:14:54: JoplinServerApi: "Error: Your session has expired. Please login again.
Code: 403
Error: Your session has expired. Please login again.
at construct (native)
at Wrapper (address at index.android.bundle:1:2619599)
at construct (native)
at _createSuperInternal (address at index.android.bundle:1:2618675)
at call (native)
at JoplinError (address at index.android.bundle:1:2619053)
at newError (address at index.android.bundle:1:2819444)
at ?anon_0_ (address at index.android.bundle:1:2819043)
at next (native)
at fulfilled (address at index.android.bundle:1:2815879)
at tryCallOne (/root/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/5p1x2e66/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:53:16)
at anonymous (/root/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/5p1x2e66/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:139:27)
at apply (native)
at anonymous (address at index.android.bundle:1:219452)
at _callTimer (address at index.android.bundle:1:218401)
at _callReactNativeMicrotasksPass (address at index.android.bundle:1:218565)
at callReactNativeMicrotasks (address at index.android.bundle:1:220540)
at __callReactNativeMicrotasks (address at index.android.bundle:1:121846)
at anonymous (address at index.android.bundle:1:120939)
at __guard (address at index.android.bundle:1:121687)
at flushedQueue (address at index.android.bundle:1:120850)
at invokeCallbackAndReturnFlushedQueue (address at index.android.bundle:1:120793)"
06-13T02:00:58: JoplinServerApi: "Code:", "403"
06-13T02:00:58: JoplinServerApi: "Error: Your session has expired. Please login again.
Code: 403
Error: Your session has expired. Please login again.
at construct (native)
at Wrapper (address at index.android.bundle:1:2619599)
at construct (native)
at _createSuperInternal (address at index.android.bundle:1:2618675)
at call (native)
at JoplinError (address at index.android.bundle:1:2619053)
at newError (address at index.android.bundle:1:2819444)
at ?anon_0_ (address at index.android.bundle:1:2819043)
at next (native)
at fulfilled (address at index.android.bundle:1:2815879)
at tryCallOne (/root/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/5p1x2e66/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:53:16)
at anonymous (/root/react-native/ReactAndroid/hermes-engine/.cxx/MinSizeRel/5p1x2e66/arm64-v8a/lib/InternalBytecode/InternalBytecode.js:139:27)
at apply (native)
at anonymous (address at index.android.bundle:1:219452)
at _callTimer (address at index.android.bundle:1:218401)
at _callReactNativeMicrotasksPass (address at index.android.bundle:1:218565)
at callReactNativeMicrotasks (address at index.android.bundle:1:220540)
at __callReactNativeMicrotasks (address at index.android.bundle:1:121846)
at anonymous (address at index.android.bundle:1:120939)
at __guard (address at index.android.bundle:1:121687)
at flushedQueue (address at index.android.bundle:1:120850)
at invokeCallbackAndReturnFlushedQueue (address at index.android.bundle:1:120793)"
06-13T02:00:58: JoplinServerApi: "curl -v -X GET -H "X-API-AUTH: ******" -H "X-API-MIN-VERSION: 2.6.0" 'https://api.joplincloud.com/api/locks'"