From ecb9f67c990c6ec3fbdc430825dd25502901f310 Mon Sep 17 00:00:00 2001 From: saravanakumardb1 Date: Mon, 2 Mar 2026 23:56:42 -0800 Subject: [PATCH] fix(broadcasts): Fix percentage rollout bucketing logic - Use userId only as seed instead of userId + percentage - Prevents users from being re-bucketed when rollout % increases - Ensures deterministic assignment for phased rollouts --- .../platform-service/src/modules/broadcasts/targeting.ts | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/services/platform-service/src/modules/broadcasts/targeting.ts b/services/platform-service/src/modules/broadcasts/targeting.ts index c724463d..a6655632 100644 --- a/services/platform-service/src/modules/broadcasts/targeting.ts +++ b/services/platform-service/src/modules/broadcasts/targeting.ts @@ -79,8 +79,9 @@ export function evaluateTarget( // Percentage rollout (FNV-1a hash for deterministic bucketing) if (target.percentageRollout !== undefined && target.percentageRollout < 100) { - // Hash userId + broadcast seed for consistent assignment - const hash = fnv1a32(`${context.userId}:${target.percentageRollout}`); + // Use userId only as seed for consistent bucketing + // This ensures when rollout % increases, same users stay included + const hash = fnv1a32(context.userId); const bucket = hash % 100; if (bucket >= target.percentageRollout) { return false;