npx claudepluginhub jikig-ai/soleur --plugin soleurThis skill uses the workspace's default tool permissions.
Verify that features actually work before merge -- not just that pages render, but that forms submit correctly, external services receive the right data, and data integrity holds across system boundaries.
Scope boundary with /test-browser: This skill verifies functional correctness (user flows + external service state). /test-browser verifies visual rendering, layout regressions, and console errors. They coexist in the pipeline.
dev script in the project's package.json (auto-started if not running)skill: soleur:qa, args: "<plan_file_path>"
The skill reads the plan file's ## Test Scenarios section and executes each scenario.
Read the plan file passed as $ARGUMENTS. Find the ## Test Scenarios section.
If no Test Scenarios section exists: Output "No test scenarios found in plan — skipping QA" and stop. Do not block the pipeline.
If Test Scenarios section is empty: Same as above — warn and skip.
Before executing any browser scenarios, check whether the dev server is reachable. If not, attempt to start it automatically.
Check if already running: curl -sf --max-time 3 http://localhost:3000/ >/dev/null 2>&1. If reachable, skip to Step 2 — no action needed. Record that the server was NOT started by QA (so cleanup skips it).
Detect the dev command: Read apps/web-platform/package.json and extract the scripts.dev field. If no dev script exists, warn: "No dev script found in package.json — cannot auto-start server. Skipping browser scenarios." Continue to API verification steps (do not block the pipeline).
Start the server: Change to the apps/web-platform/ directory first (the dev command must run from the app root). Check if Doppler is available (command -v doppler). If available, start via doppler run -p soleur -c dev -- <dev-command> > /tmp/qa-dev-server.log 2>&1 &. If Doppler is unavailable, start via <dev-command> > /tmp/qa-dev-server.log 2>&1 &. Record the background PID.
Poll for readiness (30s timeout): Poll http://localhost:3000/ until it responds or 30 seconds have elapsed, whichever comes first. If the server responds, proceed to Step 2. If the timeout elapses:
/tmp/qa-dev-server.log in the failure reportDetermine the Doppler config to use:
# Check if DEPLOY_URL is set (indicates production context)
echo "${DEPLOY_URL:-not_set}"
DEPLOY_URL is set: use Doppler config prdDEPLOY_URL is not set: use Doppler config devStore the config name for use in subsequent doppler commands.
For each test scenario in the plan, execute the steps it describes. Scenarios contain three possible step types, identified by their prefix:
browser_navigate, browser_fill_form, browser_click, browser_snapshot, browser_take_screenshot)doppler run + curl command from the scenario. Compare the output against the expected value stated in the scenario.Execution order for each scenario:
browser_take_screenshotdoppler secrets get fails (secret not found), warn "Doppler secret unavailable — skipping API verification" and skip this stepRecord the result for each scenario: PASS or FAIL with evidence (screenshots, API response output, error messages).
After all scenarios complete, output a report in this format:
## QA Report
**Plan:** <plan file path>
**Environment:** <dev or prd>
**Result:** <PASS (N/N scenarios passed) or FAIL (N/N scenarios passed)>
### Scenario 1: <scenario description> ✅ or ❌
**Browser:** <what was done, result>
**API:** <command executed, expected vs actual>
**Evidence:** <screenshot filenames>
### Scenario 2: ...
After outputting the result (pass or fail), always proceed to Step 5.5 for cleanup before returning.
If the dev server was started in Step 1.5 (a background PID was recorded), kill the process by PID, remove /tmp/qa-dev-server.log, and report: "Stopped auto-started dev server (PID <pid>)." If the server was already running before QA (no PID recorded), do nothing.
This step runs regardless of whether scenarios passed or failed.
The skill handles missing prerequisites without blocking the pipeline:
| Missing Prerequisite | Behavior |
|---|---|
| No Test Scenarios section in plan | Warn and skip QA entirely |
| Playwright MCP unavailable | Skip browser steps, still run API verification |
| Doppler secret not found | Skip that API verification step with warning |
| Dev server not running | Auto-start via package.json dev script; if startup fails, report reason and skip browser scenarios |
| No dev script in package.json | Warn and skip browser scenarios (API verification still runs) |
| Dev server startup timeout (30s) | Report failure reason and skip browser scenarios |
| curl command fails (network error) | Fail that scenario with error details |