Our coverage scan reported zero uncovered points. A customer on the eastern edge of the service area still could not place an order.
The scan was ours: walk a lattice over the area, test each position against the zone index, report the misses. The bug was one line of arithmetic. The east-to-west span happened to be an exact multiple of our spacing, but in binary floating point the division came back a hair under the whole number, truncation dropped the last column, and the only uncovered strip sat right on the edge we never sampled.
So the step count now rounds span over spacing to the nearest whole number when the two differ by less than 1e-9, then adds one, so both ends of every axis actually get sampled and not just the start.
The second thing we broke was the opposite mistake. Someone ran the same scan at a ten-metre spacing over the envelope of every zone we had. No output, no progress, a job we eventually killed. Now the scan multiplies columns by rows first and refuses anything above its sample ceiling (a million positions by default) before it touches the index, and the error tells you to widen the spacing or shrink the area. A spacing that is not a finite positive number is refused the same way, as is an inverted box, and an index with no zones to bound: no zones is an error, not an empty success.
The last change was about the report, not the scan. A flat list of every missed position reads as "everything is broken". So we flood-fill the misses by four-neighbour adjacency into gaps, sort them largest first, and give each gap a representative, the member nearest that gap's bounding-box centre, so you get one coordinate per hole that you can paste straight into a map. Completeness is just "no gaps". The one-line description names the uncovered count, the number of gaps, the size of the largest and its representative. And when you already have real addresses, you check those instead, in the order you gave them.
This all lives in our open-source delivery-zones project.
The part we keep relearning: a geometric check is only as trustworthy as its sampling, and a sampling bug fails quietly on the boundary, which is exactly where the customers are. That leaves you with the choice of how to verify coverage of a service area: a lattice scan, your real order history, or both.