Skip to content

blog: a percentage is not a rollout - #1436

Open
1991santhu wants to merge 2 commits into
open-feature:mainfrom
1991santhu:blog/percentage-is-not-a-rollout
Open

blog: a percentage is not a rollout#1436
1991santhu wants to merge 2 commits into
open-feature:mainfrom
1991santhu:blog/percentage-is-not-a-rollout

Conversation

@1991santhu

Copy link
Copy Markdown

Adds a blog post on the boundary between what the evaluation API standardizes and what a control plane owns, and on where hooks stop being useful for rollout control.

What it argues

  • Fractional evaluation is named in the glossary, but the spec does not require providers to implement it and does not standardize a bucketing algorithm. flagd's fractional operation picks murmur3, a seed convention, and relative weights, none of which are specification requirements, so a conformant second provider can put a different set of subjects in the exposed cohort at the same stated percentage.
  • Nothing in the spec addresses progression: no notion of a rollout advancing, no condition for increasing exposure, no halted state. That boundary is defensible for an evaluation API, and worth stating rather than assuming.
  • Hooks are an instrumentation point and not a control point. A hook observes one evaluation, and it cannot mutate flag configuration or rollout state through the standard API.
  • The closing section asks whether rollout state deserves a portable representation, and proposes a minimal observational shape. It explicitly does not propose that OpenFeature define rollout policy or offer a management API.

Specification accuracy

Every specification claim is cited inline and was checked against the spec repository rather than written from memory:

  • error running for the before stage, flag resolution, or the after stage (Requirement 4.3.7)
  • finally running after before, after and error (Requirement 4.3.8)
  • before returning evaluation context that is then merged (Requirements 4.3.4 and 4.3.5)
  • hook execution order API, Client, Invocation, Provider (Requirement 4.4.2)
  • track no-opping when the provider does not implement tracking (Requirement 6.1.4)
  • telemetry emission belonging in finally, per appendix D on observability

Where the post makes a claim about flagd, it links flagd's own fractional-operation documentation.

Housekeeping

Adds an authors.yml entry. Post follows the existing convention: blog/YYYY-MM-DD-slug.md, front matter with title, description, date, categories, slug and authors, and a <!--truncate--> marker after the intro. Commit is signed off.

Happy to cut the closing proposal section if it reads as out of scope for the blog, or to adjust the framing anywhere it misrepresents the project's intent.

Adds a post on where fractional evaluation stops and rollout progression begins,
and on what hooks can and cannot do about it.

Signed-off-by: Santhosh Kumar Somarapu <somarapu.santhosh91@gmail.com>
@1991santhu
1991santhu requested review from a team as code owners August 10, 2026 02:19
@netlify

netlify Bot commented Aug 10, 2026

Copy link
Copy Markdown

Deploy Preview for openfeature ready!

Name Link
🔨 Latest commit 78ad21a
🔍 Latest deploy log https://app.netlify.com/projects/openfeature/deploys/6a793f5c0ec3020008cc5c92
😎 Deploy Preview https://deploy-preview-1436--openfeature.netlify.app
📱 Preview on mobile
Toggle QR Code...

QR Code

Use your smartphone camera to open QR code link.
🤖 Make changes Run an agent on this branch

To edit notification comments on pull requests, go to your Netlify project configuration.

@coderabbitai

coderabbitai Bot commented Aug 10, 2026

Copy link
Copy Markdown

Review Change Stack

Warning

Review limit reached

@1991santhu, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 16 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: de875b6c-78a5-42d7-a4f5-6544f02460dd

📥 Commits

Reviewing files that changed from the base of the PR and between 7379f7d and 78ad21a.

📒 Files selected for processing (1)
  • blog/2026-08-09-a-percentage-is-not-a-rollout.md
📝 Walkthrough

Walkthrough

Adds a blog article that distinguishes fractional flag evaluation from rollout orchestration and adds the article author’s profile to the author registry.

Changes

Evaluation and Rollout Documentation

Layer / File(s) Summary
Article scope and evaluation model
blog/2026-08-09-a-percentage-is-not-a-rollout.md, blog/authors.yml
The article defines evaluation scope, provider-specific allocation, canary exposure, and progressive delivery boundaries. The author registry adds Santhosh Kumar Somarapu.
Hooks and observability
blog/2026-08-09-a-percentage-is-not-a-rollout.md
The article documents hook stages, telemetry uses, and limits on aggregate gate visibility and rollout configuration changes.
Rollout state model
blog/2026-08-09-a-percentage-is-not-a-rollout.md
The article proposes observational rollout-state fields and separates management state from evaluation results.

Estimated code review effort: 1 (Trivial) | ~5 minutes

Suggested reviewers: aepfli

🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly and concisely identifies the blog post's main topic: the distinction between percentage evaluation and rollout orchestration.
Description check ✅ Passed The description directly explains the blog post's scope, technical claims, citations, and related author profile change.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🧹 Nitpick comments (2)
blog/2026-08-09-a-percentage-is-not-a-rollout.md (2)

