Write queue:
- notesRef.current updated synchronously inside queue so back-to-back
addNote calls see each other's results
Credit key lifecycle:
- saveCreditKeys requires encryption key (throws if missing)
- StoredCreditKeys gains isLocked field — locked accounts clearly marked
- deleteCreditKeys verifies owner address before deleting
- FundCreditsContainer requires unlocked keypair, no misleading progress
- SpendAuthContainer rejects signing with locked/empty private keys
Wallet switch safety:
- CreditsProvider uses generation counter for stale-response guard
- useKeypair resets isLoading on address change (prevents stuck state)
IDB:
- onversionchange handler closes and invalidates stale connections
Layout regression:
- PageLayout defaults to md:px-5 (original instances/rewards/earnings)
- blueprints/operators layouts pass md:px-8 lg:px-10 relative
UX honesty:
- Withdraw shows confirmed-notes balance, not total shielded balance
- AmountInput MAX works for 0n balance (was falsy check on "0")
Summary
Fixes all findings from the codex/claude ensemble review on #3147.
Write queue fix
Credit key lifecycle
Wallet switch safety
IDB
Layout regression fix
UX honesty
Test plan