Build the Cachet wallet app in demo mode, navigate to every screen via Android MCP, capture screenshots, compare element-by-element against approved wireframe SVGs, and output a structured fidelity report.
You are reviewing the Android wallet app's UX fidelity against approved wireframes.
adb devices)devenv shell -- android:install
Read design/wireframes/MANIFEST.md to get the ordered list of screens, their wireframe SVGs, and navigation steps. Note both the main screens and the scenario-specific screens.
Launch the app normally (no ). For each onboarding wireframe in the manifest:
--ez demo_mode truemcp__android__get_screenshot to capture the current screendesign/wireframes/Force-stop and relaunch in demo mode:
adb shell am force-stop id.cachet.wallet.android.demo
adb shell am start -n id.cachet.wallet.android.demo/id.cachet.wallet.android.MainActivity --ez demo_mode true
For each main tab wireframe in the manifest:
mcp__android__get_uilayout to find button coordinates)Follow the navigation steps in the manifest to reach overlay flows:
adb shell am start -n id.cachet.wallet.android.demo/id.cachet.wallet.android.MainActivity --ez demo_empty truecachet-04-result-pass.svg)For each scenario in the Scenario-Specific Screens section of MANIFEST.md:
adb shell am force-stop id.cachet.wallet.android.demo
adb shell am start -n id.cachet.wallet.android.demo/id.cachet.wallet.android.MainActivity --ez demo_mode true --es demo_scenario <name>
Scenario walkthrough order:
revoked scenario → capture vault (compare holder-04-vault-revoked.svg), then tap the revoked card → capture detail (compare cachet-01-detail-revoked.svg)seller-only scenario → tap FAB, pick Seller pack → Verify & Share → capture result (compare cachet-05-result-fail-seller.svg)happy scenario → tap FAB, pick Age pack → Verify & Share → capture result (compare cachet-04-result-pass-age.svg)happy scenario → tap identity card → capture detail (compare cachet-01-detail-hardware.svg if hardware indicator visible)Output a markdown report with the structure shown in the Report Template section.
For EVERY screen, systematically compare these aspects against the wireframe SVG. Do NOT rely on overall impression — check each point explicitly.
List every element in the wireframe from top to bottom, then verify the app renders them in the exact same order. Flag any swapped, missing, or extra elements. This is a common source of gaps (e.g., CTA button above vs below a card).
For each visual element in the wireframe, verify the app uses the correct component type:
CachetMark, not a colored circle or emojiBrandShieldMark, not circles/arcsDirectionIndicatorCompare every text string: titles, subtitles, button labels, status labels, card content. Flag any vocabulary mismatches (e.g., "credentials" vs "cachets").
uiautomator dump to check actual pixel bounds if centering looks off.mcp__android__get_uilayout)These are issues that have been caught before. Always verify they haven't regressed:
DrawScope.scale() call MUST use pivot = Offset.Zero. Without it, SVG path drawings shift rightward. Check every shield/logo on screen.<use href="#childcare-shield"> etc). The app must use CachetMark(type=...), not colored circles or emoji as placeholder.## UX Fidelity Report — [date]
### Summary
- Screens reviewed: X/Y
- Scenarios tested: [list scenario names]
- Matches: N
- Minor issues: N
- Gaps: N
### Per-Screen Results
| Screen | Wireframe | Scenario | Verdict | Notes |
|--------|-----------|----------|---------|-------|
| Onboarding 1 | holder-01-onboarding-1.svg | — | Match | — |
| Home / My Cachets | holder-04-vault-my-trust.svg | happy | Match | — |
| Vault (revoked) | holder-04-vault-revoked.svg | revoked | Minor | ... |
| Revoked Detail | cachet-01-detail-revoked.svg | revoked | Match | — |
| Age Result (pass) | cachet-04-result-pass-age.svg | happy | Match | — |
| Seller Result (fail) | cachet-05-result-fail-seller.svg | seller-only | Match | — |
| ... | ... | ... | ... | ... |
### Detailed Findings
For each non-Match screen:
**[Screen Name] — [Verdict]**
- Layout order: [any ordering issues]
- Component types: [any wrong component types]
- Text content: [any wording mismatches]
- Alignment: [any centering/positioning issues]
- Missing elements: [anything in wireframe but not in app]
- Extra elements: [anything in app but not in wireframe]
### Screens Not Reviewed
[List any screens from the manifest that couldn't be reached, with reason]
mcp__android__get_uilayout to find tap coordinates for buttons.uiautomator dump to verify exact pixel bounds when alignment looks wrong.ui/fixtures/ScenarioRegistry.kt. Available names: happy, empty, revoked, expired, seller-only.