Pin tolerance for additive sample fields and explicit-null samples - #15
Merged
Conversation
Pin the amended SOUTHBOUND section 2 conventions ("Explicit null values" +
"Additive sample fields") by regression test: a SouthboundSignalUpdate whose
samples carry additive unknown fields (valueType/valueEncoding) and an
explicit null value with quality GOOD flows through ingestion (the fan-out
handler), the quality filter, sample, project, and a full pass-through
pipeline without error, without dropping the sample, and without stripping
the additive fields. The aggregate stage is pinned to its documented null
semantics (docs/reference/data-types.md "Aggregate agg value types"): count
folds nulls, first/last carry them, numeric reducers are null when the
window has no numeric sample.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014iQDskU2E1HLStYHoZrSTn
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
Regression pins (tests only, no pipeline changes) for the amended SOUTHBOUND §2 conventions — "Explicit null values" and "Additive sample fields" (
core/docs/SOUTHBOUND.md):samples[]entry MAY carry additive protocol-specific fields beside the canonical five (e.g.valueType/valueEncoding); consumers MUST ignore fields they do not understand.value: nullwithquality: "GOOD"(a failed read isvalue: null+quality: "BAD"), so the two stay distinguishable by quality alone.The telemetry-processor is payload-agnostic by design; these tests pin that the §2 shapes flow through ingestion and every representative pipeline stage without error, without dropping the sample, and — for pass-through/projection paths — without stripping the additive fields.
Tests added
dispatch::tests::forwards_additive_sample_fields_and_explicit_null_value_untouchedproc::filter::tests::quality_filter_keeps_explicit_null_value_with_good_quality_and_additive_fieldsqualityonly: null+GOOD kept, null+BAD droppableproc::project::tests::keep_preserves_additive_sample_fields_and_explicit_null_valueproject.keepcopiessamplesbyte-identical, extras includedproc::tests::southbound_s2_null_and_additive_sample_fields_flow_through_a_pass_through_pipelineproc::aggregate::tests::explicit_null_samples_fold_per_documented_null_semanticsNull-handling findings
The aggregate stage has documented null semantics (
docs/reference/data-types.md"Aggregateaggvalue types",docs/reference/messaging-interface.md"Aggregate output"), and the implementation matches them — no gap found:countcounts all folded sample values, nulls included;first/lastcarry the raw value, null included;avg/sum/min/max) fold numeric values only and emitnullwhen the window had no numeric sample (an all-null window emitssamples[0].value: null,quality: "GOOD"— consistent with §2''s explicit-null convention).No pipeline or dispatch code changed. Full suite: 99 passed, 0 failed (baseline was green).
🤖 Generated with Claude Code
https://claude.ai/code/session_014iQDskU2E1HLStYHoZrSTn