Render observer path as hop badges and fix path-hash extraction

The packet-group detail observer table only ever showed the hop count
because _extract_path_hashes looked at decoded.payload.decoded.pathHashes,
but normal packets carry the routing path at the top level as decoded.path.
Read decoded.path first (falling back to the old pathHashes location).

Frontend: render each hop as its own badge joined by arrows, wrapping on
narrow screens, with centre-truncation for paths over 16 hops. Badges carry
a path-hash-badge class + data-path-hash hook for a future node lookup.

Also expose v1/packet-groups as an open endpoint in the web proxy mapping
(it is not a prefix of v1/packets) and rebase the packet_hash index
migration onto the current head.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
Louis KingandClaude Opus 4.8 committed 2026-06-13 14:07:47 +01:00
1 parent 740b04d754
commit 81c6b3e989
8 files changed
+94 -7

No files matched your search

@@ -1,7 +1,7 @@
"""add packet_hash_received_at composite index
Revision ID: a1b2c3d4e5f6
Revises: e9f0c4079540
Revision ID: c3d4e5f6a7b8
Revises: e8eb47c49062
Create Date: 2026-06-13 07:30:00.000000+00:00
"""
@@ -10,8 +10,8 @@ from typing import Sequence, Union
from alembic import op
revision: str = "a1b2c3d4e5f6"
down_revision: Union[str, None] = "e9f0c4079540"
revision: str = "c3d4e5f6a7b8"
down_revision: Union[str, None] = "e8eb47c49062"
branch_labels: Union[str, Sequence[str], None] = None
depends_on: Union[str, Sequence[str], None] = None