I looked into this issue with the imapsync flags behavior.
By default, imapsync resyncs all flags (including \Seen) on every run, even for messages that were already transferred before. This is documented behavior, not a bug in imapsync itself.
In the syncctl script used by ns8-imapsync, --noresyncflags is only applied when FOLDER_INBOX is set. In the reported ticket, FOLDER_INBOX is empty in both .env files. So --noresyncflags is never used here.
The cron for these two tasks runs every 3 minutes. If the user only reads mail through WebTop, and never logs into the source mailbox directly, the source side stays \Unseen forever. Every 3 minutes, imapsync pulls the flags from the source again and overwrites the \Seen flag set in WebTop. That’s why messages keep going back to unread.
First thing to try
Could you enable FOLDER_INBOX (only inbox) on this task and see if it fixes the behavior? This turns on --search1=UNSEEN --setflag1=Seen --noresyncflags, which matches this use case well: only new unseen messages get synced, they get marked Seen on the source, and flags are never touched again after that.
Also, one question @fausp : since when does this happen? Did it start right after setup, or after a certain period of use? That would help confirm whether this is really about the source mailbox never being touched, or something else changed recently.
Second point, about a possible PR
--noresyncflags and FOLDER_INBOX are currently tied together in the code, but they solve two different problems. Some setups may want FOLDER_INBOX filtering without --noresyncflags, or the other way around, like this ticket.
Before writing a PR, I think we need to answer one question: should --noresyncflags be applied all the time by default, or only for tasks that run on a short, repeated cron schedule (like every 3 minutes)? A one-time or occasional sync probably still benefits from flag resync, since flags might genuinely change on the source between runs. But a very frequent cron on a source that nobody reads directly is exactly the case where flags should stop being resynced after the first transfer.
Happy to open an issue or draft a PR once we agree on that behavior.