mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-09 08:04:45 +00:00
Damus-inspired content filter that collapses notes abusing `t` hashtag tags into a compact reveal-on-click placeholder. Ships default ON with a threshold of 5 (adjustable 1–20 in Settings → Content Filters, or off). Scope - Pure check (`HashtagSpamCheck`) + settings interface (`HashtagSpamSettings`) live in `commons/moderation/`, callable by Desktop, `amy` CLI, and (future) Android. - JVM-backed `PreferencesHashtagSpamSettings` writes to the shared `java.util.prefs` node `com/vitorpamplona/amethyst/filters`, so `amy` and Desktop observe the same value automatically. - `CollapsedSpamNote` placeholder in `commons/ui/note/` takes only primitive scalars so Android can adopt it without touching commons. - Desktop wraps every `NoteCard` call site (FeedNoteCard, QuotedNoteEmbed, BookmarksScreen, 5 SearchResultsList sites) with a shared `SpamCheckedNoteRender` helper. Thread root notes auto-expand via `forceReveal=true`; replies still respect the filter. Exemptions - Long-form articles (kind 30023) - Authors in the follow list plus self - Repost wrappers check the inner event's tags via precomputed `note.replyTo`, falling back to `containedPost()` Search UX fixes bundled in - Removed the `#hashtag` → "Direct lookup" card. `QueryParser` already extracts `#xxx` into the query's hashtag filter, so typing `#bitcoin` now goes straight to filtered results. - Search-result rows now trigger metadata loading via `subscriptionsCoordinator.loadMetadataBatched(authors)` and observe each user's metadata flow via a new `rememberDisplayData` helper, so display names + avatars refresh when kind-0 arrives from index relays. Same helper reused in Bookmarks. Tests + docs - 19 unit tests (check × 10, displayed-event unwrap × 4, prefs × 5), all green. - Manual testing sheet with 16 scenarios at `desktopApp/plans/2026-06-29-hashtag-spam-filter-manual-testing-sheet.md`. - Plan at `docs/plans/2026-06-29-feat-desktop-hashtag-spam-filter-plan.md`. - Cross-client desktop feature backlog reference at `desktopApp/plans/_desktop-feature-backlog.md`.