The day after I shipped the progress-saving work, on July 7, I opened Firefox to check it like a normal person would. I finished section one. I started section two. I hit refresh.
The site threw me back to the test selection screen as if I had never been there. Everything looked gone.
My automated test for exactly this scenario had passed. Green. Not a warning, not a flake, a clean pass on the precise behaviour I was now watching fail in front of me.
What was actually wrong
I reproduced it properly with a real browser driven by a script, rather than trusting my own clicking, and the answer was almost funny. The saving worked. The loading worked. The data was sitting safely in the browser the entire time, every answer intact.
The problem was that the restore only ever ran inside the function that starts a test, and that function only runs when you click "Start Test". After a real reload the page comes back exactly as it does on a first visit: selection screen showing, test area hidden. Nothing was watching for saved work at that moment. You had to click "Start Test" again for your answers to reappear, and there was no reason on earth for you to guess that.
So the honest description of the bug is not "progress was lost". It is "progress was there and the site never told you, and behaved exactly as if it were not". From where you sit, those are the same thing. The data being technically fine is no comfort to somebody staring at an empty screen.
Why the test was so confident
This is the part worth writing down. My test ran the page in a simulated browser, which is a fast and useful way to check logic. It did the following: fill in some answers, finish a section, simulate a reload, then call the start function, then check the answers are back.
Read that sequence again and you can see the lie. Then call the start function. The test did, by hand, the exact thing a real person never does. It supplied the missing click itself and then congratulated the code for the outcome.
The test was not badly written. It was answering a question that sounded like mine but was not: "does saving and restoring work if you ask for a restore?" The question I actually cared about was "what does a person see after pressing refresh and doing nothing else?" One of those is comfortable. The other is true.
That is the whole trap. A test can be perfectly correct and still measure the wrong thing, and when it goes green it hands you a certificate for a job you did not do. A test that lies to you is worse than no test, because no test at least leaves you suspicious.
What I changed, and what I changed in myself
The fix itself was straightforward once the diagnosis was right. The page now checks for saved work when it loads, on its own, for any test, and takes you straight back into the right place without waiting for a click that was never going to come. It is the guarantee that holds today when you sit a full mock test: step away, come back, and you are where you left off.
The more important change was to the test. I rewrote it to drive a real browser and to reproduce my own scenario with nothing added: finish a section, fill in some of the next one, perform a genuine page reload, click nothing at all, and then look at what is actually on the screen. That version would have caught the bug on the first run, before anyone else ever saw it. It passed, and this time the pass meant something.
Since then I have kept a rule that has served me better than any tool. A test earns its place by reproducing what a person does, in the order a person does it, and by checking what they can see. Not the internal state. Not the storage. The screen.
It costs more to write that way. Real browsers are slower than simulated ones and the tests are fiddlier. It is worth every second, because the alternative is a wall of reassuring green while somebody, somewhere, quietly closes the tab.
The uncomfortable general lesson
I keep coming back to how close I came to never finding this. The site was live. The tests were passing. If I had not opened a browser and behaved like an ordinary user on an ordinary evening, the bug would have sat there for weeks, silently costing me exactly the people I was trying to help, and I would have had a dashboard full of green ticks explaining why everything was fine.
So now I distrust good news that arrives too easily. When something passes on the first try, I go and look at the real thing with my own eyes. It has saved me more than once since, and it cost me nothing but a little humility.
Judge it yourself. The only opinion that counts is what happens in your browser.
The automated test described here now guards the free IELTS Writing test.