ActivityFeedItemDTO gains nullable commentId and annotationId fields. DashboardService.getActivity forwards commentId from the projection and batch-resolves annotationId via the new CommentService.findAnnotationIdsByIds lookup. Both remain null for non-comment kinds, so the bulk lookup is skipped entirely when the feed has no comment rows. Refs #300. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>