mirror of
https://github.com/agessaman/meshcore-bot.git
synced 2026-08-14 06:29:47 +00:00
Four review findings on this branch, all confirmed against the code and the installed meshcore 2.3.8: Single-flight the discovery cycle. The command guarded only its own task, so the scheduler's independent call could overlap a manual cycle and each round would collect into the other's discover window. run_neighbors_cycle is now a guard around the cycle body, refusing whichever trigger arrives second. Make the 15-minute cooldown per node rather than per sender. The base class rations per user, but the cost here is mesh airtime: users could take turns and keep the radio discovering continuously. Measured from the last cycle that produced a result, so the scheduler's cycles count and a cycle that bailed out without transmitting does not start the clock. Window the neighbours evidence label. The combined viewer applied `days` only to mesh_connections while reading every lifetime row from neighbor_links, which is deliberately never pruned — so a link last heard years ago kept claiming a recent path-derived edge was a current direct neighbour. Match that label on full public keys too. MeshGraph.add_edge does not promote a 1-byte edge that has no public key, but still fills in the keys discovery supplied, so the 3-byte prefix comparison alone left confirmed neighbours labelled singlebyte. Truncating our keys to 2 chars instead would relabel every other node sharing that byte. Restore a contact's flood path after an interrupted scope request. send_anon_req pins a path-less contact to zero-hop and restores it after the send with no try/finally, so our own budget cancelling the request left the contact pinned and every later message to it sent direct-only. The meshcore>=2.3.8 pin needed no change: PyPI publishes 2.3.8 now.