A getBlob body now has a whole-body deadline alongside its per-chunk stall timer. It gets blob_send_timeout_secs plus its declared length at [capacity] blob_send_min_bytes_per_sec (default 32 KiB a second, range 4 KiB to 1 MiB a second), then ends short and gives back its read permit and its address's turn. Before, the stall timer restarted on every 64 KiB chunk, so a client taking one chunk every 29 s held its permit for about 39 minutes on a 5 MiB blob. At the default, that blob has 190 s, and holding all 32 reads now costs a reader about 1 MiB a second.
The new test fails on main: a reader taking a chunk every 400 ms, inside a one-second stall timer, gets the whole 2 MiB blob. On this branch its body ends at the deadline and its address can read again, while a reader on another address gets the whole blob at once.
No deploy window is needed: this is an ordinary release with no data layout change, and rolling back is safe.
Closes https://tangled.org/permadeath.com/didbot/issues/243
🤖 Generated with Claude Code