# Bitcoin Armory — Manual Smoke Test

Run this checklist against the real running app (`cargo tauri dev`) before merging to main.
Check each box when it passes. Note the date and your name at the top.

**Date:** ___________  **Tester:** ___________  **Build:** `git rev-parse --short HEAD`

---

## Prerequisites

- Bitcoin Core running with `server=1` in `bitcoin.conf`
- At least one offline-generated watch-only wallet `.json` file available
- A second watch-only wallet `.json` file (different wallet) for multi-wallet tests
- A pre-signed PSBT file for the offline signing test (see Task F-7)

---

## Online Mode

### Startup
- [ ] O-1. Launch app. Mode selector appears with Online and Offline buttons centered on screen.
- [ ] O-2. Select **Online**. App loads without errors in the console.
- [ ] O-3. **Node page**: Bitcoin Core shows as connected. Block height, peer count, and version display in mono font.
- [ ] O-4. Chain shows "main" (or "test" on testnet). Sync percentage at or near 100%.

### Wallet Import
- [ ] O-5. Click **Import Wallet** (or equivalent). Upload the watch-only `.json` file.
- [ ] O-6. Import completes. Wallet appears in the wallet list in the sidebar.
- [ ] O-7. Log in to the wallet. Sidebar shows wallet label and balance (may be 0 BTC on a fresh wallet).

### Addresses
- [ ] O-8. Navigate to **Addresses**. Three sections visible: Address Book, Wallet Addresses, Silent Payments.
- [ ] O-9. Expand **Wallet Addresses** → SegWit and Taproot groups shown with `bc1q`/`bc1p` addresses.
- [ ] O-10. **Address Book**: Click **+ Add**, fill in label + address, save. Entry appears in the list with Copy/Send/Delete buttons.
- [ ] O-11. Switch to a different wallet. Address book is empty (per-wallet, not shared).
- [ ] O-12. **Silent Payments** section: SP receive address (`sp1...`) shown at top with copy button. If SP UTXOs exist, output addresses (`bc1p...`) shown with status (unspent/spent), amount, and block height.

### Explorer
- [ ] O-13. Navigate to **Explorer**. Node status bar shows Node, Chain, Block, Peers in mono font.
- [ ] O-14. Search a known mainnet txid → transaction details render (TXID, status, block, fee, inputs, outputs).
- [ ] O-15. Click an input address → address view loads with UTXO list.

### Multi-Wallet
- [ ] O-16. Import the second watch-only wallet. Both wallets appear in the wallet list.
- [ ] O-17. Switch to the second wallet. Sidebar label and balance update to reflect the second wallet.
- [ ] O-18. Navigate to Addresses. Addresses shown belong to the second wallet (spot-check: first address differs from the first wallet's first address).
- [ ] O-19. Switch back to the first wallet. Correct balance and addresses restore.
- [ ] O-20. **Cross-wallet isolation**: After switching, verify balance, transactions, SP balance, and address book all belong to the active wallet — no stale data from the previous wallet.
- [ ] O-21. Log out of the first wallet. It disappears from the wallet list. Second wallet remains.

### Send Flow
- [ ] O-22. With a wallet loaded, open the **Send** screen. Available balance shown.
- [ ] O-23. Enter a valid Bitcoin address and an amount. Fee estimate appears.
- [ ] O-24. Click **Max** button. Amount field populates with full balance minus estimated fee.
- [ ] O-25. Open **Coin Control**. UTXOs listed belong to the active wallet only — no UTXOs from other wallets.
- [ ] O-26. Select specific UTXOs in coin control. Available amount updates to reflect selection.
- [ ] O-27. Cancel/close the send flow. No state left over (balance unchanged, no phantom transaction).

### Silent Payments
- [ ] O-28. If wallet has SP support, navigate to **Silent Payments** tab. SP address displayed.
- [ ] O-29. Start SP scan. Progress indicator shows blocks being scanned.
- [ ] O-30. If SP UTXOs exist, they appear in the SP UTXO table with correct confirmation counts (not hardcoded 1).
- [ ] O-31. SP UTXOs also appear on the Addresses tab under Silent Payments → output addresses.

### Settings
- [ ] O-32. Navigate to **Settings**. Wallet info displayed.
- [ ] O-33. Click **Rescan Blockchain**. Confirmation prompt appears. Rescan initiates without error.
- [ ] O-34. Change wallet password. Old password required, new password set successfully.

---

## Offline Mode

### Startup
- [ ] F-1. Launch app. Select **Offline**. App loads. No network connectivity indicator or node status shown.

### Key Generation
- [ ] F-2. Create a new wallet. Mnemonic (12 or 24 words) displays on screen.
- [ ] F-3. Note the first 3 words. Proceed through the flow.
- [ ] F-4. Wallet created. Addresses page shows `bc1q` or `bc1p` addresses.

### Watch-Only Export
- [ ] F-5. Export the watch-only file. A `.json` file saves to disk.
- [ ] F-6. Open the file in a text editor. Confirm:
  - `"watch_only": true` is present
  - `"account_xpubs"` is present with at least one entry
  - No `"master_xprv"`, `"seed"`, or `"mnemonic"` keys exist anywhere in the file

### PSBT Signing (full air-gap loop)
- [ ] F-7. Load a pre-prepared unsigned PSBT file into the offline app (use the Sign screen or drag-and-drop).
- [ ] F-8. PSBT details display: destination address, amount, fee.
- [ ] F-9. Enter wallet password if encrypted. Signing proceeds.
- [ ] F-10. Signed PSBT exports to a file successfully.
- [ ] F-11. Verify the signed PSBT is valid: open a terminal and run:
  ```
  bitcoin-cli decodepsbt $(base64 -i signed.psbt)
  ```
  Confirm no error and the PSBT shows a valid input with a signature.

---

## Notes / Failures

_Record any failures here with steps to reproduce:_

```
```
