c63ace1d9c
Rewrite FeedScreen from inline EventCollectionState + 8 rememberSubscription() calls to cache-centric DesktopFeedViewModel pattern: - ViewModel keyed on feedMode with DisposableEffect cleanup (destroy()) - FeedState pattern matching (Loading/Loaded/Empty/Error) - FeedNoteCard takes Note instead of Event, reads counts from Note.flowSet - DisposableEffect for note.clearFlow() cleanup in LazyColumn - DisposableEffect for Coordinator interaction subscription lifecycle - LaunchedEffect for rate-limited metadata loading via Coordinator - Extract FeedHeader into separate composable - Add destroy() to DesktopFeedViewModel (ViewModel.clear() is internal in KMP) - Update UserProfileScreen to look up Note from cache for FeedNoteCard Removes ~350 lines of inline state management (EventCollectionState, zapsByEvent, reactionIdsByEvent, replyIdsByEvent, repostIdsByEvent, followedUsers, bookmarkList, 8 rememberSubscription blocks). Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>