The extraction spinner drew straight to stderr from inside the library, so every consumer got terminal UI it never asked for. extract_tarball and its helpers now count extracted files themselves and emit Progress events; rendering belongs to the caller.