| name | wallet-smoke-test |
| description | Checklist-driven manual smoke test for Midnight Wallet extension. Use when finishing a feature branch, before PR, or after major UI changes. Generates test checklist from current screens, guides user through each flow, collects pass/fail screenshots, outputs test report. Triggers on "smoke test", "test the wallet", "QA check", "manual test". |
| version | 1.0.0 |
| scope | public |
Wallet Smoke Test
Checklist-driven manual smoke test for Midnight Wallet browser extension.
Integrations
upstream:
- skill: opsx-team-apply / opsx:apply
receives: completed implementation ready for testing
downstream:
- skill: gh-commit / gh-pr
produces: test report confirming readiness for merge
When to Use
- Feature branch implementation complete
- Before creating PR to dev/main
- After major UI changes or refactors
- User says "smoke test", "test the wallet", "QA check"
Workflow
1. DETECT → Read current screens + features from codebase
2. GENERATE → Build test checklist from detected features
3. BUILD → Start dev server
4. GUIDE → Walk user through each test flow
5. COLLECT → Record pass/fail + screenshots
6. REPORT → Output test report with results
Step 1: DETECT
Scan the codebase to determine which screens and features exist:
ls packages/extension/entrypoints/popup/screens/
grep "MessageType\." packages/extension/lib/messaging/types.ts | grep -v "//"
git branch --show-current
Build a feature list from detected screens.
Step 2: GENERATE
Map screens to test flows. Each flow has:
- Name: Short identifier
- Steps: Numbered user actions
- Expected: What should happen
- Category: onboarding / core / settings / edge-case
Base checklist template (adapt based on detected screens):
Onboarding
| # | Flow | Steps | Expected |
|---|
| 1 | Welcome screen | Open extension popup | Shield icon + "Midnight Wallet" + Create/Import buttons |
| 2 | Create wallet | Click "Create New Wallet" | Navigate to Create Password screen |
| 3 | Password validation | Type < 8 chars, blur | Red border + "at least 8 characters" error |
| 4 | Password strength | Type 12+ chars with mixed case/symbols | 4/4 strength bar, "Strong" label |
| 5 | Show/hide password | Click eye icon | Toggle between dots and plaintext |
| 6 | Terms checkbox | Uncheck Terms | Create Wallet button disabled |
| 7 | Create wallet success | Fill valid password + confirm + agree + submit | "Wallet Created!" screen with account card |
| 8 | Account rename (onboarding) | Click pencil icon on success screen | Inline edit, Enter saves new name |
| 9 | Open wallet | Click "Open Wallet" | Navigate to Home screen |
Core Wallet
| # | Flow | Steps | Expected |
|---|
| 10 | Home layout | View Home screen | Balance (centered), Send/Receive circles, Activity section, Status bar |
| 11 | Balance display | Check balance area | "0.00 tNIGHT" + "DUST: 0 / 100" |
| 12 | Backup banner | Check top of Home | Amber banner "Recovery phrase not backed up. Back up now" |
| 13 | Copy address (header) | Click copy icon next to account name | Toast "Unshielded address copied" |
| 14 | Network badge | Check header right side | "Preview" badge with green dot |
| 15 | Status bar | Check bottom of Home | Green dot + "Preview Testnet" + "Block #N" |
| 16 | Block height updates | Wait 10+ seconds | Block # should update (if connected) |
| 17 | Empty activity | Check Activity section | "No transactions yet" with inbox icon |
Account Management
| # | Flow | Steps | Expected |
|---|
| 18 | Account dropdown | Click "Account 1 v" | Dropdown with account list + "+ Add Account" |
| 19 | Add account | Click "+ Add Account" | Spinner, then "Account added" toast, new account in list |
| 20 | Rename account | Click pencil icon next to account | Inline edit field, Enter saves, name updates in header |
| 21 | Switch account | Click different account in dropdown | Dropdown closes, header shows selected account name |
Addresses (Receive)
| # | Flow | Steps | Expected |
|---|
| 22 | Navigate to Addresses | Click Receive button | Addresses screen with 3 cards (Shielded/Unshielded/Dust) |
| 23 | QR codes displayed | Check all 3 cards | QR codes visible with colored borders (violet/amber/pink) |
| 24 | Different addresses | Compare addresses on 3 cards | Each has different prefix (mn_shield-addr/mn_addr/mn_dust) |
| 25 | Copy confirmation | Click "Copy address" on any card | Security modal slides up with 3s countdown |
| 26 | Copy countdown | Wait for countdown | "Wait (3s)" → "Wait (2s)" → "Wait (1s)" → "Copy to Clipboard" enabled |
| 27 | Copy success | Click "Copy to Clipboard" after countdown | Checkmark + "Copied!" feedback, address in clipboard |
| 28 | Cancel copy | Click "Cancel" on confirmation modal | Modal closes, nothing copied |
| 29 | Back to Home | Click Back | Returns to Home screen |
Backup Flow
| # | Flow | Steps | Expected |
|---|
| 30 | Start backup | Click "Back up now" on banner | Password confirmation screen |
| 31 | Wrong password | Enter wrong password + submit | Red error message |
| 32 | Correct password | Enter correct password + submit | 24-word recovery phrase grid |
| 33 | Security warnings | Check recovery phrase screen | Red warning box with 3 bullet points |
| 34 | Copy mnemonic | Click "Copy to Clipboard" | Toast "Copied to clipboard" |
| 35 | Complete backup | Click "I've backed it up" | Return to Home, banner gone |
Network Settings
| # | Flow | Steps | Expected |
|---|
| 36 | Navigate to settings | Click network badge in header | Network Settings screen |
| 37 | Preview testnet | Check default state | Preview Testnet card active (violet border + checkmark) |
| 38 | Endpoint fields | Check endpoint URLs | 3 pre-filled URLs (RPC, Indexer, WS) |
| 39 | Save config | Click Save Configuration | Success toast |
| 40 | Back to Home | Click Back | Returns to Home screen |
TX Detail (if transactions exist)
| # | Flow | Steps | Expected |
|---|
| 41 | Navigate to TX | Click a transaction row | TX Detail screen with status badge, amount, details |
| 42 | Copy TX hash | Click copy icon next to hash | Checkmark feedback |
| 43 | Back to Home | Click Back | Returns to Home Activity list |
Lock / Unlock
| # | Flow | Steps | Expected |
|---|
| 44 | Lock wallet | Click Lock button in header | Navigate to Unlock screen |
| 45 | Wrong password | Enter wrong password | Error "Wrong password" |
| 46 | Correct unlock | Enter correct password | Home screen with balance + previous state |
Import Wallet
| # | Flow | Steps | Expected |
|---|
| 47 | Import flow | Welcome → Import Existing Wallet | Import Mnemonic screen with 24-word grid |
| 48 | Paste mnemonic | Paste valid 24 words | Fields populate, word count shows 24/24 |
| 49 | Invalid mnemonic | Enter random words + submit | Error message |
| 50 | Valid import | Paste valid mnemonic + set password | Home screen with imported account |
Step 3: BUILD
Start the dev server if not already running:
pnpm dev:extension
Tell user:
Dev server running. Load the extension in Chrome:
chrome://extensions → Developer mode ON
- Load unpacked →
packages/extension/.output/chrome-mv3-dev/
- Click extension icon to open popup
If extension is already loaded, tell user to click the reload button on the extension card.
Step 4: GUIDE
Present the checklist using AskUserQuestion, one category at a time.
For each category, present the flows and ask:
Which tests passed? (select all that pass)
Options: list each test # + name as multiSelect.
After each category, ask if there are issues to report. If user provides a screenshot, analyze it and note the issue.
Step 5: COLLECT
Track results in a structured format:
PASS: [test #s]
FAIL: [test #s with descriptions]
SKIP: [test #s with reason]
Step 6: REPORT
Output a test report:
## Smoke Test Report — YYYY-MM-DD
**Branch**: feat/xxx
**Tester**: [user]
**Result**: X/Y passed (Z%)
### Passed (X)
- [list]
### Failed (Y)
| # | Flow | Issue | Screenshot |
|---|------|-------|------------|
| N | Name | Description | [if provided] |
### Skipped (Z)
- [list with reasons]
### Recommendation
[READY FOR PR / NEEDS FIXES / BLOCKED]
Save report to docs/sessions/YYYY-MM-DD-smoke-test-<branch>.md
Failure Severity Classification
When reporting FAIL results, classify each by severity:
| Severity | Definition | PR Decision | Examples |
|---|
| P0 Blocker | Core flow broken — wallet unusable | Block PR | Create wallet fails, lock/unlock fails, address copy fails |
| P1 Major | Important feature broken but workaround exists | Block PR (prefer fix) | Account rename broken, backup flow fails, network settings error |
| P2 Minor | Visual issue or edge case, core flows work | Merge with ticket | Label truncated, animation glitch, minor layout issue |
In the report, prefix each FAIL with its severity: [P0], [P1], or [P2].
Critical Path (Time-Limited Testing)
If only 15-20 minutes available, prioritize this minimal set:
| Priority | Tests | Category |
|---|
| Must test | 1-7 | Onboarding (create wallet) |
| Must test | 44-46 | Lock / Unlock |
| Must test | 22-28 | Addresses (receive + copy) |
| Must test | 30-35 | Backup flow |
| Skip if needed | 36-43 | Network settings |
| Skip if needed | 47-50 | Import wallet |
| Skip if no transactions | 41-43 | TX Detail |
If any P0 test fails, stop and report immediately — no need to continue other categories.
Edge Cases
| Situation | Action |
|---|
| No dev server running | Start it with pnpm dev:extension |
| Extension not loaded in browser | Guide user through chrome://extensions load |
| Screen doesn't exist (not implemented) | Skip those tests, mark as N/A |
| User can't test TX flows (no transactions) | Skip TX Detail category |
| Network not connected | Note in report, skip real-time tests |
| Existing wallet installed (skip onboarding?) | Test import flow OR instruct to reset: chrome://extensions → Remove → Reload |
Adapting the Checklist
The base checklist above covers the current E4 state. As features are added:
- E5 (Transaction Pipeline): Add Send flow tests
- E6 (DApp Connector): Add Connect DApp tests
- E7 (ZK Proving): Add proof verification tests
- E9 (Brand & Design): Add visual regression checks
Read the screens directory to detect new screens and append relevant test flows.