151-161: 🗄️ Data Integrity & Integration | 🔵 Trivial | ⚡ Quick win

Define the portable field units and scope.

If this table is intended for interchange, define the units and range of current_exposure and intended_target, such as a fraction in [0,1] or a percentage in [0,100]. Also state whether the record applies to a flag, environment, variant, or cohort. Without this contract, consumers can encode different meanings, and multi-variant rollout state remains ambiguous.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@blog/2026-08-09-a-percentage-is-not-a-rollout.md` around lines 151 - 161,
Update the portable shape table to define the units and valid range for
current_exposure and intended_target, using one consistent representation, and
add the record’s scope so it explicitly identifies whether the rollout applies
to a flag, environment, variant, or cohort. Clarify multi-variant applicability
rather than leaving consumers to infer it.

129-132: 🔒 Security & Privacy | 🔵 Trivial | ⚡ Quick win

Add a privacy constraint to subject correlation.

OpenFeature defines feature_flag.context.id as the evaluation subject identifier and falls back to the targeting key, so exposure telemetry can uniquely identify a subject. State that exposure telemetry must use a privacy-safe or pseudonymous identifier and follow retention and access controls, and avoid recommending raw user identifiers by default.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@blog/2026-08-09-a-percentage-is-not-a-rollout.md` around lines 129 - 132,
Update the “Emit exposure, not blanket metric tags” guidance to require
privacy-safe or pseudonymous subject correlation identifiers, rather than raw
user identifiers by default. Reference the OpenFeature subject identifier
semantics while requiring appropriate retention and access controls for exposure
telemetry.

Source: MCP tools

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@blog/2026-08-09-a-percentage-is-not-a-rollout.md`:
- Around line 44-45: In the sentence listing provider-specific choices, replace
the phrase “weights-as-relative-rather-than-absolute” with the clear noun phrase
“the use of relative rather than absolute weights,” leaving the surrounding
wording unchanged.
- Around line 93-95: Update the hook execution-order documentation in the
surrounding discussion of Requirement 4.4.2 to explicitly distinguish both
stages: document before hooks as API → Client → Invocation → Provider, and
after, error, and finally hooks as Provider → Invocation → Client → API,
including reverse registration order within each level.
- Around line 55-59: Update the description of OpenFeature’s Evaluation API in
the surrounding rollout discussion to state that it standardizes how
applications request and receive evaluation results, rather than standardizing
exposure decisions or allocation behavior. Preserve the distinction that
providers determine evaluation values and rollout progression remains outside
the API.
- Around line 129-132: Update the exposure-record recommendation in “Emit
exposure, not blanket metric tags” to make variant optional and reason
recommended rather than universally required, while retaining the flag key,
correlation identifier, and trace-enrichment guidance.

---

Nitpick comments:
In `@blog/2026-08-09-a-percentage-is-not-a-rollout.md`:
- Around line 151-161: Update the portable shape table to define the units and
valid range for current_exposure and intended_target, using one consistent
representation, and add the record’s scope so it explicitly identifies whether
the rollout applies to a flag, environment, variant, or cohort. Clarify
multi-variant applicability rather than leaving consumers to infer it.
- Around line 129-132: Update the “Emit exposure, not blanket metric tags”
guidance to require privacy-safe or pseudonymous subject correlation
identifiers, rather than raw user identifiers by default. Reference the
OpenFeature subject identifier semantics while requiring appropriate retention
and access controls for exposure telemetry.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ee4faa14-9ae1-433e-9dcd-aad1892c18ea

📥 Commits

Reviewing files that changed from the base of the PR and between 10dfbe5 and 7379f7d.

📒 Files selected for processing (2)
  • blog/2026-08-09-a-percentage-is-not-a-rollout.md
  • blog/authors.yml

Comment thread blog/2026-08-09-a-percentage-is-not-a-rollout.md Outdated
Comment thread blog/2026-08-09-a-percentage-is-not-a-rollout.md Outdated
Comment thread blog/2026-08-09-a-percentage-is-not-a-rollout.md Outdated
Comment thread blog/2026-08-09-a-percentage-is-not-a-rollout.md Outdated
Hook ordering was only half stated. before runs API, Client, Invocation,
Provider, but after, error and finally run in reverse, Provider, Invocation,
Client, API, and within each level in reverse registration order. Now says both.

Removed an internal contradiction. The piece argued that conformant providers
can bucket differently, then described the evaluation API as standardizing
exposure decisions. It standardizes how applications request and receive
evaluation results; allocation sits with providers and progression with control
planes.

Exposure-record fields now match appendix D rather than presenting all three as
required: flag key required, variant conditionally required, reason recommended.

Reworded weights-as-relative-rather-than-absolute.

Signed-off-by: Santhosh Kumar Somarapu <somarapu.santhosh91@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant