Skip to content

[APP-3850] Remove the Notifications v2 gate and the v1 screen - #12367

Draft
mozzius wants to merge 3 commits into
samuel/app-3666-compact-quote-embedfrom
samuel/app-3850-remove-notifications-v1
Draft

mozzius wants to merge 3 commits into
samuel/app-3666-compact-quote-embedfrom
samuel/app-3850-remove-notifications-v1

Conversation

@mozzius

@mozzius mozzius commented Nov 9, 2026 •

Copy link
Copy Markdown
Member

Fixes APP-3850. Notifications v2 is now the only Notifications screen. This removes the notifications_v2:enable gate and deletes the original (v1) screen. Stacked on #12278 (compact quotes in Notifications v2).

The gate

  • NotificationsScreen renders the v2 screen directly. NewNotificationsScreen is gone, and the screen's testID is now notificationsScreen. The e2e flows already used v2's IDs.
  • The Beta features entry ("Redesigned notifications") and the header's beta tag are gone.
  • isOnForBetaUser stays. Its test now runs against moderation_inbox:enable.

v1 code removed

  • The v1 screen (view/screens/Notifications.tsx), NotificationFeed and NotificationFeedItem.
  • Its feed query, state/queries/notifications/feed.ts. Post and profile shadows and the post thread placeholder now read only the grouped notifications cache.
  • What only v1 used: useAnimatedValue, StarterPackCard.Notification (plus Card's noIcon/noDescription), and the v1 rows in the moderation playground. The playground keeps its v2 "every kind" section.

Unread badge

The unread poller still uses listNotifications for the badges and the Refresh pill. It used to build v1's grouped feed page so the v1 feed could reuse it as its first page. Now:

  • It counts a flat list of notifications, filtered by the same moderation rules. Grouping and fetching subject posts are gone. The count is the same, since v1 counted every notification in a group anyway.
  • getCachedUnreadPage, invalidateCachedUnreadPage and checkUnread({invalidate}) are gone. checkUnread is internal to the provider now, since nothing outside it called it.
  • markAllRead now requires seenAt. Its fallback was the last check's sync time, and the v2 screen always passes seenAt.
  • Push notifications no longer invalidate the v1 feed. Opening one still emits pushNotificationOpened, which v2 listens for.

notifications:bundleExpand keeps v1's kind names (post-like, …) so the metric stays comparable.

After merge

The notifications_v2:enable flag can be archived in GrowthBook.

Testing

  • pnpm typecheck, pnpm lint and the notifications, post thread and feature tests pass.
  • Not checked on a device yet.

🤖 Generated with Claude Code

mozzius and others added 3 commits November 9, 2026 20:04
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@mozzius
mozzius added this pull request to stack #12368 November 9, 2026 18:05
@linear-code

linear-code Bot commented Nov 9, 2026

Copy link
Copy Markdown

APP-3850

@mozzius mozzius changed the title samuel/app 3850 remove notifications v1 [APP-3850] Remove the Notifications v2 gate and the v1 screen Nov 9, 2026
@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor

The Pull Request introduced native fingerprint changes against the base commit.


Generated by PR labeler 🤖

@github-actions

github-actions Bot commented Nov 9, 2026

Copy link
Copy Markdown
Contributor
Size Old size New size Diff
Uncompressed 9.76 MB 9.71 MB -56.16 KB (-0.56%)
Gzip 2.86 MB 2.84 MB -15.80 KB (-0.54%)

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant