Firmware: - fix(protocol): SNR type i8→i16 to match lora_phy PacketStatus - fix(display): combine splash + waiting into one screen - fix(display): move TX power to row 0 right-justified - feat(display): sparkline distinguishes TX from RX — TX bars are dotted (alternating pixel rows), RX bars are solid. TX-only slots show a short marker. TX takes precedence over RX in the same time slot. Host tool (tools/meshcore_rx.py): - feat: full MeshCore packet decoder with colored ANSI output - feat: GRP_TXT decryption using 276 channels from channels.csv - feat: Watchman loop/collision reporter to #watchman - feat: ADVERT-informed node registry with 12h TTL persistence - feat: transport code fallback for older MeshCore firmware - fix: robust error handling for long-running operation - fix: collision detection uses evidence-based reasoning from advert cache Channel directory (tools/channels.csv): 276 channels Test corpus (corpus/): JSON Schema, 28 hand-crafted vectors, Hypothesis generator
30 lines
601 B
JSON
30 lines
601 B
JSON
{
|
|
"description": "PATH flood, 1 hop with 3-byte hash",
|
|
"tags": [
|
|
"path",
|
|
"flood",
|
|
"3byte_hash",
|
|
"encrypted"
|
|
],
|
|
"packet_hex": "21811afff3e6e92e4700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000",
|
|
"valid": true,
|
|
"expected": {
|
|
"route_type": "flood",
|
|
"payload_type": "PATH",
|
|
"payload_ver": 0,
|
|
"transport_codes": null,
|
|
"path": {
|
|
"hash_size": 3,
|
|
"hops": [
|
|
"1afff3"
|
|
]
|
|
},
|
|
"payload": {
|
|
"dst": "e6",
|
|
"src": "e9",
|
|
"mac": "2e47",
|
|
"ciphertext_len": 46
|
|
}
|
|
}
|
|
}
|