Skip to content

fix(packets): order by ingest id, not rxTime — fresh activity visible on packets page (#1345)#1349

Merged
Kpa-clawbot merged 2 commits into
masterfrom
fix/issue-1345
May 26, 2026
Merged

fix(packets): order by ingest id, not rxTime — fresh activity visible on packets page (#1345)#1349
Kpa-clawbot merged 2 commits into
masterfrom
fix/issue-1345

Conversation

@Kpa-clawbot
Copy link
Copy Markdown
Owner

Summary

Fixes #1345 — the packets page shows "no recent activity" while MQTT ingest is healthy because the default /api/packets query was ORDER BY first_seen DESC, and PR #1233 redefined first_seen as the observer's radio receive time (rxTime). When an observer buffers offline and uploads hours later, its packets land with hours-old first_seen values; older-ingested packets with fresher rxTime then crowd the top of the list and the visually freshest activity disappears.

Fix

Switch the default ordering to t.id DESC (ingest order) on /api/packets and the closely-related endpoints. id is monotonic with ingest time and immune to buffered uploads.

Endpoints changed (all use the same fix for the same reason):

Path Function File
GET /api/packets (default) DB.QueryPackets, Store.QueryPackets cmd/server/db.go, cmd/server/store.go
GET /api/packets?nodes=… DB.QueryMultiNodePackets, Store.QueryMultiNodePackets same
Node detail "recent transmissions" DB.GetRecentTransmissionsForNode cmd/server/db.go

since= semantic — preserved

since= still filters by first_seen (RFC3339 path uses the observations.timestamp subquery), i.e. "packets the network received since X." Buffered uploads of older packets are still excluded from a since=15m view even if they were ingested in the last 15 minutes. Only the display order changes; filtering by receive time is unchanged.

Audit — NOT changed

  • Store.QueryGroupedPackets already sorts by LatestSeen (max observation timestamp), which is correct for the grouped view and immune to the buffered-upload regression.
  • GetChannelMessages and channel sample_json subqueries keep first_seen DESC — channel message chronology is meaningful for message UX; if buffered uploads become a problem here too it's a separate UX call (out of scope for bug(packets): page shows old/empty because first_seen=rxTime sorts buffered uploads to top — should order by ingest-time #1345).
  • s.packets insertion ordering (Load + ingest) — untouched. The fix sorts at query time so we don't perturb oldestLoaded invariants.

Tests — TDD red → green

  • Red: 508f4371 adds cmd/server/packets_order_test.go with two cases — order assertion (failed on master with [fresh, buffered]) and since-filter semantic (RFC3339 path uses observation timestamps).
  • Green: 0fd685e7 switches the SQL + in-memory ordering. Tests pass; full cmd/server suite green locally (44s).

Out of scope

Preflight

Clean (bash ~/.openclaw/skills/pr-preflight/scripts/run-all.sh origin/master).

openclaw-bot added 2 commits May 24, 2026 04:30
PR #1233 redefined transmissions.first_seen as the radio's receive time
(rxTime). When an observer buffers offline and uploads hours later, its
packets land with old first_seen values. The /api/packets handler was
ORDER BY first_seen DESC, which pushed buffered uploads below older
ingested packets that happened to have fresher rxTime — the packets page
looked stale even with active MQTT ingest.

Switch the default ordering to t.id DESC (ingest order) on /api/packets
and adjacent endpoints. The since= filter still uses first_seen (rxTime
semantics preserved). In-memory store now sorts query results by ID too
so the path that does NOT fall back to SQL gets the same fix.

Endpoints touched:
- DB.QueryPackets, DB.QueryMultiNodePackets, DB.GetRecentTransmissionsForNode
- Store.QueryPackets, Store.QueryMultiNodePackets
@Kpa-clawbot Kpa-clawbot merged commit 9d3dd8d into master May 26, 2026
6 checks passed
@Kpa-clawbot Kpa-clawbot deleted the fix/issue-1345 branch May 26, 2026 05:32
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.

bug(packets): page shows old/empty because first_seen=rxTime sorts buffered uploads to top — should order by ingest-time

1 participant