Symptom

Nightly architectural scan flagged delay(1500) in UniversalAppNodeProcessor.showActivity() as a potential blocking call, and cited appendText() in FileBasedOperations as blocking the underlying thread on a Raspberry Pi.

Root cause

FileOperations.appendDataPointLog was a plain (non-suspend) fun, and both the JVM (FileBasedOperations.appendDataPointLog) and Android (AndroidFileOperations.appendDataPointLog) implementations called File.appendText() — a blocking filesystem write — without dispatching to Dispatchers.IO. The call site in ClientNodeManager.postSnapshot ran this on the calling thread (the UI/compose thread for local-node writes), potentially blocking Compose recomposition on every DataPoint snapshot submission for local nodes.

Note: the delay(1500) in UniversalAppNodeProcessor is a proper coroutine suspension and is NOT a blocking call — this was a false lead in the Kraken report.

Fix

Prevention