Tracking issue for a set of internal @libp2p/kad-dht reliability fixes found while hardening the IPNS-over-DHT write path. All are internal (no public API changes); each lands as its own PR, linked here as it opens. Ordered roughly by impact.
Evaluated, not pursuing: per-request timeout cap (reach is ceiling-independent once the live-peer fix lands), backfilling failed PUTs to peers outside the closest-K (breaks Kademlia write semantics, periodic republish covers it), streaming PUTs before the lookup completes (closest-K is not known until convergence).
Tracking issue for a set of internal
@libp2p/kad-dhtreliability fixes found while hardening the IPNS-over-DHT write path. All are internal (no public API changes); each lands as its own PR, linked here as it opens. Ordered roughly by impact.getClosestPeersshould only add peers that respondedPUT_VALUEs. Mirrors go-libp2p, which excludesPeerUnreachablepeers from the converged set.Evict unresponsive peers from the routing table on query failureA peer that fails a lookup is never removed (eviction only happens via bucket-full ping-replace), so dead entries are re-queried on every lookup. Ping-confirm before evicting. (needs design + test)Unbiased Fisher-Yates shuffle for the disjoint-path seedalphaoption doc@default 3but the code usesALPHA = 10.Evaluated, not pursuing: per-request timeout cap (reach is ceiling-independent once the live-peer fix lands), backfilling failed PUTs to peers outside the closest-K (breaks Kademlia write semantics, periodic republish covers it), streaming PUTs before the lookup completes (closest-K is not known until convergence).