The thread-open divider missed replies revealed after first open: the
open-time read snapshot captured only the initially visible set, so a
reply expanded later was both marked read and absent from the snapshot,
collapsing the divider. Grow the snapshot per reveal — each reply's read
state is captured the first render it becomes visible, before the
mark-read effect — so the divider anchors to what was unread when each
reply first appeared.
The 05/07/14 E2E cases asserted the deleted whole-subtree-on-open
contract (single expand clearing a 2-levels-deep badge); rewritten to
the v3 direct-children-only contract, with comments updated to drop the
removed machinery. AppShell trimmed under the 1000-line gate with no
logic change; MessageThreadPanel carries an approved size override for
the onMarkRead prop-pair completion.
Co-authored-by: Will Pfleger <pfleger.will@gmail.com>
Signed-off-by: Will Pfleger <pfleger.will@gmail.com>