Repository navigation
fix(view): reverse path flags describe the published path; raw revTr loop exposed as revtr_loop_cleaned - #50
Merged
Merged
Conversation
Replaces the 9999-12-31 sentinel from #48 with the first partition_date written by the fixed step 04. The image carrying the fix (08d689b, then 4d73983) was deployed on 2026-09-30 after that day's nightly, which had already processed 2026-09-28 and 2026-09-29, so the next nightly (2026-10-01 15:00 UTC) writes 2026-09-30 first. Merge only after confirming 2026-09-30 in hermes_union.events_with_as_and_geoloc was written by that run. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…loop is revtr_loop_cleaned The reverse struct read step 04's reverse_loop / reverse_unresponsive_within_AS, which are computed on the RAW revTr, before step 04 drops ambiguous hop_type=4 excursions and truncates at the first AS re-entry. A published reverse path therefore never has a loop, yet ~18% of reverse paths would have shown loop_detected = TRUE beside an as_path with no loop -- and the same field name meant "the published path" in the forward struct. Now both directions compute loop_detected / unresponsive_within_as from their own published hops with one definition, and the raw-revTr fact is published as client_to_server_path.revtr_loop_cleaned (from 2026-09-30, the first partition with the fixed step-04 definition; NULL before, since the raw path is not stored). Rendered view logic on real data (2026-09-29 / 09-30 / 10-01): reverse loop_detected 0 / 0 / 0; reverse unresponsive_within_as 6.95% / 6.97% / 7.04% (no longer NULL before the fix date); revtr_loop_cleaned NULL / 18.26% / 18.23%; forward loop rate unchanged (0.89%). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Burdantes
marked this pull request as ready for review
October 12, 2026 20:08
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 changed since the first version of this PR
The first version only moved a date gate (
9999-12-31→2026-09-30) so the reverse struct'sloop_detected/unresponsive_within_aswould read step 04'sreverse_loop/reverse_unresponsive_within_AS. Its checklist expected the reverse loop rate to drop to "a few percent"; it dropped from 75.1% to 18.3% — and investigation showed why that column cannot be published under that name:reverse_loopon the raw revTr (reverse_node_with_geo_info), before its cleanup drops ambiguoushop_type=4excursions and truncates at the first AS re-entry (reverse_hops_clean);loop_detected = TRUEnext to anas_pathwith no loop;loop_detectedalready means "the published path" inserver_to_client_path.Now
loop_detectedandunresponsive_within_asfrom their own published hops, with one definition (A B A loop; A … A gap over unmapped hops). Reverseloop_detectedis FALSE by construction and documented as such. Reverseunresponsive_within_asis now available for every date (it was NULL before 2026-09-30).client_to_server_path.revtr_loop_cleaned: TRUE when the raw revTr had an AS loop that step 04 removed or truncated (the published path is then shorter than what was measured). From 2026-09-30; NULL before, since the raw path is not stored and the old definition was wrong.reverse_unresponsive_within_ASjoinsforward_loop/forward_unresponse_within_ASas physical columns the view supersedes from the hops.Evidence
The reworked view SQL rendered as a read-only SELECT over prod partitions:
loop_detectedTRUEunresponsive_within_asrevtr_loop_cleanedloop_detected(unchanged)Original checklist: zeroed Welch groups 121 (09-29) → 0 (09-30, 10-01) ✅; image 4d73983 for the 10-01 nightly — inferred (built 09-30, both fixes visible from the 09-30 partition) ✅.
Follow-up (separate PR)
Recording in step 04 which cleanup happened — only a type-4 hop dropped (path complete) vs truncated (path shortened) — would make
revtr_loop_cleanedmore informative.Deploy
View only: run
create_events_enriched.sqlwithDS=hermes_union(additive: one new field inclient_to_server_path).🤖 Generated with Claude Code