Yes, very much by design:
[…] you should realize that these frame counters reset to
0every time the device restarts (when you flash the firmware or when you unplug it). As a result, The Things Network will block all messages from the device until theFCntUpbecomes higher than the previousFCntUp. Therefore, you should re-register your device in the backend every time you reset it.
So, when using ABP for production, you should save the counters in non-volatile memory. For insecure debugging, one can disable the check.