with one click
linear-ui-evidence
// Publish Playwright screenshots and screencasts for UI-affecting Symphony work into Linear issue comments as rendered rich media. Use before moving UI changes from In Progress to Agent Review.
// Publish Playwright screenshots and screencasts for UI-affecting Symphony work into Linear issue comments as rendered rich media. Use before moving UI changes from In Progress to Agent Review.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | linear-ui-evidence |
| description | Publish Playwright screenshots and screencasts for UI-affecting Symphony work into Linear issue comments as rendered rich media. Use before moving UI changes from In Progress to Agent Review. |
Use this skill when a Symphony issue has user-visible UI changes and Playwright screenshots or screencasts need to be published for review.
This workflow is the intentional GraphQL-only exception to routine Linear MCP
operations. Routine issue lookup, comments, and state changes should use Linear
MCP tools when available. UI evidence publication must use this bundled
publisher because it needs private fileUpload(makePublic:false), signed upload
PUTs, rich bodyData image/video nodes, and a verification re-read of
comment.bodyData.
Do not hand-author dynamic app-server linear_graphql calls for screenshots or
screencasts. Capture media locally, then run the publisher script below.
playwright skill:
node .codex/skills/linear-ui-evidence/scripts/publish-linear-ui-evidence.js \
--issue ABC-123 \
--summary "Dashboard drilldown UI evidence" \
--image output/playwright/drilldown.png::"Drilldown with timeline lanes visible" \
--video output/playwright/drilldown.webm::"Opening the drilldown and inspecting blocker details"
verification.status: "passed".Review routing: UI review required
UI evidence: published in this Linear issue
or:
Review routing: no UI review required
UI evidence: not applicable
--issue is required and may be a Linear key such as ABC-123 or an
issue id.--image path::caption for .png screenshots.--video path::caption for .webm or .mp4 screencasts.--summary is optional.--comment-id updates that explicit existing comment; without it, the script
creates one new evidence comment. The script does not auto-discover old
evidence comments.LINEAR_API_KEY wins. If absent, the script loads repo .env.The script uploads media with private Linear fileUpload(makePublic:false) and
creates rich bodyData image/video nodes. It must not use Linear
attachments, base64 payloads, raw HTML, public URLs, or local paths as reviewer
evidence.
The script validates inputs before network calls, performs the direct
GraphQL/HTTP upload and comment operations, and fails with typed errors when
upload, comment save, or verification fails. A successful run re-reads
comment.bodyData and reports verification.status: "passed" only after the
rendered media node counts and sources match the uploaded assets.
1280x900 or wider
unless the UI is mobile-specific.Local output/playwright/* files are working artifacts. Do not commit them, and
do not delete them unless the user asks.