fix(avatar/desktop) + feat(wallet): asset spam, member name & on-demand wallet sync
Summary
Three independent changes (+ a CLAUDE.md note), each in its own commit:
🐛 fix(avatar): stop passing file paths to Image.asset
A wallet/safe imagePath can be either a bundled asset (assets/…) or an avatar file saved on disk. Two views passed disk paths straight to Image.asset, which can't read files → Unable to load asset: <path>.png log spam (blank fallback avatar). File paths now route through CachedAvatarImage (reads the bytes), matching the existing canonical handling. Files: wallet_header.dart, safe_selection_screen.dart.
🏷️ fix(desktop): show the member name in the wallet-options modal title
The desktop wallet-options modal title used WalletNameService.displayName(wallet.name) → always "Portefeuille principal" for the main wallet, even for a validated member account. It now mirrors the mobile app-bar logic (prefer the on-chain indexed identity name). File: wallet_options_modal.dart.
🔄 feat(wallet): on-demand "Synchronize wallets"
A new action in the shared safe-options screen (mobile + desktop) re-runs the HD derivation scan on demand and imports funded derivation wallets that are missing locally — e.g. after creating a derivation on another device.
A dedicated syncActiveSafe() was written rather than reusing scanDerivations() (which is import-only: it re-imports every derivation and deletes the safe on error). The new method:
- skips addresses already imported in any safe (no duplicates, never touches a shared safe);
- never deletes the safe.
A derivation is only detected when its address holds ≥ 1 Ğ1. Localized in fr/en/es/it/eo/de.
Testing
flutter analyzeclean.- Verified on Windows desktop: #2 (closed) the title shows the member name; #3 (closed) syncs a wallet created on another device and produces no duplicates on re-sync.
Pre-MR audit
A full multi-agent audit (security, performance, regressions, clean code, redundancy, coherence, pertinence) was run: no blocking/major issues. Applied findings: shared _createWallets helper (de-duplication), removed dead onStatusChanged plumbing, balance-scan timeout now reported as a timeout. Follow-up noted: add a unit test for syncActiveSafe invariants.