In my experience, it has to do with disabled nodes in your graph. Macros go over 100% for sure, but in the end it all comes out at 100% overall, unless you have some disabled output nodes in your graph (that are connected). That’s why build finished at 98%, those nodes weren’t built but still are part of the estimation algorithm (probably).