IMHO there is only one point where it could be hanging in the libavr32 code. Just look at the relevant file in https://github.com/monome/libavr32/blob/main/src/monome.c, function setup_mext(), lines 630-655.
It indeed does not require any specific ID to connect. There is a check, whether the second byte of the ID is “k” in line 641, but it is not a requirement for the connection, it just disables “vari” mode. I compared this to the original grid firmware, which has been posted above.
The original grid sends “mk” as ID, while the DIY grid sends “neo-monome”. Both pad the rest to fill 32 byte: https://github.com/monome/mk/blob/master/firmware/default/mk.c, line 253, lines 391-394
The only place where TT could be locked seems to be the “busy” loop at 635-637 in monome.c.
TT is waiting for ftdi_rx_busy() to become false. To see when this happens, we need to go to https://github.com/monome/libavr32/blob/main/src/usb/ftdi/ftdi.c. There you see that this function returns false when the global variable rxBusy is set to false. The only place where this can happen is line 60 of the same file. So we need to see why it does not get there.
This function (ftdi_rx_done) indeed uses the constant @okyeron mentions, the FTDI_STATUS_BYTES. But it does not lock in itself. It is supplied as a callback function in line 91. In the same line, we have the parameter FTDI_RX_BUF_SIZE, which is 64 - not 32.
We can go deeper from there in the USB driver, https://github.com/monome/libavr32/blob/master/asf/avr32/drivers/usbb/usbb_host.c, line 1601, but I think the theme is the same: It could have something to do with the 32 vs 64 stuff. Apparently, USB packets are usually 64 byte, including 2 status byte: https://www.ftdichip.com/Support/Knowledgebase/index.html?an232b_04smalldataend.htm
So maybe the USB FTDI packet with the ID is not actually sent to the TT by the FTDI adapter, for some reason, at least in the mode we are in when the FTDI is switched on first. Try to pad the ID to at least 64 temporarily, try to add a Serial1.flush() to force send, maybe try to send the ID multiple times?
You could be bold and solve the gordic knot by modifying the above mentioned part of TT’s firmware, like removing the ID request with the busy loop etc. completely, and see how it goes. Or changing the FTDI_STATUS_BYTES constant. That could help pinpointing the issue. Also, you might activate the TT’s debug output in monome.c and ftdi.c, which is commented out, and read it during boot.