一键导入
qa-writer
Write new QA test sequences for the Convos iOS app. Use when asked to create, draft, or add a new QA test.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Write new QA test sequences for the Convos iOS app. Use when asked to create, draft, or add a new QA test.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Run QA test scenarios for the Convos iOS app. Use when asked to run QA tests, verify app functionality, or execute test scenarios.
Reclaim Xcode and iOS-simulator disk space safely. Measures usage first, then clears the big recoverable caches (global DerivedData, per-worktree .derivedData while skipping any active build, module caches, old iOS DeviceSupport) and offers simulator cleanup (unavailable + duplicate + orphaned custom sims). Shows before/after free space; confirms destructive simulator/Archive deletions. Use when the user asks to free disk, prune DerivedData, clean Xcode/simulator storage, or "my disk is full".
Build and launch the Convos iOS app in this worktree's dedicated simulator. Use when the user wants to run, launch, or test the app.
Use when working with Convos messaging - privacy-focused ephemeral messaging with per-conversation identities, invites, profiles, and group management via the convos CLI tool
| name | qa-writer |
| description | Write new QA test sequences for the Convos iOS app. Use when asked to create, draft, or add a new QA test. |
Create new end-to-end QA test sequences for the Convos iOS app.
qa/RULES.md in full — it defines conventions, tool usage, error handling, and formatting that all tests must follow..pi/skills/convos-cli/SKILL.md for the full CLI command reference — tests reference CLI actions by description, not exact commands.qa/tests/ to understand the style, structure, and level of detail used.accessibilityIdentifier in the relevant views).Log.info, Log.error in the relevant code).Every test file follows this structure:
# Test: <Descriptive Name>
<One-line summary of what this test verifies.>
## Prerequisites
<What state the app/simulator/CLI must be in before running.>
## Setup
<Any data creation or configuration needed before the test steps.>
## Steps
### <Section Name>
1. <Step description — what to do and what to expect.>
2. <Next step.>
### <Next Section>
3. <Continuing step numbers across sections.>
## Teardown
<How to clean up test data — explode conversations, reset state.>
## Pass/Fail Criteria
- [ ] <Criterion 1 — a specific, verifiable assertion>
- [ ] <Criterion 2>
## Accessibility Improvements Needed
<List any UI elements that were hard to find during testing — missing identifiers, elements only reachable by coordinate tap, etc. This section drives accessibility fixes.>
Describe what to do and what to expect, not the exact tool calls. The QA runner agent knows the tools — it needs to know the intent.
<!-- ✅ Good -->
1. Open the invite URL in the simulator as a deep link.
2. The app should show the conversation view with the conversation name.
<!-- ❌ Bad -->
1. Call sim_open_url with url="https://dev.convos.org/v2?i=..."
2. Call sim_wait_for_element with identifier="conversation-name"
When a step involves a known-tricky pattern (ephemeral UI, background processes, timing), do include the specific technique. Reference the relevant RULES.md section.
<!-- ✅ Good — calls out the tricky pattern -->
4. Start `process-join-requests --watch` in a background process, then
immediately use `sim_tap_id` with retries to catch the profile pill
(per ephemeral UI rules in RULES.md).
Number steps sequentially across all sections. This makes it easy to reference steps in pass/fail criteria and failure reports (e.g., "failed at step 7").
Each criterion must be:
Every test should include:
Don't repeat rules — reference them:
If the test measures timing, specify:
[PERF] log lines to look forDocument any known limitations or gotchas at the point where they matter:
After creating the test file at qa/tests/XX-name.md:
qa/SKILL.md under "Available Tests"# Test: Pin Conversation
Verify that conversations can be pinned and unpinned, and that pinned conversations appear in the pinned section.
## Prerequisites
- The app is running and past onboarding.
- At least two conversations exist in the conversations list.
## Steps
### Pin a conversation
1. Long-press on a conversation in the list to open the context menu.
2. Tap "Pin" in the context menu.
3. The conversation should move to the pinned section at the top of the list.
### Verify pinned state persists
4. Navigate away (open settings) and return to the conversations list.
5. The conversation should still be in the pinned section.
### Unpin the conversation
6. Long-press on the pinned conversation.
7. Tap "Unpin" in the context menu.
8. The conversation should move back to the regular list.
## Teardown
No cleanup needed — pinning is non-destructive.
## Pass/Fail Criteria
- [ ] Context menu shows "Pin" option for unpinned conversations
- [ ] Pinned conversation appears in the pinned section
- [ ] Pinned state persists across navigation
- [ ] Context menu shows "Unpin" option for pinned conversations
- [ ] Unpinning moves the conversation back to the regular list