It's a bit of a double edge sword. We have been putting out 0.7.0-rc.x releases since mid last year, and it sounds like maybe you haven't tried them? I wonder how we can better inform you of these pre-releases beyond the Particle Firmware Updates Thread and the Particle Tools Changelog (<- definitely subscribe to this one if not to both!)
If we don't create the next default version of firmware, it's very possible developers would be stuck on old buggy system firmware and never realize there are updates. It's not our intention to make breaking changes, but they can happen, and sometimes not because we don't try to keep them from happening. There are lots of different ways to write user firmware and there may be an edge case that just doesn't work as expected between changes.
You can pin your build target to a version so it won't update automatically, and if you leave it on default it will get updates when the roll out. If you have a product, ideally you would be testing pre-releases as they come out to be better prepared for the default release, which you can also make a controlled rollout. For development, usually it's ok to have some stumbling points because you can revert if something goes wrong. If you have remote development devices, I would recommend testing locally first before updating remotely.
Back to your issue, it looks like perhaps this is a case of using an API in a way that appeared to be the expected behavior, and when we fixed the expected behavior to what we originally intended it caused your firmware not to respond the way you wanted.
When adding while loops without a timeout to a single-threaded application, it's a good idea to add Particle.process().
while (Particle.connected() == false) {
Particle.connect();
Particle.process(); // I suspect adding this would fix it for your case
}
It's also important to note if Particle.connect() blocked until it could connect (and it could not connect for some reason), with your original code it would hang out there indefinitely.
Another way
void loop() {
if (Particle.connected() == false) {
Particle.connect();
}
if (Particle.connected()) {
// run my cloud connected code
}
// run my non-cloud connected code
}
There are lots of ways to write this, and many more ways to add retries, timeouts, etc.. to the schema.