fix: Send the FDv2 polling selector as the "basis" query parameter - #418
Merged
Conversation
keelerm84
approved these changes
Aug 14, 2026
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.
What
The FDv2 (data system v2) polling requester (
HTTPPollingRequester) was attaching the current payload selector's state to the poll request under the query-parameter nameselector. The protocol requires this parameter to be namedbasis. Because the server silently ignores unknown query parameters, it never received the SDK's current basis, so every poll returned a full payload and delta polling never engaged.Fix
Rename the polling query parameter from
selectortobasis(the value — the selector'sstate— is unchanged, and it is still only sent when a selector is present). This matches:basisquery parameter carrying thestatefrom the most recentpayload-transferredevent.params["basis"] = selector.State()) and the recently fixed Python SDK.basis.FDv1 polling (
HTTPFDv1PollingRequester) does not send a selector/basis and is unaffected.Testing
This was surfaced by a new sdk-test-harness FDv2 polling
basiscontract test. The existing polling unit specs (polling_synchronizer_spec.rb,polling_initializer_spec.rb, 39 examples) use mock requesters and continue to pass; none asserted the query-string parameter name, so no unit test change was needed.Note
Overview
FDv2 polling now sends the current selector state on poll requests using the
basisquery parameter instead ofselector, matching the CSFDV2 protocol and aligning with FDv2 streaming and other SDKs.The value (
selector.state) and the condition (only when a defined selector exists) are unchanged. FDv1 polling does not send this parameter and is unaffected.Without this fix, the server ignored the unknown
selectorparameter, so polls always returned full payloads and delta polling never engaged.Reviewed by Cursor Bugbot for commit ea2f2e8. Bugbot is set up for automated code reviews on this repo. Configure here.