“Receive Only” means that the device doesn’t make the changes to files made on this device available to the swarm. That, and only that.
So, say you have your setup. Device A adds files
baz while B and C are online, and D is offline. B and C become aware of this and start syncing: B gets
foo, C gets
bar, and then A gets offline so they don’t get
baz. But now B is aware that there should be
baz, and C has exactly the copy of
bar B needs, so B gets it from C. However,
foo gets changed on B, and
qux gets added. B doesn’t send the changes it made to
foo, neither it tells anyone about
qux, but B no longer has the version of
foo that C needs, so C can’t get
foo from B.
Now D comes online. It gets
bar from either B or C, and becomes aware of
baz that neither of them has (well, B does, but it’s the wrong version), so D knows (and shows you in the interface) that it’s not completely synced.
B and C go offline, A comes online, D gets
baz and is now completely synced.
A goes offline again, B and C go online. They now know (from D) that they can get correct versions of
baz, and C does so; now C is in sync with the swarm, too. B gets
baz, too, but doesn’t get
foo, because it has a newer local version.
Now B shows you that it has local changes (new
qux that it never told anyone else about). If you (the user) press the “Revert local changes” button on B, it will re-download the “canonical” version of
foo from anybody who has it, and remove
qux, so that it becomes in sync with the swarm, too.