Preserve Aggregation Invariants

When transforming/aggregating streamed or ranged data, explicitly define the invariants your algorithm depends on (index meaning, ownership/copy semantics, boundary semantics, and ordering), then implement collision- and edge-case-safe logic with targeted tests.

copy reviewer prompt

Prompt

Reviewer Prompt

When transforming/aggregating streamed or ranged data, explicitly define the invariants your algorithm depends on (index meaning, ownership/copy semantics, boundary semantics, and ordering), then implement collision- and edge-case-safe logic with targeted tests.

Practical rules: 1) Specify index/span semantics and keep them consistent across paths.

  • If downstream expects character offsets, don’t silently pass byte offsets; document and align conversions. 2) Make boundary/range aggregation match the “exact predicate” semantics of the raw path.
  • If using pre-aggregated/materialized views, split the window into interior vs boundary buckets so first/last bars count only in-window rows. 3) Enforce collision-safe dedup/remapping in stream accumulators.
  • Terminal/final markers are common collision points; reserve remapped indices deterministically on first final delivery and only remap on genuine collisions. 4) Prevent unintended aliasing in accumulators/transform layers.
  • Clone slices/maps that might be mutated later; keep other fields shallow only when you can prove they’re immutable. 5) Preserve deterministic ordering when output bytes matter.
  • Avoid Go map re-marshaling with sorted keys when providers expect literal key order; use ordered data structures and lock it with tests.

Collision-safe terminal-chunk handling (adapted from the discussed fix):

if isFinalChunk && chunk.StreamResponse != nil {
    if acc.TerminalResponseChunkIndex >= 0 {
        chunk.ChunkIndex = acc.TerminalResponseChunkIndex
    } else {
        if chunk.ChunkIndex <= acc.MaxResponsesChunkIndex {
            acc.MaxResponsesChunkIndex++
            chunk.ChunkIndex = acc.MaxResponsesChunkIndex
        }
        acc.TerminalResponseChunkIndex = chunk.ChunkIndex
    }
}

Test guidance:

  • Add edge-case tests that reflect the violated invariants (e.g., monotonic streams where the final chunk arrives twice; mixed reasoning blocks where indices must not collapse; boundary histogram windows that split across the first/last bucket).

Source discussions