f9f30564fe
The profile view was walking the raw post list and showing pure reactions,
boosts and poll votes as if they were first-class posts — visible as
"Reacted 😊" etc. rows. The timeline already filters these since they are
protocol artefacts rather than authored content; the profile should behave
the same way. The protocol spec is silent on profile filtering (confirmed
by re-reading README.org and the org-social.el reference lib) so this is a
UX choice, but consistency with the timeline is the right default.
- OrgSocialPost.isPureInteraction: single predicate covering
REPLY_TO+MOOD, INCLUDE, and REPLY_TO+POLL_OPTION body-less posts;
migration posts kept because their badge carries the content.
- TimelineFetcher.shouldInclude uses the helper.
- ProfileView's Posts section filters with it.
Separately: RootView now calls RelayClient.registerFeed on launch for the
configured feed URL, keyed by a UserDefaults flag per (relay, feed) pair so
it runs once. A brand-new account otherwise wouldn't appear on the relay
until someone followed it (daily follow-crawl cron) or it hit 404 in
NotificationsViewModel — up to 24h of silence. With self-register the scan
cron picks it up within ~60s, so interactions and notifications start
flowing immediately.