The specs were derived from the code, not from the original requirements. So this is "we modeled what the code does, then found the code doesn't do what we modeled." That's circular unless the model captures intent that the code doesn't , and intent is exactly what you lose when you reverse-engineer specs. Would love to see this applied to a codebase where the original requirements still exist
The code was inconsistent with itself: that's not circular. Every path dropped the lock except one.
I took it as the extracted spec was weird and they looked into it.
But this seems like a reasonable approach for reverse-engineering, and it seems the bug they found is real.