This directory is reserved for production-readiness UI evidence captured from repo-owned synthetic fixtures only.
Rules:
- Capture screenshots from the local web app or CI browser jobs using synthetic TestHistory data.
- Do not copy screenshots from messaging apps, download folders, desktops, customers, or other untrusted external sources into the repository.
- Do not commit images containing tokens, signed URLs, local filesystem paths, emails, or real project identifiers.
- Prefer CI artifacts for large screenshot sets; commit only small curated evidence when it is useful for review.
- Run
npm run smoke:upload-close-uibefore publishing final screen evidence for upload/close flows.
Expected final screen set:
- Auth login
- Projects
- Dashboard
- Launch list
- Launch detail
- Launch result tabs
- Selected test case
- Selected test case tabs
- Defects
- Analytics
- Project settings tabs
- Main dialogs
Committed final screenshots are captured from repo-owned synthetic fixtures with a desktop viewport
through npm run screenshots:capture. The required route list lives in
expected-manifest.json; the capture script validates its internal screen list against that file
before writing screenshots. The command also writes final/manifest.json with the route, auth state,
dialog flag, and byte size for every PNG. CI captures the full deep set below and uploads the whole
docs/screenshots/final/* directory as an artifact; local capture requires Playwright Chromium to be
installed in the current user profile. The capture script tries Playwright's headless shell first and
falls back to the regular Chromium executable path when that is the browser available in the local
cache. If local browser download is blocked, use the CI ui-screenshot-evidence artifact.
| File | Screen | Evidence purpose |
|---|---|---|
final/projects.png |
Projects | Project navigation and project state surface. |
final/dashboard.png |
Dashboard | Default THQL widgets: pass-rate metric, status distribution, and slow/risk table. |
final/launches.png |
Launch list | Launch table, filters, counters, and lifecycle state. |
final/launch-detail.png |
Launch detail | Result list, counters, artifacts, and close/upload context. |
final/selected-test-case.png |
Selected test case | History, retries/flaky state, metadata, and detail tabs. |
final/defects.png |
Defects | Defect grouping, mute/readiness state, and operational actions. |
final/analytics.png |
Analytics | Analytics metrics, risk signals, and table output. |
The capture script also records deeper route and dialog states for design review and CI evidence:
final/auth-login.pngfinal/launch-results.pngfinal/launch-result-history.pngfinal/launch-result-defects.pngfinal/selected-test-case-history.pngfinal/selected-test-case-defects.pngfinal/defects.pngfrom#defects/PAY-337final/dialog-dashboard-widget-delete.pngfinal/settings-access.pngfinal/settings-tokens.pngfinal/settings-integrations.pngfinal/settings-retention.pngfinal/settings-fields.pngfinal/dialog-role-matrix.pngfinal/dialog-member-edit.pngfinal/dialog-integration-edit.pngfinal/dialog-api-token.pngfinal/dialog-quarantine.pngfinal/dialog-delete-launch.png
CI attempts to upload the same set as the one-day ui-screenshot-evidence artifact. The upload is supplemental and best effort because GitHub storage quota can reject it after all browser checks and screenshot capture have passed; the committed set and its checked manifest.json remain the required evidence.
The committed expected-manifest.json is the review contract for designers and CI:
- every
namemust be represented inscripts/capture-ui-screenshots.mjs; - every route/dialog must stay listed here for reviewer orientation;
- the generated
final/manifest.jsonmust keep the same names, hashes, auth flags, dialog flags, and1440x1000viewport before evidence is accepted.