The router was working. That should have been the end of the story. It had been sat in the cupboard quietly routing for the better part of a year without a single complaint, and any sensible person would have left it exactly where it was.
Instead I saw there was a newer build available, decided the kitchen was warmer than the office, and flashed it over coffee. The upload went fine. The reboot did not. What I got back was nothing: no lights doing anything useful, no DHCP, no web interface, no ping. A brick, in other words, sat there looking smug.
The thing that saved me was a header I had soldered on months ago and never used, three pads for a serial console. I clipped a USB-to-TTL adapter onto it, opened a terminal at 115200 baud, and there it was, the bootloader sitting patiently waiting for someone to tell it what to do. From there it is a tftp recovery: hold the right moment, point it at a known-good image on my laptop, and let it pull the firmware over the network it cannot otherwise speak.
# bootloader prompt, image served from the laptop
setenv serverip 192.168.1.10
tftpboot 0x80060000 firmware.bin
Ten minutes later it was back, running the old firmware, exactly as useful as it had been that morning and not one bit more. I have learned this lesson before and will doubtless learn it again, but for the record: solder the serial header on while the board is open and you are calm, not the night you brick it. And maybe, just maybe, leave the working thing working.