writeText and Files.move can throw IOException, SecurityException, or AtomicMoveNotSupportedException. The exception previously propagated through updateTo into BulletinPoller.fetchAndParse's broad catch, which mislabelled it as "network_error" in the history. Wrap atomicWrite, log the real failure, and return before resetprop so the on-disk file and live props stay consistent on failure.