v0.4.2: Welcome screen, status ticker, notifications, text scaling, networking fixes

Welcome screen with staggered counters while backend bootstraps. Header status
ticker for new posts/messages/reactions/comments/connection changes. Notification
fallback chain (Tauri plugin → Web API → notify-rust). Responsive text scaling
(Small/Normal/Large, persisted). Diagnostics moved to popover with on-demand
connections. Share details lightbox with QR code. Connect string prefers external
address. Stale N1 fix (disconnected routes excluded). Replication handler actively
fetches posts+blobs from requester. Hole punch registers remote address for relay.
Replication semaphore (3 concurrent). Peer labels show truncated node ID.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Scott Reimers 2026-03-22 14:15:49 -04:00
parent 79922a9208
commit 6004cae8a8
10 changed files with 446 additions and 95 deletions

View file

@ -2883,10 +2883,12 @@ impl Storage {
for (nid, _, _) in mesh_peers {
ids.insert(nid);
}
// Add social routes
// Add only ONLINE social routes (not disconnected)
let routes = self.list_social_routes()?;
for route in routes {
ids.insert(route.node_id);
if route.status == crate::types::SocialStatus::Online {
ids.insert(route.node_id);
}
}
Ok(ids.into_iter().collect())
}
@ -4870,9 +4872,16 @@ mod tests {
preferred_tree: vec![],
}).unwrap();
// Disconnected routes should NOT be in N1 share
let n1 = s.build_n1_share().unwrap();
assert!(n1.contains(&peer_a));
assert!(n1.contains(&follow_b));
assert!(!n1.contains(&follow_b), "Disconnected social route should not be in N1");
// Set to Online — now it should be included
s.set_social_route_status(&follow_b, SocialStatus::Online).unwrap();
let n1 = s.build_n1_share().unwrap();
assert!(n1.contains(&peer_a));
assert!(n1.contains(&follow_b), "Online social route should be in N1");
}
#[test]