From 9c0c1202d8c9fd669735fa4ee9d1adf69c4cf9e0 Mon Sep 17 00:00:00 2001 From: idoshamun <1993245+idoshamun@users.noreply.github.com> Date: Thu, 9 Jul 2026 12:59:14 +0000 Subject: [PATCH] fix(achievements): follower_gain progress uses absolute follower count The Prophet/Shepherd achievements (follower_gain) were being incremented by +1 on every follow event and never decremented on unfollow, causing progress to drift far above a user's real follower count (e.g. 99/100 shown for a user with 15 followers). - Add AchievementEventType.FollowerGain to absoluteValueEventTypes so checkAchievementProgress sets progress to the true follower count (already computed and passed as currentValue) instead of incrementing. - Align the live follower count filter to status IN (follow, subscribed) to match the retroactive backfill handler. Fixes ENG-1796 --- src/common/achievement/index.ts | 1 + src/workers/cdc/primary.ts | 7 +++++-- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/src/common/achievement/index.ts b/src/common/achievement/index.ts index 0ad97e829a..d37b1b51ec 100644 --- a/src/common/achievement/index.ts +++ b/src/common/achievement/index.ts @@ -269,6 +269,7 @@ export async function checkAchievementProgress( } const absoluteValueEventTypes: AchievementEventType[] = [ + AchievementEventType.FollowerGain, AchievementEventType.ReferralCount, AchievementEventType.ReputationGain, AchievementEventType.ReadingStreak, diff --git a/src/workers/cdc/primary.ts b/src/workers/cdc/primary.ts index f562db75b2..409b0644a1 100644 --- a/src/workers/cdc/primary.ts +++ b/src/workers/cdc/primary.ts @@ -108,7 +108,7 @@ import { triggerTypedEvent, } from '../../common'; import { ChangeMessage, ChangeObject, CoresRole, UserVote } from '../../types'; -import { DataSource, IsNull } from 'typeorm'; +import { DataSource, In, IsNull } from 'typeorm'; import { FastifyBaseLogger } from 'fastify'; import { updateAlerts } from '../../schema/alerts'; import { CommentReport } from '../../entity/CommentReport'; @@ -2178,7 +2178,10 @@ const onContentPreferenceChange = async ( where: { referenceId: contentPreferenceUser.referenceId, type: ContentPreferenceType.User, - status: ContentPreferenceStatus.Follow, + status: In([ + ContentPreferenceStatus.Follow, + ContentPreferenceStatus.Subscribed, + ]), }, }); await checkAchievementProgress(