--- id: 346c5a34-3fed-44ff-832a-b0c9eb42ca88 type: decision title: "Decision: Auto-sync on dashboard mount when all entities stale >24h" tags: [sba-scouting, rust, sync, dashboard, decision, auto-sync] importance: 0.6 confidence: 0.8 created: "2026-03-02T02:09:10.166132+00:00" updated: "2026-03-02T02:21:01.979645+00:00" relations: - target: 3a2ec27f-99ac-463f-a451-f99fe8fb1136 type: RELATED_TO direction: outgoing strength: 0.68 edge_id: f5e85e8d-acfa-4eda-8ca4-ddd5cd005849 - target: 39379120-896b-46cd-befa-b83d09d7556b type: RELATED_TO direction: outgoing strength: 0.73 edge_id: 373fbb71-c49c-4558-8fc2-52eb877e64b0 - target: 62ee21e8-2b56-4d38-a73d-47e2724f08c6 type: BUILDS_ON direction: outgoing strength: 0.73 edge_id: 285800e7-a6b0-4cf2-b017-91b209ef61bd - target: 77c0b897-4124-432f-84de-700ff82dcde1 type: RELATED_TO direction: outgoing strength: 0.8 edge_id: fbf4a323-421b-4964-ba27-bffd66df6d69 - target: d75e2afd-8348-4fe6-9ea1-731604505aa6 type: FOLLOWS direction: incoming strength: 0.8 edge_id: ec429a7a-f8ec-452e-a8ab-0defc5d5ca9f - target: 1d64c80d-61ec-434f-902a-3a511e2b92c2 type: BUILDS_ON direction: outgoing strength: 0.7 edge_id: aca4887b-3c88-443d-b7d1-fc137d414832 - target: e1fad787-7de7-4f62-afb7-6df2ffdea1ed type: RELATED_TO direction: outgoing strength: 0.65 edge_id: bbed0cf1-0bb9-4479-97f5-41b0dc40c63b --- # Auto-Sync on Dashboard Mount: Design Decision ## Context sba-scouting Rust TUI — dashboard screen loads sync statuses from the DB on mount. ## Decision After sync statuses load (in `SyncStatusesLoaded` handler), automatically trigger a full sync if ALL entity types (teams, players, transactions) have `last_sync` older than 24 hours OR have never been synced. ## Rationale - Avoids stale data on first launch of the day without requiring manual user action - "All entities" check prevents partial re-sync when only one type is fresh - Only fires on dashboard mount (when statuses load), not on every navigation to dashboard ## Implementation - Check fires in `DashboardState::handle_message()` inside the `SyncStatusesLoaded` arm - Required adding `settings: &Settings` parameter to `handle_message()` to pass to `trigger_sync()` - Standings use a separate `standings_cache` table with their own refresh mechanism — they do NOT participate in this check ## Scope Limits - Does not affect standings cache - Does not re-trigger if user navigates away and back (statuses only load once on mount)