diff --git a/public/live.js b/public/live.js
index 378c387f..4cc6b763 100644
--- a/public/live.js
+++ b/public/live.js
@@ -1343,7 +1343,7 @@
html += `
Recent Packets
` +
recent.slice(0, 10).map(p => `
`).join('') +
'
';
@@ -1548,7 +1548,7 @@
item.innerHTML = `
${icon}
${typeName}
- ${hopStr}${obsBadge}
+ ${transportBadge(pkt.route_type)}${hopStr}${obsBadge}
${escapeHtml(preview)}
${formatLiveTimestampHtml(group.latestTs || Date.now())}
`;
@@ -2490,7 +2490,7 @@
item.innerHTML = `
${icon}
${typeName}
- ${hopStr}${obsBadge}
+ ${transportBadge(pkt.route_type)}${hopStr}${obsBadge}
${escapeHtml(preview)}
${formatLiveTimestampHtml(pkt._ts || Date.now())}
`;
@@ -2558,7 +2558,7 @@
item.innerHTML = `
${icon}
${typeName}
- ${hopStr}${obsBadge}
+ ${transportBadge(pkt.route_type)}${hopStr}${obsBadge}
${escapeHtml(preview)}
${formatLiveTimestampHtml(pkt._ts || Date.now())}
`;
diff --git a/test-live.js b/test-live.js
index 98d9325e..d3edaa92 100644
--- a/test-live.js
+++ b/test-live.js
@@ -881,6 +881,17 @@ console.log('\n=== live.js: source-level safety checks ===');
assert.ok(src.includes('const existingIds = new Set(VCR.buffer.map(b => b.pkt.id)'),
'vcrRewind should dedup by packet ID');
});
+
+ test('feed items include transport badge', () => {
+ const count = (src.match(/transportBadge\(pkt\.route_type\)/g) || []).length;
+ assert.ok(count >= 3,
+ `feed rendering should call transportBadge(pkt.route_type) in at least 3 places (found ${count})`);
+ });
+
+ test('node detail recent packets include transport badge', () => {
+ assert.ok(src.includes('transportBadge(p.route_type)'),
+ 'node detail recent packets should call transportBadge(p.route_type)');
+ });
}
// ===== SUMMARY =====