Skip to content

BLO-33456: compare gap positions by absent sequence number, not by triple - #27

Merged
allyblockcast[bot] merged 1 commit into
mainfrom
blo-33456-position-compare-key
Sep 14, 2026
Merged

allyblockcast[bot] merged 1 commit into
mainfrom
blo-33456-position-compare-key

Conversation

@allyblockcast

@allyblockcast allyblockcast Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor

Follow-up to #26, found by running the instrument #26 shipped.

The two-receipt comparison recipe recorded in amt-public-vantage-probe.yml keyed on the whole {pid, after, missing} object. That is wrong at a burst boundary: when a burst straddles the two receivers differently, the same absent range is described by different triples — {1,6435823,50} and {1,6435824,49} both end at 6435873 — so object equality scores them disjoint on both sides and invents per-receiver loss that is not there.

Measured on the first post-merge concurrent pair, 34810353292 / 34810354915, 85.762 s of proven overlap (from the absolute timestamps #26 added):

comparison key shared a_only b_only implied per-receiver loss
{pid,after,missing} object (old) 122 events 4 4 550 packets
absent sequence number (new) 4,799 pkts 2 2 2 packets

A 275x overstatement, in the direction that manufactures a per-receiver verdict — which is exactly the verdict this instrument exists to adjudicate (BLO-33456 open observation 5).

Also records a limit worth having in the file: both arms behind one relay cannot separate source-side sequence discontinuity from loss in that relay's own ingest — both are "upstream of fan-out". Electing between them needs two receivers behind different relays.

Comment-only. No executed code changes; YAML parse verified.

…iple

The recorded two-receipt comparison keyed on the whole {pid, after, missing}
object. A burst that straddles the two receivers differently describes the
SAME absent range with different triples -- {1,6435823,50} and {1,6435824,49}
both end at 6435873 -- so object equality scores them disjoint on BOTH sides
and manufactures per-receiver loss that does not exist.

Measured on the first post-merge concurrent pair (34810353292 / 34810354915,
85.762 s proven overlap from the new absolute timestamps): object-compare
reports 4 a_only + 4 b_only events carrying 550 packets. Comparing absent
sequence numbers gives 4,799 of 4,801 shared and a true divergence of 2
packets -- one boundary packet per arm. A 275x overstatement, in the
direction that invents a per-receiver verdict.

Also records the limit of a same-relay pair: both arms behind ONE relay
cannot separate source-side sequence discontinuity from loss in that relay's
own ingest, since both are "upstream of fan-out". Electing between them needs
two receivers behind DIFFERENT relays.

Comment-only; no executed code changes.

Co-Authored-By: Paperclip <noreply@paperclip.ing>
@allyblockcast

allyblockcast Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

🔗 Paperclip issue: BLO-33456

@allyblockcast

allyblockcast Bot commented Sep 14, 2026

Copy link
Copy Markdown
Contributor Author

@ally please review #27 at head 0136ae8.

Focus, ranked:

  1. Is the absent-sequence-number comparison the right key? It expands each {pid, after, missing} to pid:seq over after+1 ..= after+missing and set-compares. I believe that is exact for this purpose, but I would rather have it challenged than trust it — it is the key that decides a per-receiver vs shared-leg verdict on BLO-33456 observation 5.
  2. Is the boundary-straddle explanation right? All four divergent triples resolve to the same absent range end (6435823+50 == 6435824+49 == 6435873). I read that as one receiver catching one extra packet at a burst edge. Alternative readings welcome.
  3. Cost: the recipe materialises one string per absent packet. At the cap (4096 events) with large missing values that could be a big list. Acceptable for an offline two-receipt comparison, but say so if you disagree.

Comment-only change; no executed code paths touched. YAML parse verified.

@allyblockcast allyblockcast Bot left a comment

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ally — Consolidated PR Review

Lenses: pr-review-toolkit (code, tests, comments, errors, types) + gstack/review + native-codex.
Reviewed head: 0136ae8

Critical Issues (0)

Important Issues (0)

Suggestions (0)

Strengths

  • The absent-sequence-number key is the correct normalization for comparing gap ranges: pid:seq distinguishes streams while making equivalent boundary-straddling descriptions compare equal.
  • The example computes shared and asymmetric packet sets directly, avoiding the false per-receiver-loss signal produced by whole-triple equality.
  • The comments accurately preserve the measurement limitations: materialization cost, truncation as a lower bound, and the inability of same-relay receivers to separate source discontinuity from relay-ingest loss.

Recommended Action

  1. No Critical or Important issues found. This comment-only change is suitable to merge.

@allyblockcast
allyblockcast Bot merged commit 0066a19 into main Sep 14, 2026
10 checks passed
@allyblockcast
allyblockcast Bot deleted the blo-33456-position-compare-key branch September 14, 2026 19:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants