Flagsmith / Flagsmith/flagsmith-nodejs-client

[sdk/local-evaluation] Duplicate identity override entries silently drop feature overrides

未关闭
#267 5 条评论 0 个 reaction 已指派 0 人 在 GitHub 查看
主要语言
TypeScript
星标
30
派生
26
平均合并
11 分钟
30 天内合并 PR
5

描述

## Problem

When an environment document returned by the Flagsmith API contains more than one entry in `identity_overrides` sharing the same `identifier`, the SDK keeps only the last entry for that identifier during local evaluation. Any `identity_features` defined on the earlier entries are discarded, so the corresponding flags fall back to the environment default instead of the configured override.

For example, given an environment payload like:

```json
{
"identity_overrides": [
{
"identifier": "multi-override-id",
"identity_features": [
{
"feature": { "name": "some_feature" },
"feature_state_value": "override-from-first-entry",
"enabled": false
}
]
},
{
"identifier": "multi-override-id",
"identity_features": [
{
"feature": { "name": "mv_feature" },
"feature_state_value": "override-from-second-entry",
"enabled": true
}
]
}
]
}
```

Calling `getIdentityFlags('multi-override-id')` with local evaluation enabled returns the override for `mv_feature` only. `some_feature` resolves to its environment default, as if the first entry never existed.

## Impact

Any identifier whose overrides arrive split across multiple `identity_overrides` entries gets the wrong flag values during server-side local evaluation. The breakage is silent (no warning, no error) and deterministic for a given payload, so affected identifiers stay broken on every request until the environment payload changes shape.

## Reproduction

1. Use an environment whose `identity_overrides` array contains two entries with the same `identifier`, each carrying a different feature in `identity_features` (e.g. entry A overrides `some_feature`, entry B overrides `mv_feature`).
2. Initialise the SDK with `enableLocalEvaluation: true` and call `getIdentityFlags('')`.
3. Observed: only the features from the last entry are applied. `some_feature` resolves to its environment default instead of `"override-from-first-entry"`.
4. Expected: both `some_feature` and `mv_feature` resolve to their respective override values and enabled states.

贡献指南

打开贡献指南

调研方向

从 getIdentityFlags 使用的本地评估路径开始,跟踪针对一个标识符的重复 identity_overrides 条目是如何表示的。使用分开的 some_feature 和 mv_feature 条目复现 payload,然后验证返回的是两个 override 及其启用状态,而不是回退到环境默认值。

由索引模型根据 Issue 内容生成。

评估

技术栈
nodejs, typescript
领域
backend
Issue 类型
缺陷
难度
3/5
预计耗时
1-2 天
活跃度
冷清
描述清晰度
描述清楚
新手友好度
68/100

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。