@questpie/probe 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agent-browser-Cxuu-Zz0.js +203 -0
- package/dist/assert-BLP5_JwC.js +212 -0
- package/dist/browser-DoCXU5Bs.js +736 -0
- package/dist/check-Cny-3lkZ.js +41 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +30 -0
- package/dist/codegen-BH3cUNuf.js +61 -0
- package/dist/compose-D5a8qHkg.js +233 -0
- package/dist/config-BUEMgFYN.js +89 -0
- package/dist/duration-D1ya1zLn.js +3 -0
- package/dist/duration-DUrbfMLK.js +30 -0
- package/dist/health-B36ufFzJ.js +62 -0
- package/dist/http-BZouO1Cj.js +187 -0
- package/dist/index.d.ts +119 -0
- package/dist/index.js +4 -0
- package/dist/init-BjTfn_-A.js +92 -0
- package/dist/logs-BCgur07G.js +191 -0
- package/dist/output-CHUjdVDf.js +38 -0
- package/dist/process-manager-CzexpFO4.js +229 -0
- package/dist/process-manager-zzltWvZ0.js +4 -0
- package/dist/ps-DuHF7vmE.js +39 -0
- package/dist/record-C4SmoPsT.js +140 -0
- package/dist/recordings-Cb31alos.js +158 -0
- package/dist/replay-Dg9PHNrg.js +171 -0
- package/dist/reporter-CqWc26OP.js +25 -0
- package/dist/restart-By3Edj5X.js +44 -0
- package/dist/snapshot-diff-CqXEVTAZ.js +51 -0
- package/dist/start-BClY6oJq.js +79 -0
- package/dist/state-DRTSIt_r.js +62 -0
- package/dist/stop-QAP6gbDe.js +47 -0
- package/package.json +72 -0
- package/skills/qprobe/SKILL.md +103 -0
- package/skills/qprobe/references/browser.md +201 -0
- package/skills/qprobe/references/compose.md +128 -0
- package/skills/qprobe/references/http.md +151 -0
- package/skills/qprobe/references/process.md +114 -0
- package/skills/qprobe/references/recording.md +194 -0
- package/skills/qprobe-browser/SKILL.md +87 -0
- package/skills/qprobe-compose/SKILL.md +81 -0
- package/skills/qprobe-http/SKILL.md +67 -0
- package/skills/qprobe-process/SKILL.md +58 -0
- package/skills/qprobe-recording/SKILL.md +63 -0
- package/skills/qprobe-ux/SKILL.md +250 -0
|
@@ -0,0 +1,250 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: qprobe-ux
|
|
3
|
+
description: "UX testing and evaluation using QUESTPIE Probe. Run heuristic evaluations, task completion tests, navigation audits, accessibility checks, and A/B comparisons on running web apps. Use when: evaluating usability, checking UX quality, auditing user flows, comparing two versions, finding UX issues, testing if users can complete tasks. Triggers: 'review the UX', 'is this usable', 'can a user find X', 'compare these two versions', 'UX audit', 'heuristic evaluation', 'test the onboarding flow', 'is the checkout intuitive', 'find usability problems', 'accessibility check'. Use even for 'does this make sense' or 'is this confusing' in context of a web UI."
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
# qprobe-ux — UX Testing Skill
|
|
7
|
+
|
|
8
|
+
Run UX evaluations on running web apps using Probe's browser control. No external services, no subscriptions.
|
|
9
|
+
|
|
10
|
+
**Requires:** `@questpie/probe` installed, app running via `qprobe compose up` or `qprobe start`.
|
|
11
|
+
|
|
12
|
+
---
|
|
13
|
+
|
|
14
|
+
## Methods
|
|
15
|
+
|
|
16
|
+
### 1. Heuristic Evaluation
|
|
17
|
+
|
|
18
|
+
Walk through the app and score against Nielsen's 10 usability heuristics.
|
|
19
|
+
|
|
20
|
+
**How to run:**
|
|
21
|
+
1. Open the target page: `qprobe browser open <url>`
|
|
22
|
+
2. Take interactive snapshot: `qprobe browser snapshot -i`
|
|
23
|
+
3. Navigate each major section, take snapshots
|
|
24
|
+
4. Check console for errors: `qprobe browser console --level error`
|
|
25
|
+
5. Check network for failures: `qprobe browser network --failed`
|
|
26
|
+
6. Evaluate each heuristic and write findings
|
|
27
|
+
|
|
28
|
+
**Heuristics to evaluate:**
|
|
29
|
+
|
|
30
|
+
| # | Heuristic | What to check |
|
|
31
|
+
|---|-----------|---------------|
|
|
32
|
+
| H1 | Visibility of system status | Loading states, progress indicators, feedback after actions. Click a button — does something visibly happen? |
|
|
33
|
+
| H2 | Match between system and real world | Labels use user language, not dev jargon. Icons are recognizable. Metaphors make sense. |
|
|
34
|
+
| H3 | User control and freedom | Can you go back? Undo? Cancel? Is there always a way out of a flow? |
|
|
35
|
+
| H4 | Consistency and standards | Same action, same pattern everywhere. Buttons look like buttons. Links look like links. |
|
|
36
|
+
| H5 | Error prevention | Required fields marked before submit. Destructive actions need confirmation. Inputs have constraints. |
|
|
37
|
+
| H6 | Recognition over recall | Options visible, not hidden. Current state obvious. No need to remember info between steps. |
|
|
38
|
+
| H7 | Flexibility and efficiency | Keyboard shortcuts? Bulk actions? Experienced users have fast paths? |
|
|
39
|
+
| H8 | Aesthetic and minimalist design | No clutter. Every element serves a purpose. Important things are prominent. |
|
|
40
|
+
| H9 | Help users recognize and recover from errors | Error messages are specific, plain language, suggest a fix. Not "Error 500" or "Something went wrong." |
|
|
41
|
+
| H10 | Help and documentation | Help is findable. Tooltips on complex fields. Empty states guide the user. |
|
|
42
|
+
|
|
43
|
+
**Output format:**
|
|
44
|
+
```
|
|
45
|
+
## Heuristic Evaluation: [page/flow name]
|
|
46
|
+
|
|
47
|
+
### H1: Visibility of system status — PASS / ISSUE / CRITICAL
|
|
48
|
+
Finding: [what you observed]
|
|
49
|
+
Evidence: [snapshot ref, console output, or screenshot]
|
|
50
|
+
Recommendation: [specific fix]
|
|
51
|
+
|
|
52
|
+
### H2: Match between system and real world — PASS / ISSUE / CRITICAL
|
|
53
|
+
...
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
Score each: PASS (no issues), ISSUE (minor, should fix), CRITICAL (blocks or confuses users).
|
|
57
|
+
|
|
58
|
+
---
|
|
59
|
+
|
|
60
|
+
### 2. Task Completion Test
|
|
61
|
+
|
|
62
|
+
Simulate a first-time user trying to complete a task. The agent has NO prior knowledge of the UI layout — it must discover the path using only what's visible.
|
|
63
|
+
|
|
64
|
+
**How to run:**
|
|
65
|
+
1. Define the task in plain language (e.g., "Create a new account and set up a profile")
|
|
66
|
+
2. Open the starting page: `qprobe browser open /`
|
|
67
|
+
3. Use ONLY `snapshot -i` to see what's available — do NOT look at source code
|
|
68
|
+
4. Navigate by choosing what seems most logical from visible elements
|
|
69
|
+
5. Record every step: what you saw, what you chose, why
|
|
70
|
+
6. Note dead-ends, confusion points, moments of hesitation
|
|
71
|
+
|
|
72
|
+
**Output format:**
|
|
73
|
+
```
|
|
74
|
+
## Task Completion: [task description]
|
|
75
|
+
Starting URL: /
|
|
76
|
+
Target: [expected end state]
|
|
77
|
+
|
|
78
|
+
### Step 1
|
|
79
|
+
Saw: [interactive elements from snapshot]
|
|
80
|
+
Chose: [@e3 "Sign Up"] — seemed like the right entry point
|
|
81
|
+
Result: navigated to /register
|
|
82
|
+
|
|
83
|
+
### Step 2
|
|
84
|
+
Saw: [elements]
|
|
85
|
+
Confusion: Two buttons both say "Next" — unclear which one to use
|
|
86
|
+
Chose: [@e5 "Next" — top one] — guessed based on position
|
|
87
|
+
Result: form validation error, no field highlighted
|
|
88
|
+
|
|
89
|
+
...
|
|
90
|
+
|
|
91
|
+
### Summary
|
|
92
|
+
- Completed: YES / NO
|
|
93
|
+
- Steps taken: 7 (expected: 4)
|
|
94
|
+
- Dead-ends: 1 (tried Settings instead of Profile)
|
|
95
|
+
- Confusion points: 2 (duplicate "Next" buttons, unclear error)
|
|
96
|
+
- Blockers: 0
|
|
97
|
+
- Recommendation: [top 3 fixes]
|
|
98
|
+
```
|
|
99
|
+
|
|
100
|
+
---
|
|
101
|
+
|
|
102
|
+
### 3. Navigation Audit
|
|
103
|
+
|
|
104
|
+
Test whether information architecture makes sense. Can the user find things where they expect them?
|
|
105
|
+
|
|
106
|
+
**How to run:**
|
|
107
|
+
1. Take snapshot of main navigation: `qprobe browser snapshot -i -s "nav"` or `qprobe browser snapshot -i -d 2`
|
|
108
|
+
2. For each target item, ask: "Where would a user look for [X]?"
|
|
109
|
+
3. Follow the most logical path based ONLY on labels
|
|
110
|
+
4. Record if the item was found, how many clicks, any wrong turns
|
|
111
|
+
|
|
112
|
+
**Tasks to test (adapt to the app):**
|
|
113
|
+
- Where are account settings?
|
|
114
|
+
- Where do I see my orders/history?
|
|
115
|
+
- How do I contact support?
|
|
116
|
+
- Where do I change my password?
|
|
117
|
+
- How do I delete my account?
|
|
118
|
+
|
|
119
|
+
**Output format:**
|
|
120
|
+
```
|
|
121
|
+
## Navigation Audit
|
|
122
|
+
|
|
123
|
+
| Task | Expected path | Actual path | Clicks | Found? | Issue |
|
|
124
|
+
|------|--------------|-------------|--------|--------|-------|
|
|
125
|
+
| Find settings | Profile → Settings | Profile → Settings | 2 | YES | — |
|
|
126
|
+
| Change password | Settings → Security | Settings → ??? | 3 | NO | No "Security" section visible |
|
|
127
|
+
| Delete account | Settings → Account → Delete | Settings → Account | 2 | NO | No delete option found |
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
### 4. Accessibility Quick Audit
|
|
133
|
+
|
|
134
|
+
Check common accessibility issues using Probe's browser tools.
|
|
135
|
+
|
|
136
|
+
**How to run:**
|
|
137
|
+
```bash
|
|
138
|
+
# Check for console errors/warnings related to a11y
|
|
139
|
+
qprobe browser console --grep "aria\|accessibility\|role\|alt"
|
|
140
|
+
|
|
141
|
+
# Check if all interactive elements have labels
|
|
142
|
+
qprobe browser snapshot -i
|
|
143
|
+
# → Look for elements with empty text or missing labels
|
|
144
|
+
|
|
145
|
+
# Check keyboard navigation
|
|
146
|
+
qprobe browser press Tab
|
|
147
|
+
qprobe browser press Tab
|
|
148
|
+
qprobe browser press Tab
|
|
149
|
+
# → Take snapshot after each Tab: is focus visible? Logical order?
|
|
150
|
+
|
|
151
|
+
# Check contrast (via JS)
|
|
152
|
+
qprobe browser eval "getComputedStyle(document.body).color"
|
|
153
|
+
qprobe browser eval "getComputedStyle(document.body).backgroundColor"
|
|
154
|
+
|
|
155
|
+
# Check images for alt text
|
|
156
|
+
qprobe browser eval "document.querySelectorAll('img:not([alt])').length"
|
|
157
|
+
|
|
158
|
+
# Check form labels
|
|
159
|
+
qprobe browser eval "document.querySelectorAll('input:not([aria-label]):not([id])').length"
|
|
160
|
+
```
|
|
161
|
+
|
|
162
|
+
**Checklist:**
|
|
163
|
+
- [ ] All images have alt text
|
|
164
|
+
- [ ] All form inputs have labels
|
|
165
|
+
- [ ] Focus is visible on Tab navigation
|
|
166
|
+
- [ ] Tab order is logical (follows visual layout)
|
|
167
|
+
- [ ] No empty buttons/links (text or aria-label)
|
|
168
|
+
- [ ] Color is not the only way to convey information
|
|
169
|
+
- [ ] Interactive elements are reachable by keyboard
|
|
170
|
+
- [ ] No console accessibility warnings
|
|
171
|
+
|
|
172
|
+
---
|
|
173
|
+
|
|
174
|
+
### 5. A/B Flow Comparison
|
|
175
|
+
|
|
176
|
+
Compare two versions of the same flow side by side.
|
|
177
|
+
|
|
178
|
+
**How to run:**
|
|
179
|
+
1. Run the same task on version A, record steps and observations
|
|
180
|
+
2. Run the same task on version B
|
|
181
|
+
3. Compare structured output
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Version A
|
|
185
|
+
qprobe browser open /checkout-v1
|
|
186
|
+
qprobe browser snapshot -i
|
|
187
|
+
# ... complete the flow, note steps, errors, confusion ...
|
|
188
|
+
|
|
189
|
+
# Version B
|
|
190
|
+
qprobe browser open /checkout-v2
|
|
191
|
+
qprobe browser snapshot -i
|
|
192
|
+
# ... same task, same criteria ...
|
|
193
|
+
```
|
|
194
|
+
|
|
195
|
+
**Output format:**
|
|
196
|
+
```
|
|
197
|
+
## A/B Comparison: [flow name]
|
|
198
|
+
|
|
199
|
+
| Metric | Version A | Version B |
|
|
200
|
+
|--------|-----------|-----------|
|
|
201
|
+
| Steps to complete | 5 | 3 |
|
|
202
|
+
| Console errors | 1 | 0 |
|
|
203
|
+
| Network errors | 0 | 0 |
|
|
204
|
+
| Confusion points | 2 | 1 |
|
|
205
|
+
| Dead-ends | 1 | 0 |
|
|
206
|
+
|
|
207
|
+
### Version A issues
|
|
208
|
+
- Step 3: unclear which "Continue" button to click
|
|
209
|
+
- Step 4: form resets on validation error
|
|
210
|
+
|
|
211
|
+
### Version B improvements
|
|
212
|
+
- Combined steps 2-3 into single form
|
|
213
|
+
- Inline validation prevents submit errors
|
|
214
|
+
|
|
215
|
+
### Recommendation: Version B — fewer steps, fewer confusion points
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
---
|
|
219
|
+
|
|
220
|
+
### 6. Error State Audit
|
|
221
|
+
|
|
222
|
+
Systematically test how the app handles bad input and edge cases.
|
|
223
|
+
|
|
224
|
+
**How to run:**
|
|
225
|
+
1. Find all forms: `qprobe browser snapshot -i` → look for textbox/select elements
|
|
226
|
+
2. For each form, test:
|
|
227
|
+
- Submit empty
|
|
228
|
+
- Submit with invalid data (wrong email format, too short, special characters)
|
|
229
|
+
- Submit with extremely long input
|
|
230
|
+
- Double-click submit button
|
|
231
|
+
3. Check: Are errors visible? Specific? Helpful? Does the form preserve valid input?
|
|
232
|
+
|
|
233
|
+
```bash
|
|
234
|
+
qprobe browser fill @e1 ""
|
|
235
|
+
qprobe browser click @e3
|
|
236
|
+
qprobe browser snapshot --diff
|
|
237
|
+
qprobe browser console --level error
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
---
|
|
241
|
+
|
|
242
|
+
## Tips
|
|
243
|
+
|
|
244
|
+
- **Always check logs first** — `qprobe browser console --level error` and `qprobe browser network --failed` reveal issues before you start evaluating visuals
|
|
245
|
+
- **Use snapshot -i** for every evaluation step — it's your primary "what does the user see" tool
|
|
246
|
+
- **Use snapshot --diff** after actions to see exactly what changed
|
|
247
|
+
- **Screenshot --annotate** when you need visual evidence for the report
|
|
248
|
+
- **Record important flows** while evaluating — `qprobe record start "ux-checkout"` gives you a free regression test as a bonus
|
|
249
|
+
- **Combine methods** — do a heuristic eval first (broad sweep), then task completion on the worst areas (deep dive)
|
|
250
|
+
- **Output as markdown** — all formats above are structured for easy sharing with team
|