Release v8.11.0. Bundles app tampering detection + enforcement and several lifecycle/networking fixes.
App tampering detection & DOS enforcement
appTamperingDetectionServicerecords lifecycle anomalies (container_vanished,network_pruned,mount_vanished,crontab_wiped,
recreation_failed,frequent_restart) into a newapptamperingeventscollection with a 30-day TTL. History is queryable viaGET /apps/tamperingevents/:appname.appTamperingBlocklistServicefetcheshelpers/tamperingblockednodes.jsonfrom master every 12h. If this node's collateral txhash is listed
and has more than 10 tampering events, a sticky DOS message is set via a newstickyDosMessage/stickyDosStateslot influxNetworkHelper
that cannot be cleared by unrelated DOS checks — only the next tick can clear it (if the txhash leaves the list or events drop).- Frequent restart tracking: a
nodestartuptrackerdoc records the previous startup; restarts under one hour emit afrequent_restartevent
under a synthetic__system__app. - ArcaneOS skipped via a fluxbenchd-backed three-state check (true/false/null). A null result (bench unreachable) skips the tick so a real
ArcaneOS node is never falsely DOSed during an outage.
Fixes
getCgroupBurstPathnow early-returns on pid 0 from stopped/exited containers instead of throwing through/proc/0/cgroup.monitorFolderHealthnow passessendMessage=truetoremoveAppLocallywhen hard-removing after prolongedcannot_sync, so peers drop this IP
fromappLocationsand the next spawner doesn't reselect the unreachable node.- Sticky-DOS clear is scoped to our own
DOS_MESSAGE_PREFIXso it can't clobber state owned by a hypothetical future writer. start()in the blocklist service respectsstop()during the daemon-sync wait — cancellable sleep + stopping flag short-circuits polling.recordEvent('mount_vanished')is now awaited insyncthingFolderStateMachinefor consistency.- Dropped
tamperingBlocklistCache: its 6h TTL was shorter than the 12h enforcement interval, so every fetch missed anyway.
Tests
New unit coverage for appTamperingBlocklistService, appTamperingDetectionService, and sticky-DOS behavior in fluxNetworkHelper.
Test plan
-
npm run lint -
npm run test:zelback:unit - Verify tampering events are recorded and queryable via
GET /apps/tamperingevents/:appname - Confirm sticky DOS only clears on its own 12h tick and preserves through unrelated DOS checks
- Confirm ArcaneOS node is not DOSed (bench returns true) and is skipped (bench returns null)