OK, I'm trying to start from a known good state...
I'm now using the example programmer and target sketches, with network settings adapted for my environment (network ID, key, nodeid, gateway, frequency definition). I'm using the same hardware for the target. I've uploaded the target sketch to the device over a usb connection. Disconnected the device, and tried installing my sketch OTA using ota.py from the command line as before.
I also downloaded the SPIFlash and RFM69 libraries from github again and copied the extracted folders (with the -master suffixc removed) into the Arduino libraries folder (having renamed the folders already there).
The error persists.
Seans-MBP:pythonLibs sean$ python ota.py -f FiveSensorsEtapeSend.ino.hex -t 99 -s /dev/tty.usbserial-DN02YR6B
TO:99
Moteino: [TO:99:OK]
TARGET SET OK
File found, passing to Moteino OTA Programmer...
FLX?
FLX?
Moteino: [FLX?OK]
HANDSHAKE OK!
TX > FLX:0:300000000C94EB000C94F1040C94CA040C9413010C9413010 C9413010C9418050C9413010C9413010C9413010C9413010C 941301E5 RX > FLX:0:OK
<SNIP.....>
TX > FLX:315:303B100018F0495D31FD4052419302D0A9F7EACFB4E0A6959 795879577956795BA95C9F700976105710508959B01AC010A 2E0694BF RX > FLX:315:OK
TX > FLX:316:2C3B40005795479537952795BA95C9F7620F731F841F951FA 01D0895F894FFCF6D026D02FFFFFFFF2C01000038 RX > FLX:INV:254
Programmer reply 'FLX:INV:254' does not match expected pattern: 'FLX:([0-9]*):OK'
Timeout, retry...
TX > FLX:316:2C3B40005795479537952795BA95C9F7620F731F841F951FA 01D0895F894FFCF6D026D02FFFFFFFF2C01000038 RX > FLX:INV:254
Programmer reply 'FLX:INV:254' does not match expected pattern: 'FLX:([0-9]*):OK'
Timeout, retry...
TX > FLX:316:2C3B40005795479537952795BA95C9F7620F731F841F951FA 01D0895F894FFCF6D026D02FFFFFFFF2C01000038 RX > FLX:INV:254
Programmer reply 'FLX:INV:254' does not match expected pattern: 'FLX:([0-9]*):OK'
FAIL: timeout (are you running the latest OTA libs/sources?)
I have a small collection of Moteinos so I could try a different device, but I'm clutching at straws now.
Sean