feat: Add FDv2 polling sources to the client - #610
Merged
Merged
Conversation
beekld
added this pull request to stack #608
September 10, 2026 23:19
beekld
force-pushed
the
bklimt/SDK-3030/client-fdv2-polling
branch
from
September 11, 2026 01:39
6485e51 to
d536b60
Compare
beekld
marked this pull request as ready for review
September 11, 2026 21:23
beekld
force-pushed
the
bklimt/SDK-3030/client-fdv2-polling
branch
from
September 16, 2026 20:56
6960b1e to
8c8d6c2
Compare
beekld
force-pushed
the
bklimt/SDK-3030/client-fdv2-polling
branch
from
September 16, 2026 21:25
8c8d6c2 to
61fd504
Compare
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, have a team admin enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 61fd504. Configure here.
Base automatically changed from
bklimt/SDK-3029/client-fdv2-source-interfaces
to
main
September 18, 2026 16:57
beekld
force-pushed
the
bklimt/SDK-3030/client-fdv2-polling
branch
from
September 18, 2026 16:57
4f1769f to
8580a33
Compare
kinyoklion
approved these changes
Sep 21, 2026
beekld
force-pushed
the
bklimt/SDK-3030/client-fdv2-polling
branch
from
September 24, 2026 21:22
8580a33 to
bc9ead6
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

Summary
Adds the FDv2 polling sources -- a one-shot polling initializer and an interval-based polling synchronizer -- over a shared request builder and response handler that feed the response through the protocol handler and the changeset translation.
stateas thebasisquery parameter for deltas, with a poll-interval floor to avoid hammering the service.Design note: this client sends no conditional-request validator (
If-None-Match/ETag), unlike the Flutter and Android clients, which track a per-context ETag and act on real304responses. The spec lists omittingIf-None-Matchentirely as an accepted way to avoid the cross-context ETag hazard, and since every SDK already sends thebasisselector for deltas, dropping the ETag costs little here. Because noIf-None-Matchis ever sent, a304should not occur, so the304 -> nonehandling is defensive.Internal only. The orchestrator that runs these arrives in a later change.
Note
Overview
Adds FDv2 HTTP polling to the C++ client SDK: shared plumbing to build
/sdk/poll/evalrequests and turn poll responses intoFDv2SourceResultvia the existing protocol handler and changeset translation.FDv2PollingInitializerperforms a one-shot basis load;FDv2PollingSynchronizerpolls on an interval (clamped to the SDK minimum), sends selectorstateasbasis, and supports cancel/shutdown viaClose(). Context can travel as base64url in the GET path or JSON in a POST body (FDv2RequestConfig). The client does not sendIf-None-Match;304is still mapped defensively to a none changeset. Response headers supply environment id and optional FDv1 fallback (body goodbye TTL wins over header).AsioRequesteris refactored so redirect/async paths capture the SSL context explicitly instead ofthis, avoiding lifetime issues in nested callbacks.Unit tests cover request shaping, response/error/fallback behavior, and synchronizer timing/close semantics. Wiring into the public data-source orchestrator is left for a follow-up.
Reviewed by Cursor Bugbot for commit bc9ead6. Bugbot is set up for automated code reviews on this repo. Configure here.