flagKey. The product name is control point. Do not invent controlPointKey.
Why it exists
Operators reason about a release decision, not “a boolean in a flag console.” Evaluation is still a typed getter so call sites stay small and portable. The rename in the Node/Python/Web clients is additive:client.flags remains the same object as client.controlPoints and is not scheduled for removal in 2.x.
When to use it
Use a control point whenever your process must choose a value that FireWeave (or a test fixture) owns:- Gate a new code path (
getBooleanValue/ language equivalent) - Pick a string variant, numeric threshold, or JSON payload
- Inspect a full Decision when you need
reasonor error fields
fw.isOn. That symbol is not in the SDK.
How it relates
Missing
targetingKey on a backend evaluate returns your default with TARGETING_KEY_MISSING (InvalidContext), unless you opt into requireTargetingKey. See Targeting.Evaluation types by language
These are the types the SDKs actually implement. There is no cross-languageint that every binding shares.
API
Evaluation never throws. Failures become a Decision (or a typed getter that returns your default) withreason: ERROR. If a flag getter raised, that is a bug.
Parameters (all languages)
Web
evaluateSync does not take per-call sendExposure. Emission is a runtime config flag (sendExposure, default false).
Return value
- Typed getters return the resolved value or your default.
evaluate/get_details/Flags().Evaluatereturn a Decision:flagKey,value(or your default), optionalvariant,reason, and error fields on failure.
Failure behavior
Full taxonomy: Errors.
The Decision
Every native evaluate produces a canonical Decision:
Reasons you will see from this SDK:
SPLIT is a Decision reason, not a ramp controller. The SDK does not advance percentages.
What it looks like
- Node
- Python
- Go
- Java
- Web
Namespace:
client.controlPoints (alias client.flags — same object). Async.flagKey. See OpenFeature.