Three bugs, all invisible in a same-machine test:
1. no deadline on the initial WebRTC attempt, so the relay fallback was
unreachable and a stalled ICE showed (connecting...) forever
2. the waiting side armed nothing -- only the newest peer dials, so there
was no connection object to time out
3. relay channels never sent HELLO, so a relayed peer silently vanished
from the plan and the ring shrank without saying so
Adds ICE/selected-path logging and ?relay=1 to force the server relay.
Layer-sharded peer-to-peer inference. Each device downloads only its own
layers from the Hub via safetensors byte ranges, so no device holds the
whole model -- this pools memory, which DaisyChain-Train explicitly cannot.
Loads any Llama-style or GPT-2-style .safetensors repo. Verified INT8 units,
WGSL kernels and their exact gates carried over from DaisyChain-Web unchanged.
47 checks: bit-exact split equivalence (both families, with mutation checks),
wire protocol refusals, ring routing, safetensors/dtype/BPE loader.