Repository navigation
Replace buffered dataset spans with typed resource writes - #123
Merged
Stephen Belanger (Qard) merged 1 commit intoOct 28, 2026
Merged
Stephen Belanger (Qard) merged 1 commit into
Stephen Belanger (Qard) merged 1 commit into
Conversation
Stephen Belanger (Qard)
merged commit Oct 28, 2026
82eb144
into
refactor/resource-registration
2 checks passed
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.
Dataset mutations previously accumulated in a private buffer until
flush, which converted them to synthetic span payloads and discarded their delivery completions. This could report success before the API accepted a mutation, and placed deletion flags inside span attributes.This change sends typed dataset rows through the direct API and returns each operation's actual result. Insert returns
Result<String>; update and delete returnResult<()>. Merge and deletion flags are top-level row fields, and no tracing fields are synthesized. There is no private buffer or automatic replay after failure. Each mutation request makes one attempt; payload rejection and rate limits are returned directly without retry, splitting, or overflow.Dataset
flushnow returns the shared trace queue's eager completion/barrier. Dataset mutations are acknowledged independently, and summary reads no longer flush unrelated work. Dataset registration, writes, pagination, and summaries carry the explicit organization header.Experiment and dataset transport adapters now delegate to the shared API client instead of duplicating HTTP code in
logger.rs. They reuse the SDK transport and configured control/data routes. The SDK retains its existing interpretation of base-experiment HTTP 400 as no base; the direct API preserves the HTTP error.Stacked on #122. Immutable credential scopes, concrete resource handles, and the remaining eager resource operations follow in later layers. Planning notes remain local.
Validation: 268 unit/integration tests and 9 doctests passed (one existing integration test and four existing doctests ignored), strict Clippy and rustdoc, formatting, and
git diff --check. New coverage checks exact mutation payloads, immediate acknowledgement/errors, no replay, shared registration, shared flush failure retirement, organization headers, and separate control/data routes with path prefixes.