Flagsmith / Flagsmith/flagsmith-nodejs-client
[sdk/local-evaluation] Duplicate identity override entries silently drop feature overrides
- 主要语言
- 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