This is a stability and reliability release focused on the file swarm push system, xID resolution performance, and broader UI translation coverage, and fixed tray icon frozen stats.
Sync & Push Reliability
- content.db now stays in sync with disk. When
ContentDbDictlazy-loads acontent.jsonfrom disk, it now also writes the row back tocontent.db. Previously a divergence between the on-disk file and the DB row could make a peer appear permanently stale to others duringlistModifiedexchanges. - Stuck-file recovery on startup. New
ContentManager.flagStaleFiles()walks every loadedcontent.json, compares declared file sizes to what's on disk, and adds any missing or size-mismatched files tobad_filesso they get re-downloaded. Files with a disk mtime newer than theircontent.jsonare skipped (these are unsigned local edits by site owners and must not be overwritten). Own sites are skipped entirely. - Forced content diffs after
needFile.Site.downloadContentnow passesforce=TruetoloadContent, so newly fetchedcontent.jsonbytes are always diffed against the previous version, fixes a bug where a lazy-loadedself.contentscould match disk on timestamp and silently skip the diff, leaving newly-referenced files unflagged. - content.json exempted from hierarchy rejection. During peer updates,
getFileInforeturnsFalseforcontent.jsonfiles (they define the hierarchy and aren't listed in their ownfilesdict). The hierarchy check now skips that case so legitimatecontent.jsonupdates from peers are no longer dropped. - Inline-delivered files now credit the push counter. When
actionUpdateships inline files alongside acontent.json, those files are already at the peer,pushFilesToPeernow credits them againstpush_pending["pushed_count"]instead of redundantly issuingactionPushFilecalls. Push targets are reached faster with less network traffic.
xID Resolution
A significant rework of the XidResolver plugin caching and timeout behavior, addressing slow/blocking resolves when chain RPC endpoints are degraded.
- Hard
gevent.Timeouton RPC fetches has been reduced from 10s → 8s and wrapped in a hard timeout so a stuck call cannot block the hub. Slow calls (> 0.5s) are now logged at DEBUG. - Stale-cache fallback on RPC failure. If
resolve_with_prooffails outright, the resolver now serves the previous cached address (if any) rather than falling through to a 3-call fallback path that adds ~24s of blocking time when the RPC is down. - Persistent on-disk cache at
<data_dir>/xid_cache.json. Identity cache is no longer lost on restart; saves are batched and flushed viaatexit. - Aggressive positive caching, fast negative recovery. Positive identity TTL extended from 5 minutes → 30 days (revocation is handled separately via freshness check). Negative TTL reduced from 60s → 30s, names are permanent on-chain, so negatives almost always indicate typos or transient state and should recover quickly.
- Detailed timing logs added across the resolve path (
resolve_with_proof,get_attested_root, fallbackresolve/dns/peers) for diagnosing slow resolutions.
Translations (PR #23 by @mx5kevin)
Substantial new translation coverage across core UI plugins:
- Translate UI: added Arabic (
ar), Korean (kr), Portuguese (pt), Ukrainian (uk) - Sidebar, Trayicon, UIConfig, UiFileManager, OptionalManager, MergerSite: language packs added
- Dashboard site: added Korean and German language packs
- General language pack styling polish
Tray Fix (PR #24 by @MudDev )
The stats on the system tray where not being updated, this has been fixed.
Publish reliability (PR #25 by @MudDev )
Publisher now prioritizes peers with fresh connection activity and detects stale TCP sockets up-front, eliminating the "first publish times out, second one works" pattern caused by dead-but-cached connections lingering until the 20-minute idle ping.
Full changelog: v0.2.5...v0.2.6
New Contributors
Full Changelog: v0.2.5...v0.2.6