A feature request born from watching the clock. Scanning a large account for the first time took about twenty minutes, and the entire time both sides of the panel said only “a scan is running”. The account side told the owner to refresh the page themselves to find out more.
The reason nothing moved, take one
Building a real progress bar meant first asking whether there was anything to measure progress against. The scan has two halves, and the first wasn’t reporting anything mid-scan because it was configured to print only infected files. The first fix was to stop asking it to stay quiet. It shipped and was tested against a large real account. Nothing moved, though the scan was genuinely running.
The reason nothing moved, take two
The next suspicion was output buffering, a known cause of silence followed by one dump at the end. The usual fix was applied and tested. Still nothing.
That was the moment to stop guessing and test the scanner directly, bypassing every layer. The answer had nothing to do with buffering: the scanner simply doesn’t report clean files. There was never a signal to stream, so the premise of the first fix could not have worked.
Building the signal instead of hunting for one
If the tool won’t report progress, the fix is to create checkpoints it has to pass through. The file list is split into batches, each scanned separately, and after each one the count of files covered is reported. Flagged files still get their own individual report.
Not free
On a large site that is a lot of extra reporting, and keeping all of it would make saved scan logs grow for no reason. The two purposes stay separate: every batch marker counts toward the running total, but only meaningful lines are recorded. A clean scan’s saved record reads as quiet as before.
Two halves, one bar
The two halves of the scan don’t cover the same files, so the honest total isn’t “every file, twice”. Getting that arithmetic wrong would have produced a bar that stalls near the end of every scan. The second phase’s count also picks up where the first left off, rather than restarting and making the bar jump backward.
What both sides show now
An estimate of time remaining sits above the bar, computed live from actual speed. For the first few files it says it is still working it out, since a rate from a handful of files swings wildly and reads as broken. The admin Overview gained a card listing every account being scanned, each with its own bar, and the account side replaced its “come back and refresh” message with the same bar, updating on its own.
Tested, full suite green, pint clean, and verified against a large real run: the count climbed steadily to completion with a clean result.