name: qa description: Run QA test scenarios for the Convos iOS app. Use when asked to run QA tests, verify app functionality, or execute test scenarios.
QA Test Runner
Run end-to-end QA tests for the Convos iOS app using the iOS simulator tools and the convos CLI.
Before Running Any Test
- Read the QA rules document at
qa/RULES.mdin full. It contains general rules, tool references, app details, and conventions that apply to all tests. - Read the convos-cli skill at
.pi/skills/convos-cli/SKILL.mdfor the full CLI command reference. Tests describe actions in natural language — use the skill file to find the right commands. - Verify the app is running on the simulator by taking a screenshot. If it's not running, build and launch it using the run skill at
.pi/skills/run/SKILL.md. - Verify the convos CLI is initialized: run
convos identity list. If it fails, runconvos init --env dev --force.
Available Tests
| Test | File | Description |
|---|---|---|
| 01 | qa/tests/01-onboarding.md |
Fresh onboarding flow (requires simulator erase) |
| 02 | qa/tests/02-send-receive-messages.md |
Send and receive text, emoji, attachment, and link preview messages |
| 03 | qa/tests/03-invite-join-deep-link.md |
Join a conversation via deep link URL |
| 04 | qa/tests/04-invite-join-paste.md |
Join a conversation by pasting invite URL in scan view |
| 05 | qa/tests/05-reactions.md |
React to all message content types |
| 06 | qa/tests/06-replies.md |
Reply to messages from app and CLI |
| 07 | qa/tests/07-profile-update.md |
Update display name in a conversation |
| 08 | qa/tests/08-lock-conversation.md |
Lock conversation and verify invites invalidated |
| 09 | qa/tests/09-explode-conversation.md |
Explode (destroy) a conversation |
| 10 | qa/tests/10-pin-conversation.md |
Pin and unpin conversations |
| 11 | qa/tests/11-mute-conversation.md |
Mute and unmute conversations |
| 12 | qa/tests/12-create-conversation-from-app.md |
Create conversation from app and invite others |
| 13 | qa/tests/13-migration.md |
Database migration from main branch to current branch |
| 14 | qa/tests/14-profile.md |
Global profile auto-apply on new convos, App Settings edit, activate-sync into existing convos, per-conversation override isolation |
| 15 | qa/tests/15-performance.md |
Performance baselines: conversation open, create, join timings |
| 16 | qa/tests/16-conversation-filters.md |
Unread filter, clear filter, empty state, filter persistence |
| 17 | qa/tests/17-swipe-actions.md |
Mark read/unread via swipe and context menu |
| 18 | qa/tests/18-delete-all-data.md |
Delete all data flow, confirmation, progress, completion |
| 19 | qa/tests/19-profile-photo.md |
Profile photo, group photo, sync to other participants |
| 20 | qa/tests/20-send-receive-photos.md |
Send photos from app, receive from CLI, context menu |
| 21 | qa/tests/21-message-gestures.md |
All message gestures: double-tap, swipe reply, long-press menu, link tap, avatar tap |
| 22 | qa/tests/22-rejoin-existing-conversation.md |
Rejoin existing conversation via deep link or paste in scanner |
| 23 | qa/tests/23-pending-invites-home-view.md |
Pending invites appear in home view, filter, swipe/context restrictions, approval transition |
| 25 | qa/tests/25-conversations-list-baseline.md |
Conversations list baseline for UICollectionView migration - captures all UI states and interactions |
| 26 | qa/tests/26-failed-message-send.md |
Failed message send: "Not Delivered" state, retry, and delete |
| 27 | qa/tests/27-send-receive-video.md |
Send and receive video messages, inline playback, context menu, size limit |
| 28 | qa/tests/28-receive-file-attachments.md |
Receive file attachments (PDF, text, CSV, JSON), file bubble display, QuickLook preview, Save to Files |
| 28b | qa/tests/28-app-icon-badge-count.md |
App icon badge count for unread conversations |
| 29 | qa/tests/29-typing-indicators.md |
Typing indicators: receive, dismiss, message-arrival clearing, grouping, expiry |
| 30 | qa/tests/30-verified-assistants.md |
Verified assistant UI: badges, labels, skills button, agent vs assistant distinction |
| 32 | qa/tests/32-voice-memo-transcription.md |
Voice memo transcription: receive voice memo, on-device transcript appears, expand/collapse, persistence across relaunch, retry on failure |
| 33 | qa/tests/33-read-receipts.md |
Read receipts: send on view, display avatars, opt-out setting |
| 42 | qa/tests/42-agent-builder-attachment-summary.md |
Agent builder: create agent with prompt + photo attachment, verify summary card renders the photo thumbnail (pre- and post-rehydration) |
| 43 | qa/tests/43-long-message-rendering.md |
Long-message UX: short renders unchanged, long shows Read More + inline expand, pathological pushes MessageDetailView (Back/Copy/Reply), no-hang guard |
Running Tests
Run a specific test
When asked to run a specific test (e.g., "run QA test 03"), read the test file and execute the steps in order. Report pass/fail for each criterion.
Run all tests
When asked to run all tests, execute them in order. Tests 01 (onboarding) should run first since it resets the simulator. Subsequent tests build on a working app state.
Recommended order:
- 13-migration — migration test (runs on its own simulator, no side effects)
- 01-onboarding — establishes fresh app state
- 12-create-conversation-from-app — creates a conversation from the app
- 03-invite-join-deep-link — tests joining via deep link
- 04-invite-join-paste — tests joining via paste
- 02-send-receive-messages — tests messaging in a shared conversation
- 21-message-gestures — tests all message gestures (double-tap, swipe, long-press, link tap, avatar tap)
- 05-reactions — tests reactions (needs messages to react to)
- 06-replies — tests replies (needs messages to reply to)
- 07-profile-update — tests profile changes
- 08-lock-conversation — tests locking
- 09-explode-conversation — tests explosion (destructive, run late)
- 10-pin-conversation — tests pinning (needs multiple conversations)
- 11-mute-conversation — tests muting
- 16-conversation-filters — tests unread filter (needs conversations with mixed read states)
- 17-swipe-actions — tests mark read/unread swipe actions
- 20-send-receive-photos — tests photo send/receive, context menu
- 27-send-receive-video — tests video send/receive, inline playback
- 28-receive-file-attachments — tests receiving file attachments from CLI, file bubble UI, QuickLook
- 19-profile-photo — tests profile and group photos
- 15-performance — performance baselines (run last, non-destructive)
- 18-delete-all-data — wipes all data (run very last, destructive)
Reporting
After each test, output:
## Test XX: <Test Name>
Status: PASS / FAIL / PARTIAL
### Results
- [x] Criterion 1 — passed
- [ ] Criterion 2 — FAILED: <description of failure>
- [x] Criterion 3 — passed
### Notes
<Any observations, unexpected behavior, or infrastructure issues>
### Accessibility Improvements Needed
<List any UI elements that were hard to find — missing identifiers, coordinate-only taps, etc.>
After all tests complete, output a summary table:
## QA Summary
| Test | Status | Notes |
|------|--------|-------|
| 01 - Onboarding | PASS | |
| 02 - Messages | PARTIAL | Attachment display issue |
| ... | ... | ... |