app

Local-first trade for farms and co-ops
git clone https://radroots.dev/git/app.git
Log | Files | Refs | README | LICENSE

commit 834af4b874f3995d9bd3222485c703b12d43afd5
parent ad6d06f930714a9d378239afd2434be5ea568f61
Author: triesap <tyson@radroots.org>
Date:   Mon, 25 May 2026 22:27:56 +0000

sync: preserve empty sync transport requests

- let real sync transports receive empty requests with trigger and conflict context
- keep relay-only synthesis scoped to the unavailable fallback transport
- restore foreground resume and review-required manual refresh coverage
- validate with app check and full app cargo test

Diffstat:
Mcrates/launchers/desktop/src/runtime.rs | 9++++++++-
Mcrates/shared/sync/src/lib.rs | 4++++
2 files changed, 12 insertions(+), 1 deletion(-)

diff --git a/crates/launchers/desktop/src/runtime.rs b/crates/launchers/desktop/src/runtime.rs @@ -134,6 +134,10 @@ impl AppSyncTransport for UnavailableAppSyncTransport { SYNC_TRANSPORT_UNAVAILABLE_MESSAGE, )) } + + fn supports_empty_sync_request(&self) -> bool { + false + } } fn default_sync_transport() -> Box<dyn AppSyncTransport + Send> { @@ -3345,7 +3349,10 @@ impl DesktopAppRuntimeState { request: AppSyncRequest, started_at: &str, ) -> Result<AppSyncResult, AppSyncTransportError> { - if request.pending_operations.is_empty() && self.has_configured_relay_ingest() { + if request.pending_operations.is_empty() + && self.has_configured_relay_ingest() + && !self.sync_transport.supports_empty_sync_request() + { return Ok(AppSyncResult { run_status: AppSyncRunStatus::Succeeded, checkpoint: SyncCheckpointStatus::current( diff --git a/crates/shared/sync/src/lib.rs b/crates/shared/sync/src/lib.rs @@ -480,6 +480,10 @@ impl AppSyncTransportError { pub trait AppSyncTransport { fn sync(&mut self, request: AppSyncRequest) -> Result<AppSyncResult, AppSyncTransportError>; + + fn supports_empty_sync_request(&self) -> bool { + true + } } #[derive(Clone, Debug)]