[fix](trx-frontend-http): require bidirectional decodes for map QSO contact paths

A QSO requires both parties to hear each other. Previously the map drew
contact paths whenever A sent a directed message to B and B's locator
was known from any message. Now paths only appear when both A→B and B→A
directed messages are present in the decoded history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Signed-off-by: Stan Grams <sjg@haxx.space>
This commit is contained in:
2026-03-15 16:53:46 +01:00
parent 3d99cac03b
commit 8cb713b3b1
@@ -6319,7 +6319,11 @@ function rebuildDecodeContactPaths() {
}
}
}
// Index directed messages by "SOURCE::TARGET" for QSO (bidirectional) check
const directedPairs = new Set(directedMessages.map((m) => `${m.source}::${m.target}`));
for (const msg of directedMessages) {
// A true QSO requires both A→B and B→A directed messages
if (!directedPairs.has(`${msg.target}::${msg.source}`)) continue;
const targetLocator = stationLocators.get(msg.target);
if (!targetLocator) continue;
if (msg.sourceGrid === targetLocator.grid) continue;