Local flash needs cloud flash first?

In Particle Workbench, I created a new project, configured my device (Boron, DeviceOS 3.1.0), and then flashed it locally. My external LED did not blink. I then flashed my device via the cloud, and after a lot of rainbow effects, the LED did blink – and subsequently local flashing is working. The best I can figure, the DeviceOS needed updating, and for some reason flashing it locally didn’t trigger that. Does that seem right? Or was something else going on?

Yes, that is expected.

When you upgrade Device OS from Workbench using flash application and Device OS, it only updates the system parts. There’s typically a required bootloader upgrade, and on the Boron there could also be a SoftDevice update. These will happen OTA if you don’t do them over USB.

I usually use Device Restore over USB to update all of the necessary parts first, then local compile and flash from Workbench.