mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-08-11 08:47:33 +00:00
Correctness: - ReloadMintViewModel.confirm() now guards against re-entry (only starts from Configuring/Failed and flips to Working synchronously), so a double-tap or a Failed-state Retry can't launch two pipelines that double-spend the source / double-mint the target. - sendNutzapAndFinish awaits the real CashuWalletState.sendNutzap (throws on failure) and reports Done only on success — a send that fails after a successful reload now surfaces as Failed instead of popping the screen on a premature "done" and silently stranding the moved funds. - The reload pipeline runs on the long-lived AccountViewModel scope; the VM now holds its Job and cancels it in onCleared(), so leaving the screen stops the (up to 3-minute) Lightning poll instead of hammering the mint unobserved. - rebalance() poll budget widened to a steady ~60s so a merely-slow mint no longer strands funds that already left the source. - Mint a small headroom buffer (RELOAD_FEE_BUFFER_SATS) above the bare shortfall so the follow-up nutzap's own swap fee doesn't leave the target a sat short; the source-feasibility gate accounts for it. Regressions from the settings merge: - mergeZapAmounts / the picker no longer .sorted() the amounts — a user's saved preset order is preserved instead of being silently reordered ascending. - The on-chain send dialog falls back to DEFAULT_ONCHAIN_ZAP_SATS when the unified list has nothing above the on-chain minimum, restoring the guaranteed quick-pick preset. - zapClick's one-tap (single-amount) path now checks rail capability and opens the picker when the recipient can't receive Lightning, instead of firing a doomed Lightning zap. Cleanup: - Centralized the mint-quote "settled" predicate as MintQuoteBolt11ResponseDto .isSettled(); rebalance, ReloadMintViewModel and CashuWalletViewModel now share it instead of three copies of paid==true || PAID || ISSUED. https://claude.ai/code/session_01HNE2z7CSYZ2G8KwC5fziJn