MV variant bucketing is salted on the feature-state pk: FeatureState.get_multivariate_feature_state_value hashes [self.id, identity_hash_key] (api/features/models.py:771). Any flow that creates a new feature state changes the salt, so every identity re-buckets across variants.
Two triggers:
- Enabling versioning
- Editing MV weights under v2
Repro: v2 env, MV flag 50/50 → 60/40: some identities that received variant_1 under 50% switch to control, despite variant_1's allocation increasing.
MV variant bucketing is salted on the feature-state pk:
FeatureState.get_multivariate_feature_state_valuehashes[self.id, identity_hash_key](api/features/models.py:771). Any flow that creates a new feature state changes the salt, so every identity re-buckets across variants.Two triggers:
Repro: v2 env, MV flag 50/50 → 60/40: some identities that received
variant_1under 50% switch to control, despite variant_1's allocation increasing.