Posts are marked as read when you interact with them (vote/save/reply/etc) or tap them to view the comments.
We have an issue open for marking read on scroll. The trouble with that feature is that the API only supports marking a single post as read at a time, so we either have to fake it locally or spam the API. The former is problematic because it either introduces what amounts to a memory leak as we track every read post or results in posts being displayed as read and then popping back up when the cache evicts that info. The latter is obviously unacceptable and constitutes extremely poor API citizenship.
We're currently working with the Lemmy devs to get a batch mark read endpoint, which will let us implement this feature without either of those problems.