niahere 0.2.61 → 0.2.63
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/defaults/memory-promoter.md +99 -0
- package/defaults/self/staging.md +48 -0
- package/package.json +7 -3
- package/skills/code-review/pr-review.md +14 -1
- package/skills/cro/page.md +22 -0
- package/skills/frontend-design/SKILL.md +7 -3
- package/skills/frontend-design/building.md +17 -2
- package/skills/qa/SKILL.md +108 -72
- package/skills/userinterface-wiki/AGENTS.md +3749 -0
- package/skills/userinterface-wiki/SKILL.md +253 -0
- package/skills/userinterface-wiki/metadata.json +26 -0
- package/skills/userinterface-wiki/rules/_sections.md +66 -0
- package/skills/userinterface-wiki/rules/_template.md +24 -0
- package/skills/userinterface-wiki/rules/a11y-reduced-motion-check.md +30 -0
- package/skills/userinterface-wiki/rules/a11y-toggle-setting.md +30 -0
- package/skills/userinterface-wiki/rules/a11y-visual-equivalent.md +36 -0
- package/skills/userinterface-wiki/rules/a11y-volume-control.md +28 -0
- package/skills/userinterface-wiki/rules/appropriate-confirmations-only.md +19 -0
- package/skills/userinterface-wiki/rules/appropriate-errors-warnings.md +18 -0
- package/skills/userinterface-wiki/rules/appropriate-no-decorative.md +21 -0
- package/skills/userinterface-wiki/rules/appropriate-no-high-frequency.md +28 -0
- package/skills/userinterface-wiki/rules/appropriate-no-punishing.md +27 -0
- package/skills/userinterface-wiki/rules/container-callback-ref.md +31 -0
- package/skills/userinterface-wiki/rules/container-guard-initial-zero.md +25 -0
- package/skills/userinterface-wiki/rules/container-no-excessive-use.md +13 -0
- package/skills/userinterface-wiki/rules/container-overflow-hidden.md +25 -0
- package/skills/userinterface-wiki/rules/container-transition-delay.md +21 -0
- package/skills/userinterface-wiki/rules/container-two-div-pattern.md +35 -0
- package/skills/userinterface-wiki/rules/container-use-resize-observer.md +48 -0
- package/skills/userinterface-wiki/rules/context-cleanup-nodes.md +25 -0
- package/skills/userinterface-wiki/rules/context-resume-suspended.md +28 -0
- package/skills/userinterface-wiki/rules/context-reuse-single.md +30 -0
- package/skills/userinterface-wiki/rules/design-filter-for-character.md +25 -0
- package/skills/userinterface-wiki/rules/design-noise-for-percussion.md +26 -0
- package/skills/userinterface-wiki/rules/design-oscillator-for-tonal.md +22 -0
- package/skills/userinterface-wiki/rules/duration-max-300ms.md +21 -0
- package/skills/userinterface-wiki/rules/duration-press-hover.md +21 -0
- package/skills/userinterface-wiki/rules/duration-shorten-before-curve.md +21 -0
- package/skills/userinterface-wiki/rules/duration-small-state.md +15 -0
- package/skills/userinterface-wiki/rules/easing-entrance-ease-out.md +21 -0
- package/skills/userinterface-wiki/rules/easing-exit-ease-in.md +21 -0
- package/skills/userinterface-wiki/rules/easing-for-state-change.md +27 -0
- package/skills/userinterface-wiki/rules/easing-linear-only-progress.md +21 -0
- package/skills/userinterface-wiki/rules/easing-natural-decay.md +22 -0
- package/skills/userinterface-wiki/rules/easing-no-linear-motion.md +22 -0
- package/skills/userinterface-wiki/rules/easing-transition-ease-in-out.md +15 -0
- package/skills/userinterface-wiki/rules/envelope-exponential-decay.md +21 -0
- package/skills/userinterface-wiki/rules/envelope-no-zero-target.md +21 -0
- package/skills/userinterface-wiki/rules/envelope-set-initial-value.md +22 -0
- package/skills/userinterface-wiki/rules/exit-key-required.md +29 -0
- package/skills/userinterface-wiki/rules/exit-matches-initial.md +29 -0
- package/skills/userinterface-wiki/rules/exit-prop-required.md +33 -0
- package/skills/userinterface-wiki/rules/exit-requires-wrapper.md +27 -0
- package/skills/userinterface-wiki/rules/impl-default-subtle.md +21 -0
- package/skills/userinterface-wiki/rules/impl-preload-audio.md +34 -0
- package/skills/userinterface-wiki/rules/impl-reset-current-time.md +26 -0
- package/skills/userinterface-wiki/rules/mode-pop-layout-for-lists.md +25 -0
- package/skills/userinterface-wiki/rules/mode-sync-layout-conflict.md +29 -0
- package/skills/userinterface-wiki/rules/mode-wait-doubles-duration.md +25 -0
- package/skills/userinterface-wiki/rules/morphing-aria-hidden.md +21 -0
- package/skills/userinterface-wiki/rules/morphing-consistent-viewbox.md +23 -0
- package/skills/userinterface-wiki/rules/morphing-group-variants.md +33 -0
- package/skills/userinterface-wiki/rules/morphing-jump-non-grouped.md +29 -0
- package/skills/userinterface-wiki/rules/morphing-reduced-motion.md +28 -0
- package/skills/userinterface-wiki/rules/morphing-spring-rotation.md +23 -0
- package/skills/userinterface-wiki/rules/morphing-strokelinecap-round.md +21 -0
- package/skills/userinterface-wiki/rules/morphing-three-lines.md +32 -0
- package/skills/userinterface-wiki/rules/morphing-use-collapsed.md +33 -0
- package/skills/userinterface-wiki/rules/native-backdrop-styling.md +27 -0
- package/skills/userinterface-wiki/rules/native-placeholder-styling.md +27 -0
- package/skills/userinterface-wiki/rules/native-selection-styling.md +18 -0
- package/skills/userinterface-wiki/rules/nested-consistent-timing.md +25 -0
- package/skills/userinterface-wiki/rules/nested-propagate-required.md +41 -0
- package/skills/userinterface-wiki/rules/none-context-menu-entrance.md +25 -0
- package/skills/userinterface-wiki/rules/none-high-frequency.md +29 -0
- package/skills/userinterface-wiki/rules/none-keyboard-navigation.md +32 -0
- package/skills/userinterface-wiki/rules/param-click-duration.md +21 -0
- package/skills/userinterface-wiki/rules/param-filter-frequency-range.md +21 -0
- package/skills/userinterface-wiki/rules/param-q-value-range.md +21 -0
- package/skills/userinterface-wiki/rules/param-reasonable-gain.md +21 -0
- package/skills/userinterface-wiki/rules/physics-active-state.md +23 -0
- package/skills/userinterface-wiki/rules/physics-no-excessive-stagger.md +22 -0
- package/skills/userinterface-wiki/rules/physics-spring-for-overshoot.md +23 -0
- package/skills/userinterface-wiki/rules/physics-subtle-deformation.md +22 -0
- package/skills/userinterface-wiki/rules/prefetch-hit-slop.md +27 -0
- package/skills/userinterface-wiki/rules/prefetch-keyboard-tab.md +19 -0
- package/skills/userinterface-wiki/rules/prefetch-not-everything.md +22 -0
- package/skills/userinterface-wiki/rules/prefetch-touch-fallback.md +34 -0
- package/skills/userinterface-wiki/rules/prefetch-trajectory-over-hover.md +32 -0
- package/skills/userinterface-wiki/rules/prefetch-use-selectively.md +13 -0
- package/skills/userinterface-wiki/rules/presence-disable-interactions.md +31 -0
- package/skills/userinterface-wiki/rules/presence-hook-in-child.md +31 -0
- package/skills/userinterface-wiki/rules/presence-safe-to-remove.md +37 -0
- package/skills/userinterface-wiki/rules/pseudo-content-required.md +28 -0
- package/skills/userinterface-wiki/rules/pseudo-first-line-styling.md +27 -0
- package/skills/userinterface-wiki/rules/pseudo-hit-target-expansion.md +31 -0
- package/skills/userinterface-wiki/rules/pseudo-marker-styling.md +28 -0
- package/skills/userinterface-wiki/rules/pseudo-over-dom-node.md +32 -0
- package/skills/userinterface-wiki/rules/pseudo-position-relative-parent.md +33 -0
- package/skills/userinterface-wiki/rules/pseudo-z-index-layering.md +37 -0
- package/skills/userinterface-wiki/rules/spring-for-gestures.md +27 -0
- package/skills/userinterface-wiki/rules/spring-for-interruptible.md +27 -0
- package/skills/userinterface-wiki/rules/spring-params-balanced.md +29 -0
- package/skills/userinterface-wiki/rules/spring-preserves-velocity.md +28 -0
- package/skills/userinterface-wiki/rules/staging-dim-background.md +22 -0
- package/skills/userinterface-wiki/rules/staging-one-focal-point.md +24 -0
- package/skills/userinterface-wiki/rules/staging-z-index-hierarchy.md +22 -0
- package/skills/userinterface-wiki/rules/timing-consistent.md +24 -0
- package/skills/userinterface-wiki/rules/timing-no-entrance-context-menu.md +22 -0
- package/skills/userinterface-wiki/rules/timing-under-300ms.md +22 -0
- package/skills/userinterface-wiki/rules/transition-name-cleanup.md +28 -0
- package/skills/userinterface-wiki/rules/transition-name-required.md +27 -0
- package/skills/userinterface-wiki/rules/transition-name-unique.md +24 -0
- package/skills/userinterface-wiki/rules/transition-over-js-library.md +32 -0
- package/skills/userinterface-wiki/rules/transition-style-pseudo-elements.md +24 -0
- package/skills/userinterface-wiki/rules/type-antialiased-on-retina.md +18 -0
- package/skills/userinterface-wiki/rules/type-disambiguation-stylistic-set.md +15 -0
- package/skills/userinterface-wiki/rules/type-font-display-swap.md +28 -0
- package/skills/userinterface-wiki/rules/type-justify-with-hyphens.md +24 -0
- package/skills/userinterface-wiki/rules/type-letter-spacing-uppercase.md +28 -0
- package/skills/userinterface-wiki/rules/type-no-font-synthesis.md +18 -0
- package/skills/userinterface-wiki/rules/type-oldstyle-nums-for-prose.md +21 -0
- package/skills/userinterface-wiki/rules/type-opentype-contextual-alternates.md +15 -0
- package/skills/userinterface-wiki/rules/type-optical-sizing-auto.md +25 -0
- package/skills/userinterface-wiki/rules/type-proper-fractions.md +15 -0
- package/skills/userinterface-wiki/rules/type-slashed-zero.md +17 -0
- package/skills/userinterface-wiki/rules/type-tabular-nums-for-data.md +21 -0
- package/skills/userinterface-wiki/rules/type-text-wrap-balance-headings.md +21 -0
- package/skills/userinterface-wiki/rules/type-text-wrap-pretty.md +16 -0
- package/skills/userinterface-wiki/rules/type-underline-offset.md +25 -0
- package/skills/userinterface-wiki/rules/type-variable-weight-continuous.md +23 -0
- package/skills/userinterface-wiki/rules/ux-aesthetic-usability.md +32 -0
- package/skills/userinterface-wiki/rules/ux-cognitive-load-reduce.md +49 -0
- package/skills/userinterface-wiki/rules/ux-common-region-boundaries.md +50 -0
- package/skills/userinterface-wiki/rules/ux-doherty-perceived-speed.md +29 -0
- package/skills/userinterface-wiki/rules/ux-doherty-under-400ms.md +30 -0
- package/skills/userinterface-wiki/rules/ux-fitts-hit-area.md +32 -0
- package/skills/userinterface-wiki/rules/ux-fitts-target-size.md +31 -0
- package/skills/userinterface-wiki/rules/ux-goal-gradient-progress.md +33 -0
- package/skills/userinterface-wiki/rules/ux-hicks-minimize-choices.md +45 -0
- package/skills/userinterface-wiki/rules/ux-jakobs-familiar-patterns.md +37 -0
- package/skills/userinterface-wiki/rules/ux-millers-chunking.md +23 -0
- package/skills/userinterface-wiki/rules/ux-pareto-prioritize-features.md +36 -0
- package/skills/userinterface-wiki/rules/ux-peak-end-finish-strong.md +35 -0
- package/skills/userinterface-wiki/rules/ux-postels-accept-messy-input.md +45 -0
- package/skills/userinterface-wiki/rules/ux-pragnanz-simplify.md +33 -0
- package/skills/userinterface-wiki/rules/ux-progressive-disclosure.md +41 -0
- package/skills/userinterface-wiki/rules/ux-proximity-grouping.md +38 -0
- package/skills/userinterface-wiki/rules/ux-serial-position.md +31 -0
- package/skills/userinterface-wiki/rules/ux-similarity-consistency.md +35 -0
- package/skills/userinterface-wiki/rules/ux-teslers-complexity.md +28 -0
- package/skills/userinterface-wiki/rules/ux-uniform-connectedness.md +43 -0
- package/skills/userinterface-wiki/rules/ux-von-restorff-emphasis.md +29 -0
- package/skills/userinterface-wiki/rules/ux-zeigarnik-show-incomplete.md +36 -0
- package/skills/userinterface-wiki/rules/visual-animate-shadow-pseudo.md +49 -0
- package/skills/userinterface-wiki/rules/visual-border-alpha-colors.md +25 -0
- package/skills/userinterface-wiki/rules/visual-button-shadow-anatomy.md +49 -0
- package/skills/userinterface-wiki/rules/visual-concentric-radius.md +40 -0
- package/skills/userinterface-wiki/rules/visual-consistent-spacing-scale.md +35 -0
- package/skills/userinterface-wiki/rules/visual-layered-shadows.md +30 -0
- package/skills/userinterface-wiki/rules/visual-no-pure-black-shadow.md +25 -0
- package/skills/userinterface-wiki/rules/visual-shadow-direction.md +25 -0
- package/skills/userinterface-wiki/rules/visual-shadow-matches-elevation.md +23 -0
- package/skills/userinterface-wiki/rules/weight-duration-matches-action.md +29 -0
- package/skills/userinterface-wiki/rules/weight-match-action.md +32 -0
- package/src/cli/index.ts +23 -73
- package/src/cli/job.ts +25 -92
- package/src/cli/status.ts +17 -9
- package/src/commands/init.ts +1 -0
- package/src/commands/validate.ts +12 -10
- package/src/core/agents.ts +6 -19
- package/src/core/consolidator.ts +97 -91
- package/src/core/daemon.ts +71 -43
- package/src/core/finalizer.ts +31 -3
- package/src/core/health.ts +5 -17
- package/src/core/runner.ts +8 -44
- package/src/core/scheduler.ts +12 -49
- package/src/core/skills.ts +4 -11
- package/src/core/summarizer.ts +7 -21
- package/src/db/connection.ts +0 -11
- package/src/db/models/job.ts +23 -22
- package/src/db/with-db.ts +11 -0
- package/src/mcp/server.ts +1 -1
- package/src/prompts/environment.md +44 -41
- package/src/utils/pid.ts +44 -0
- package/src/utils/schedule.ts +39 -0
package/skills/qa/SKILL.md
CHANGED
|
@@ -31,19 +31,20 @@ For Playwright MCP reference, see [playwright.md](playwright.md)
|
|
|
31
31
|
|
|
32
32
|
**Parse the user's request for these parameters:**
|
|
33
33
|
|
|
34
|
-
| Parameter
|
|
35
|
-
|
|
34
|
+
| Parameter | Default | Override example |
|
|
35
|
+
| ---------- | ------------------------- | -------------------------------------------- |
|
|
36
36
|
| Target URL | (auto-detect or required) | `https://myapp.com`, `http://localhost:3000` |
|
|
37
|
-
| Mode
|
|
38
|
-
| Output dir | `.qa-reports/`
|
|
39
|
-
| Scope
|
|
40
|
-
| Auth
|
|
37
|
+
| Mode | full | `--quick`, `--regression baseline.json` |
|
|
38
|
+
| Output dir | `.qa-reports/` | `Output to /tmp/qa` |
|
|
39
|
+
| Scope | Full app (or diff-scoped) | `Focus on the billing page` |
|
|
40
|
+
| Auth | None | `Sign in to user@example.com` |
|
|
41
41
|
|
|
42
42
|
**If no URL is given and you're on a feature branch:** Automatically enter **diff-aware mode**.
|
|
43
43
|
|
|
44
44
|
**Determine the browser automation tool:**
|
|
45
45
|
|
|
46
46
|
Check in this order:
|
|
47
|
+
|
|
47
48
|
1. **Playwright MCP tools** — check if `mcp__plugin_playwright_playwright__browser_navigate` is available as a tool. If yes, use Playwright MCP tools (preferred).
|
|
48
49
|
2. **Playwright CLI** — check if `npx playwright` works. If yes, write and run Playwright scripts.
|
|
49
50
|
3. **Neither available** — tell the user: "No browser automation available. Install Playwright (`npx playwright install chromium`) or ensure Playwright MCP is configured."
|
|
@@ -62,32 +63,35 @@ mkdir -p "$REPORT_DIR/screenshots"
|
|
|
62
63
|
This skill works with whatever Playwright is available. Here's the mapping:
|
|
63
64
|
|
|
64
65
|
### Using Playwright MCP tools (preferred)
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
|
68
|
-
|
|
|
69
|
-
|
|
|
70
|
-
|
|
|
71
|
-
|
|
|
72
|
-
|
|
|
73
|
-
|
|
|
74
|
-
|
|
|
75
|
-
|
|
|
76
|
-
|
|
|
77
|
-
|
|
|
78
|
-
|
|
|
79
|
-
|
|
|
80
|
-
|
|
|
66
|
+
|
|
67
|
+
| Action | Tool |
|
|
68
|
+
| ----------------- | ------------------------------------ |
|
|
69
|
+
| Navigate | `browser_navigate` with url |
|
|
70
|
+
| Click | `browser_click` with selector or ref |
|
|
71
|
+
| Fill form | `browser_fill_form` with field data |
|
|
72
|
+
| Take screenshot | `browser_take_screenshot` |
|
|
73
|
+
| Get page snapshot | `browser_snapshot` |
|
|
74
|
+
| Check console | `browser_console_messages` |
|
|
75
|
+
| Run JS | `browser_evaluate` with script |
|
|
76
|
+
| Wait for element | `browser_wait_for` with selector |
|
|
77
|
+
| Resize viewport | `browser_resize` with width/height |
|
|
78
|
+
| Press key | `browser_press_key` with key |
|
|
79
|
+
| Hover | `browser_hover` with selector |
|
|
80
|
+
| Handle dialog | `browser_handle_dialog` |
|
|
81
|
+
| Upload file | `browser_file_upload` with paths |
|
|
82
|
+
| Check network | `browser_network_requests` |
|
|
81
83
|
|
|
82
84
|
### Using Playwright CLI (fallback)
|
|
85
|
+
|
|
83
86
|
Write a Node.js script using Playwright API and run it via `node /tmp/qa-script.js`. Script pattern:
|
|
87
|
+
|
|
84
88
|
```javascript
|
|
85
|
-
const { chromium } = require(
|
|
89
|
+
const { chromium } = require("playwright");
|
|
86
90
|
(async () => {
|
|
87
91
|
const browser = await chromium.launch();
|
|
88
|
-
const page = await browser.newContext().then(c => c.newPage());
|
|
89
|
-
await page.goto(
|
|
90
|
-
await page.screenshot({ path:
|
|
92
|
+
const page = await browser.newContext().then((c) => c.newPage());
|
|
93
|
+
await page.goto("TARGET_URL");
|
|
94
|
+
await page.screenshot({ path: "/tmp/screenshot.png", fullPage: true });
|
|
91
95
|
// ... interactions ...
|
|
92
96
|
await browser.close();
|
|
93
97
|
})();
|
|
@@ -100,6 +104,7 @@ const { chromium } = require('playwright');
|
|
|
100
104
|
### Diff-aware (automatic when on a feature branch with no URL)
|
|
101
105
|
|
|
102
106
|
1. **Analyze the branch diff:**
|
|
107
|
+
|
|
103
108
|
```bash
|
|
104
109
|
git diff main...HEAD --name-only
|
|
105
110
|
git log main..HEAD --oneline
|
|
@@ -114,12 +119,14 @@ const { chromium } = require('playwright');
|
|
|
114
119
|
- Static pages -> navigate to them directly
|
|
115
120
|
|
|
116
121
|
3. **Detect the running app** — check common local dev ports:
|
|
122
|
+
|
|
117
123
|
```bash
|
|
118
124
|
lsof -i :3000 2>/dev/null && echo "Found app on :3000" || \
|
|
119
125
|
lsof -i :4000 2>/dev/null && echo "Found app on :4000" || \
|
|
120
126
|
lsof -i :5173 2>/dev/null && echo "Found app on :5173" || \
|
|
121
127
|
lsof -i :8080 2>/dev/null && echo "Found app on :8080"
|
|
122
128
|
```
|
|
129
|
+
|
|
123
130
|
If nothing found, ask the user for the URL.
|
|
124
131
|
|
|
125
132
|
4. **Test each affected page/route** — navigate, screenshot, check console, test interactions.
|
|
@@ -129,13 +136,17 @@ const { chromium } = require('playwright');
|
|
|
129
136
|
6. **Report findings** scoped to the branch changes.
|
|
130
137
|
|
|
131
138
|
### Full (default when URL is provided)
|
|
139
|
+
|
|
132
140
|
Systematic exploration. Visit every reachable page. Document 5-10 well-evidenced issues. Produce health score. Takes 5-15 minutes.
|
|
133
141
|
|
|
134
142
|
### Quick (`--quick`)
|
|
143
|
+
|
|
135
144
|
30-second smoke test. Homepage + top 5 navigation targets. Check: loads? Console errors? Broken links? Health score. No detailed issue docs.
|
|
136
145
|
|
|
137
146
|
### Single-page (`--single`)
|
|
147
|
+
|
|
138
148
|
Verify one page or component. Navigate, screenshot, check console errors, test interactive elements, report. Use when the user says "check if this works", "verify this page", "test this component", or provides a single URL with a focused ask. No health score — just a pass/fail checklist:
|
|
149
|
+
|
|
139
150
|
1. Page loads without errors
|
|
140
151
|
2. Screenshot looks correct (describe what you see)
|
|
141
152
|
3. Console is clean (or list errors)
|
|
@@ -143,6 +154,7 @@ Verify one page or component. Navigate, screenshot, check console errors, test i
|
|
|
143
154
|
5. Accessibility snapshot has no obvious issues
|
|
144
155
|
|
|
145
156
|
### Regression (`--regression <baseline>`)
|
|
157
|
+
|
|
146
158
|
Run full mode, then load baseline JSON. Diff: which issues fixed? Which new? Score delta?
|
|
147
159
|
|
|
148
160
|
---
|
|
@@ -150,24 +162,29 @@ Run full mode, then load baseline JSON. Diff: which issues fixed? Which new? Sco
|
|
|
150
162
|
## Workflow
|
|
151
163
|
|
|
152
164
|
### Phase 1: Initialize
|
|
165
|
+
|
|
153
166
|
1. Determine browser automation tool
|
|
154
167
|
2. Create output directories
|
|
155
168
|
3. Start timer for duration tracking
|
|
156
169
|
|
|
157
170
|
### Phase 2: Authenticate (if needed)
|
|
171
|
+
|
|
158
172
|
Navigate to login page, fill credentials, submit. NEVER include real passwords in reports — write `[REDACTED]`.
|
|
159
173
|
|
|
160
174
|
If 2FA/OTP required: ask the user for the code.
|
|
161
175
|
If CAPTCHA blocks: tell the user to complete it manually.
|
|
162
176
|
|
|
163
177
|
### Phase 3: Orient
|
|
178
|
+
|
|
164
179
|
Get a map of the application:
|
|
180
|
+
|
|
165
181
|
- Navigate to target URL
|
|
166
182
|
- Take screenshot of landing page
|
|
167
183
|
- Get page snapshot to map navigation structure
|
|
168
184
|
- Check console for errors
|
|
169
185
|
|
|
170
186
|
**Detect framework** (note in report):
|
|
187
|
+
|
|
171
188
|
- `__next` or `_next/data` -> Next.js
|
|
172
189
|
- `csrf-token` meta tag -> Rails
|
|
173
190
|
- `wp-content` -> WordPress
|
|
@@ -176,12 +193,15 @@ Get a map of the application:
|
|
|
176
193
|
**For SPAs:** Use page snapshot to find nav elements instead of link enumeration.
|
|
177
194
|
|
|
178
195
|
### Phase 4: Explore
|
|
196
|
+
|
|
179
197
|
Visit pages systematically. At each page:
|
|
198
|
+
|
|
180
199
|
1. Navigate to page
|
|
181
200
|
2. Take screenshot
|
|
182
201
|
3. Check console for errors
|
|
183
202
|
|
|
184
203
|
Then follow the **per-page exploration checklist:**
|
|
204
|
+
|
|
185
205
|
1. **Visual scan** — Look at screenshot for layout issues
|
|
186
206
|
2. **Interactive elements** — Click buttons, links, controls. Do they work?
|
|
187
207
|
3. **Forms** — Fill and submit. Test empty, invalid, edge cases
|
|
@@ -195,6 +215,7 @@ Spend more time on core features, less on secondary pages.
|
|
|
195
215
|
**Quick mode:** Only homepage + top 5 nav targets. Just check: loads, console errors, broken links.
|
|
196
216
|
|
|
197
217
|
### Phase 5: Document
|
|
218
|
+
|
|
198
219
|
Document each issue **immediately when found**.
|
|
199
220
|
|
|
200
221
|
**Interactive bugs:** Screenshot before action, perform action, screenshot after, describe what changed.
|
|
@@ -202,6 +223,7 @@ Document each issue **immediately when found**.
|
|
|
202
223
|
**Static bugs:** Single screenshot showing the problem + description.
|
|
203
224
|
|
|
204
225
|
### Phase 6: Wrap Up
|
|
226
|
+
|
|
205
227
|
1. Compute health score (see rubric below)
|
|
206
228
|
2. Write "Top 3 Things to Fix"
|
|
207
229
|
3. Console health summary
|
|
@@ -214,14 +236,16 @@ Document each issue **immediately when found**.
|
|
|
214
236
|
## Issue Taxonomy
|
|
215
237
|
|
|
216
238
|
### Severity Levels
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
|
220
|
-
| **
|
|
221
|
-
| **
|
|
222
|
-
| **
|
|
239
|
+
|
|
240
|
+
| Severity | Definition |
|
|
241
|
+
| ------------ | ------------------------------------------------------------- |
|
|
242
|
+
| **critical** | Blocks a core workflow, causes data loss, or crashes the app |
|
|
243
|
+
| **high** | Major feature broken or unusable, no workaround |
|
|
244
|
+
| **medium** | Feature works but with noticeable problems, workaround exists |
|
|
245
|
+
| **low** | Minor cosmetic or polish issue |
|
|
223
246
|
|
|
224
247
|
### Categories
|
|
248
|
+
|
|
225
249
|
1. **Visual/UI** — Layout breaks, broken images, z-index, font/color issues, animation glitches
|
|
226
250
|
2. **Functional** — Broken links, dead buttons, form validation, incorrect redirects, state issues, race conditions
|
|
227
251
|
3. **UX** — Confusing nav, missing loading indicators, slow interactions, unclear errors, dead ends
|
|
@@ -230,6 +254,8 @@ Document each issue **immediately when found**.
|
|
|
230
254
|
6. **Console/Errors** — JS exceptions, failed requests, deprecation warnings, CORS, mixed content
|
|
231
255
|
7. **Accessibility** — Missing alt text, unlabeled inputs, keyboard nav broken, focus traps, contrast
|
|
232
256
|
|
|
257
|
+
**Grading Visual/UI and UX issues:** When you spot animation, easing, timing, focus, hit-target, shadow, radius, or typography problems, grade them against the [userinterface-wiki](../userinterface-wiki/SKILL.md) skill's 152 rules and cite the violated rule ID in the issue (e.g. "violates `timing-under-300ms`", "violates `ux-fitts-target-size`", "violates `visual-concentric-radius`"). This turns vague "feels off" findings into concrete, fixable diagnoses.
|
|
258
|
+
|
|
233
259
|
---
|
|
234
260
|
|
|
235
261
|
## Health Score Rubric
|
|
@@ -239,18 +265,20 @@ Each category score (0-100), weighted average.
|
|
|
239
265
|
- Critical issue: -25, High: -15, Medium: -8, Low: -3 (per category, minimum 0)
|
|
240
266
|
|
|
241
267
|
### Weights
|
|
242
|
-
|
|
243
|
-
|
|
244
|
-
|
|
|
245
|
-
|
|
|
246
|
-
|
|
|
247
|
-
|
|
|
248
|
-
|
|
|
249
|
-
|
|
|
250
|
-
|
|
|
251
|
-
|
|
|
268
|
+
|
|
269
|
+
| Category | Weight |
|
|
270
|
+
| ------------- | ------ |
|
|
271
|
+
| Console | 15% |
|
|
272
|
+
| Links | 10% |
|
|
273
|
+
| Visual | 10% |
|
|
274
|
+
| Functional | 20% |
|
|
275
|
+
| UX | 15% |
|
|
276
|
+
| Performance | 10% |
|
|
277
|
+
| Content | 5% |
|
|
278
|
+
| Accessibility | 15% |
|
|
252
279
|
|
|
253
280
|
### Console scoring: 0 errors=100, 1-3=70, 4-10=40, 10+=10
|
|
281
|
+
|
|
254
282
|
### Links scoring: 0 broken=100, each broken link: -15
|
|
255
283
|
|
|
256
284
|
---
|
|
@@ -260,59 +288,64 @@ Each category score (0-100), weighted average.
|
|
|
260
288
|
```markdown
|
|
261
289
|
# QA Report: {APP_NAME}
|
|
262
290
|
|
|
263
|
-
| Field
|
|
264
|
-
|
|
265
|
-
| **Date**
|
|
266
|
-
| **URL**
|
|
267
|
-
| **Scope**
|
|
268
|
-
| **Mode**
|
|
269
|
-
| **Duration**
|
|
270
|
-
| **Pages visited** | {COUNT}
|
|
271
|
-
| **Screenshots**
|
|
272
|
-
| **Framework**
|
|
291
|
+
| Field | Value |
|
|
292
|
+
| ----------------- | ---------------------------------------- |
|
|
293
|
+
| **Date** | {DATE} |
|
|
294
|
+
| **URL** | {URL} |
|
|
295
|
+
| **Scope** | {SCOPE or "Full app"} |
|
|
296
|
+
| **Mode** | {full / quick / diff-aware / regression} |
|
|
297
|
+
| **Duration** | {DURATION} |
|
|
298
|
+
| **Pages visited** | {COUNT} |
|
|
299
|
+
| **Screenshots** | {COUNT} |
|
|
300
|
+
| **Framework** | {DETECTED or "Unknown"} |
|
|
273
301
|
|
|
274
302
|
## Health Score: {SCORE}/100
|
|
275
303
|
|
|
276
|
-
| Category
|
|
277
|
-
|
|
278
|
-
| Console
|
|
279
|
-
| Links
|
|
280
|
-
| Visual
|
|
281
|
-
| Functional
|
|
282
|
-
| UX
|
|
283
|
-
| Performance
|
|
304
|
+
| Category | Score |
|
|
305
|
+
| ------------- | ------- |
|
|
306
|
+
| Console | {0-100} |
|
|
307
|
+
| Links | {0-100} |
|
|
308
|
+
| Visual | {0-100} |
|
|
309
|
+
| Functional | {0-100} |
|
|
310
|
+
| UX | {0-100} |
|
|
311
|
+
| Performance | {0-100} |
|
|
284
312
|
| Accessibility | {0-100} |
|
|
285
313
|
|
|
286
314
|
## Top 3 Things to Fix
|
|
315
|
+
|
|
287
316
|
1. **{ISSUE-NNN}: {title}** — {one-line description}
|
|
288
317
|
2. ...
|
|
289
318
|
3. ...
|
|
290
319
|
|
|
291
320
|
## Console Health
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
|
321
|
+
|
|
322
|
+
| Error | Count | First seen |
|
|
323
|
+
| --------------- | ----- | ---------- |
|
|
324
|
+
| {error message} | {N} | {URL} |
|
|
295
325
|
|
|
296
326
|
## Summary
|
|
327
|
+
|
|
297
328
|
| Severity | Count |
|
|
298
|
-
|
|
299
|
-
| Critical | 0
|
|
300
|
-
| High
|
|
301
|
-
| Medium
|
|
302
|
-
| Low
|
|
329
|
+
| -------- | ----- |
|
|
330
|
+
| Critical | 0 |
|
|
331
|
+
| High | 0 |
|
|
332
|
+
| Medium | 0 |
|
|
333
|
+
| Low | 0 |
|
|
303
334
|
|
|
304
335
|
## Issues
|
|
305
336
|
|
|
306
337
|
### ISSUE-001: {Short title}
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
|
338
|
+
|
|
339
|
+
| Field | Value |
|
|
340
|
+
| ------------ | -------------------------------------------------------------------------- |
|
|
341
|
+
| **Severity** | critical / high / medium / low |
|
|
310
342
|
| **Category** | visual / functional / ux / content / performance / console / accessibility |
|
|
311
|
-
| **URL**
|
|
343
|
+
| **URL** | {page URL} |
|
|
312
344
|
|
|
313
345
|
**Description:** {What is wrong, expected vs actual.}
|
|
314
346
|
|
|
315
347
|
**Repro Steps:**
|
|
348
|
+
|
|
316
349
|
1. Navigate to {URL}
|
|
317
350
|
2. {Action}
|
|
318
351
|
3. **Observe:** {what goes wrong}
|
|
@@ -323,17 +356,20 @@ Each category score (0-100), weighted average.
|
|
|
323
356
|
## Framework-Specific Guidance
|
|
324
357
|
|
|
325
358
|
### Next.js
|
|
359
|
+
|
|
326
360
|
- Check for hydration errors in console
|
|
327
361
|
- Monitor `_next/data` requests — 404s = broken data fetching
|
|
328
362
|
- Test client-side navigation (click links, don't just navigate) — catches routing issues
|
|
329
363
|
- Check for CLS on pages with dynamic content
|
|
330
364
|
|
|
331
365
|
### Rails
|
|
366
|
+
|
|
332
367
|
- Check for N+1 query warnings in console (dev mode)
|
|
333
368
|
- Verify CSRF token presence in forms
|
|
334
369
|
- Test Turbo/Stimulus integration
|
|
335
370
|
|
|
336
371
|
### SPA (React, Vue, Angular)
|
|
372
|
+
|
|
337
373
|
- Use page snapshot for navigation — link enumeration misses client-side routes
|
|
338
374
|
- Check for stale state (navigate away and back)
|
|
339
375
|
- Test browser back/forward
|