OK, I think I found the problem, and it was my doing.
I was syncing the clients to my cloudKVS server running on my Windows laptop, which worked well.
Then I pointed those same clients at the same server app running on a VPS using a new (empty) database. I assumed that doing a
refreshUser would sync everything up between the server and the clients.
However, it seems the sync is not a two-way "diff" style operation - it seems more like the clients are telling the server to "send me anything new/changed". But the new database is empty, so it has nothing to send them. And the server stays empty, because it only gets new data when
additem is called. Hence the problem I reported above.
Once I figured this out by looking at the (remarkably simple) server code, I did the right thing and restarted with fresh empty databases on the server AND the clients. Lo and behold, everything now works upstream and downstream.
Note to self: even in a test environment, keep the data tidy.