Files
meshcore-analyzer/tests
hermes-gadget fdcec91578 fix(route-view): "N hops" counts only true hops, not payload endpoints (#2240)
Fixes #2206

## What

Follow-up to #2207, as sketched in its review: the route meta (desktop
header + mobile summary) printed `positions.length` as "N hops". For a
DM, `positions` includes the payload-decoded sender and recipient rows —
endpoints, not hops — so the count was inflated. Live on
corescope.ukmesh.com right now, the reported 6-relay chain reads **"8
hops · 913 km"** with "from payload" chips on rows 1 and 8.

## Change

- `public/route-view.js` — new `countHops(positions)` helper: counts
rows **without** `_fromPayload` (both builders set the flag since
#2207). The desktop header and the mobile summary both render it, so
they can't disagree. Only the displayed figure changes; the row-count
`total` still drives distances, stripe colours and row slicing.
- `tests/unit/test-issue-2206-hop-count.js` — regression test (listed in
`test-all.sh`): extracts `countHops()` from the shipping file and
exercises it (6-relay DM → 6; payload-only → 0; plain chains and
non-payload origin/dest unchanged), and pins both meta strings to the
helper so a regression back to `total` fails.

The count intentionally counts relay rows (per the review note), not
edges: a 6-relay DM reads "6 hops".

Frontend-only, static assets, no build step, no new dependencies. Cache
buster untouched (AGENTS.md rule 3).

## Perf

One `.filter()` over a ≤ ~10-entry array, once per sidebar build; no
hot-path impact.

## Testing

- `node tests/unit/test-issue-2206-hop-count.js` — 11 passed, 0 failed
- `sh test-all.sh` — full unit suite green, exit 0
- Live cross-check against the deployed instances (pre-fix logic):
`https://corescope.ukmesh.com/#/map?packet=44259e35b7c826a8&obs=97234`
shows 8 rows, meta "8 hops · 913 km", payload chips on rows 1 and 8 →
this change makes that same chain read "6 hops · 913 km". The new count
ships with the next build that carries it; happy to re-check on a
deployment once one does.
2026-10-17 10:39:08 +02:00
..