---
name: verify-share-row
description: Verify the Help Me Decide Instagram, WhatsApp and Download controls with Playwright on an isolated local component fixture; no store access or try-on generation.
---

# Local share row verification

## Launch

From the repo root, use Node 22+ and the installed widget dependencies (`extensions/virtual-tryon-src` on Shopify, `widget-src` on WordPress). Playwright is installed in WordPress's widget; Shopify can reuse that sibling installation. Else set `PLAYWRIGHT_MODULE` to an installed `@playwright/test` directory. Chrome defaults to `/usr/bin/google-chrome`; override with `CHROME_PATH`. Playwright's video recorder requires its ffmpeg runtime (`playwright install ffmpeg`). In the issue #54 workspace:

```sh
export PATH=/tmp/issue54-tools/node_modules/node/bin:$PATH
node .cursor/skills/verify-share-row/run.mjs --doctor
node .cursor/skills/verify-share-row/run.mjs ../../share-buttons/$(basename "$PWD")-verified
```

The executable helper builds the real SharePanel, translations, styles and compositor into a scratch bundle, opens a server on an OS-assigned loopback port, and serially drives each scenario. It closes its browser/server and removes scratch files in `finally`, including on failure. Independent runs have distinct ports and profiles; use distinct output directories too. It never writes Shopify generated extension assets or WordPress production assets.

## Doctor

`--doctor` loads the installed build/Playwright libraries, checks the browser executable, and prints the repo and production source hashes. The normal run also checks its own server returns HTTP 200 and the page displays “Local share fixture” before clicks. After failure, rerun doctor and start a new helper; never attach to a previous instance. Failure evidence stays in the output directory.

## Drive

Read [the feature map](features/README.md). The helper opens “Share your look” (Italian: “Condividi il tuo look”), then clicks Instagram, WhatsApp and Download. WordPress additionally drives its initially expanded gallery entry point. Widths: 1280, 390, 320. Both locales are exercised.

The only substitutes are the synthetic local image passed as a public component prop and the OS/browser clipboard and native-share boundaries. It never injects internal component state. It uses real native Canvas rendering, PNG downloads and (on successful fallback) the real clipboard. Playwright controls the browser clock to verify toast expiry without shared-host wall-clock delays. Native cases assert the call happened with active transient user activation, before pending clipboard settlement. Every network request except this owned loopback server is blocked and recorded as a failure.

## Evidence

The output contains `verification.json` with source hashes, scenario results, measured layout and actual telemetry; screenshots before interaction and during fallback; downloaded PNGs; Playwright traces with actions/snapshots; and browser videos. Inspect a 320px row and fallback toast image. Trace files can be opened with the installed Playwright `show-trace` command. The helper verifies every export is 1080×1920 and native/download bytes agree. Successful fallback reads the real clipboard back. Zero external requests and zero page errors are required.

This proves local UI and browser-boundary behavior, not delivery to Instagram/WhatsApp or a physical-phone share sheet. For WordPress's full production-bundle result/gallery/landing integration, also run `cd widget-src && npm run test:browser`; its local fixture substitutes API responses and makes no store calls. Full repo checks remain `python3 scripts/quality_gate.py`. That script requires a clean committed worktree for overall PASS; when the owner requires uncommitted changes, report the guard separately without weakening it.

## Cleanup

The helper owns and closes only its own instances. Evidence survives: confirm `verification.json`, a `*-row.png`, a `*-Download.png`, `*-trace.zip` and `videos/*.webm` remain after completion. Do not delete failed-run evidence as cleanup. No deployments, generation APIs, store connections, commits or pushes are part of this skill.

## Helpers

`run.mjs` is executable. Its syntax is `node .cursor/skills/verify-share-row/run.mjs [OUTPUT_DIRECTORY|--doctor]`. The default output is `docs/pr-evidence/issue-54-help-me-decide/share-row`; prefer the explicit scratch evidence directory above to avoid adding large artifacts to the repo. Run `/maintain-verification-skill` when this row changes.
