デザイン&モーション · daymade/claude-code-skills

frontend-visual-qa

実ブラウザまたはネイティブアプリのジャーニー、検証スクリーンショット、DOMジオメトリ、レスポンシブ/投影ビューポート、バンドルされたPlaywrightスキャンを使用して、レンダリング済みのWeb、ランディングページ、HTMLスライド、ブラウザツール/ゲーム、ダッシュボード/管理画面、デザインシステム、デスクトップUIを監査します。UI実装後に、タイポグラフィ、折り返し、重なり、はみ出し(オーバーフロー)、レスポンシブ、ルーティング、オーバーレイ、地図、過渡状態、データ可視化、ブラウザ出力、ファイルダイアログ、PDF/印刷、Electronシェルの欠陥の検出や、レンダリング成果物と視覚リファレンスの比較に使用します。新規UI設計、スクリーンショットからのデザインシステム抽出、一般的なQAプログラムの立ち上げ、非視覚的なコードデバッグには使用しないでください。

L5 厳格管理 · 隔離環境と厳格な監査V2 人間監査済認証情報/セッションコマンド実行ネットワーク通信ファイル書き込みDual-pass Audit
Author daymadeGitHub daymade/claude-code-skills ↗Stars 1385License MIT(仓库根 LICENSE 文件;GitHub API spdx MIT;Copyright (c) 2025 daymade)Commit d5c4678cb5
管理レベルは Skill の能力と推奨統制措置を示すものであり、品質や安全性の認証、利用可否の判定ではありません。使用の可否はユーザーおよび管理者が決定します。Agent 環境によって制約が異なるため、自動保護を仮定しないでください。第三者製 Skill の著作権は原著作者に帰属し、利用リスクは利用者が負います。

1仕組みと動作原理

skill全体の骨格は「レンダリング証拠階層制」です。A=実際の可視ブラウザ/ネイティブウィンドウによる操作、B=同型DevToolsまたはプロジェクト独自のE2E、C=同梱スクリプトによるクリーンなヘッドレス機械スキャン、D=ソースコード/lint/ビルド/単体テスト。下位レベルの証拠を上位の強い結論に昇格させることは明示的に禁止されています。同梱のPlaywrightスキャンはLevel Cと明確に位置づけられており、最終判定ではありません。

frontend-visual-qa/SKILL.md
| C | Fresh headless mechanical sweep from the bundled script | Overflow, wrapping, images, basic layout heuristics, screenshot candidates |
これに続いて「Do not promote a lower level into a stronger conclusion:」と6つの昇格禁止例が明記されています(未閲覧のスクリーンショットパスに視覚的証拠価値はない、ヘッドレスの空状態ではユーザーのデータ入力状態を検証できない、renderer URLではElectron外殻を検証できない、ハンドラー呼び出しではChrome印刷プレビューを検証できない、ポインター/hoverスタイルはクリックの有効性を証明できない)。これにより「何をもって確認したとするか」がエージェントの主観的な自己申告ではなく、判定可能なルールとして定義されています。

同梱スクリプトは意図的にnpm依存関係を一切持たず、Playwrightは**監査対象プロジェクト**のnode_modulesから解決されます。まずcreateRequire(監査対象プロジェクト/package.json)を試し、その後skill自身のディレクトリへとフォールバックします。プロジェクト内にPlaywrightが存在しない場合は、インストールを行うのではなくグレースフルに降格し、その旨を正確に報告します。

frontend-visual-qa/scripts/visual_layout_audit.mjs
createRequire(`${process.cwd()}/package.json`), // the audited project
上部のコメントにはパッケージ配置の差異に関する注意点が記載されています。pnpm workspace環境ではplaywright-coreは@playwright/testの非昇格な推移的依存関係であり、ルートのnode_modulesには存在しないため、解決候補の順序はplaywright-core / playwright / @playwright/testとなっています。検出できない場合のエラーメッセージには「Do not change the audited project's dependencies unless that mutation is explicitly authorized.」と明記されており、ゼロ依存は設計上の意図であり手落ちではありません。probeスクリプトも同様の戦略(まず<プロジェクト>/node_modules/playwright/index.jsを探し、import('playwright')へフォールバック、失敗時はexit 2で当該検証をスキップ可能と通知)を採用しています。

静的解析ではなく、auditPage検出関数全体がpage.evaluate経由で実際のChromiumページ内に注入されて実行されます。getBoundingClientRect、scrollWidth-clientWidth、getComputedStyle、checkVisibilityを用い、本物のレンダリングエンジン上で値を取得して構造化されたissuesを返却します。

frontend-visual-qa/scripts/visual_layout_audit.mjs
const result = await page.evaluate(auditPage, {
呼び出し側はまずchromium.launch({headless:true})(executablePathはfindChrome()によりChrome/Chromium/Edge候補から解決され、CHROME_PATHで上書き可能)を実行し、デフォルトの3段階ビューポートマトリクス(desktop-wide 1700x1000、desktop 1440x900、mobile 390x844 + deviceScaleFactor 2 + isMobile + hasTouch)ごとにnewPage → goto → スクリーンショット → evaluateを順次処理します。したがって「なぜ実現できるか」の回答は、HTMLを解析して推測するのではなく、ブラウザの実際のレイアウトエンジンに欠陥判定を委ねている点にあります。

「文字が実際にレンダリングされたか」は1文字単位で判定されます。visibleTextFromNodeがRangeを用いて各文字のバウンディングボックスを個別に取得し、祖先のoverflow:hidden/clipによるクリッピング矩形を順次減算し、クリップされた文字を空白に置き換えます。そのため、--forbid/--requireが検査するのはtextContentではなく、実際に目に見えるテキストです。

frontend-visual-qa/scripts/visual_layout_audit.mjs
range.setStart(node, index);
付随するrectSurvivesClipsとcollectNonScrollableAncestorClipsが矩形の交差判定を行います。isVisibleはel.checkVisibility({ checkOpacity: true, checkVisibilityCSS: true })を優先し、非対応時はdisplay/visibility/opacity判定にフォールバックします。これが単に「DOMのテキストを読み取る」タイプの検査との最大の差別化ポイントです。

オーバーフローとクリッピングは「疑わしい要素の列挙」ではなく数値計算で処理されます。要素レベルのoverflowXはel.scrollWidth - el.clientWidth、ページレベルはdocumentElement.scrollWidth - clientWidth、セクションレベルはscrollWidth-clientWidthおよびrect.width - documentElement.clientWidthの2つの基準で個別に算出し、閾値を超えた場合のみpx数値を伴う項目を生成します。

frontend-visual-qa/scripts/visual_layout_audit.mjs
const overflowX = el.scrollWidth - el.clientWidth;
同系統の項目として、page-horizontal-overflow(>1px、error)、element-horizontal-overflow(>2px かつ overflowX!==visible、error)、text-clipped(overflowY>2 かつ overflowYがhidden/clip かつ line-clamp/ellipsisなし、error)とtext-truncated(line-clamp/ellipsisあり、warningへ降格)、section-horizontal-overflow、section-wider-than-viewportがあります。閾値とseverityはいずれも明示的な定数です。

メディアの欠陥は合否判定ではなく、selected / rendered / notRendered / loaded / broken / stillLoading / deferredLazy / missingSourceのように状態別に細分化されます。また、「ファーストビュー外 + lazy + 未リクエスト」はdeferredLazyとして独立して分類され、未リクエストの画像を破損画像と誤認するのを防ぎます。

frontend-visual-qa/scripts/visual_layout_audit.mjs
const isDeferred = !mediaWalkRequested
判定条件は!mediaWalkRequested && !inViewport && isLazy && (!img.complete || naturalWidth === 0 || !source)です。--scroll-visible-mediaを指定すると、レンダリングされたメディア行を巡回して遅延ロードをウォームアップします。このフラグがない場合、レポートには欠陥ではなくdeferred coverageとして記録されます。その他、image-aspect-mismatch(object-fitがcover/contain/scale-down以外かつ表示比率と自然比率の差 >0.08、error)やimage-heavy-crop(coverかつ差 >0.25、warning)も備えています。

「サイレントデグラデーション(静的な機能低下)」の検出には、APIの自己申告を信じるのではなく反証可能な測定を採用しています。fontモードではラテン文字を含むプローブ文字列をレンダリングし、意図的に存在しないフォントファミリの幅との差分を計算します。document.fonts.check()は対照用としてのみ出力されます(@font-faceが一切存在しない場合でもtrueを返すためです)。

frontend-visual-qa/scripts/silent_degradation_probe.mjs
const sentinel = measure('"NoSuchFamily__PROBE__"');
プローブ文字列は「Handgloves 0123456789 幅」です。ファイルヘッダーのコメントではラテン文字が必須である理由が説明されています。CJK文字はどのフォントでも全角であるため、すべてCJKのプローブではフォントのフォールバック代替を検出できません。測定前にはawait document.fonts.load(...)およびdocument.fonts.readyを実行します。そうしないと、「プロジェクトに含まれているが当ページでは未使用」のフォントが未リリースのフォントと区別できなくなります。

fontモードは5つの排他的な結論(platformGeneric / healthy / hostProvidedOnly / declaredButUnusable / absentStackEntries)を出力し、hostProvidedOnlyと破損アセットのみを欠陥と判定します。「バンドル済みで正常」と「未リリース」を混同すると、ユーザーが本来利用可能なフォールバックを削除してしまうリスクがあるためです。

frontend-visual-qa/scripts/silent_degradation_probe.mjs
const hostOnly = custom.filter((f) => f.actuallyRenders && !f.shippedByPage);
actuallyRenders = |幅 - センチネル幅| > 0.5、shippedByPage = document.fonts内に同名のfaceが存在するかどうかで判定されます。終了コードはhostOnlyまたはbrokenAssetに該当する場合は1、いずれもなければ0となります。

classモードは、「コンポーネントライブラリのメジャーバージョン変更に伴う改名により、CSSルールセット全体が永久にマッチしなくなる」といったエラーの出ない劣化を検出します。プロジェクトのCSSから参照されている.ant-*クラス名を抽出し、インストールされているライブラリのCSS内に存在するかを1件ずつ確認し、ヒット数ゼロのものをdeadと判定します。

frontend-visual-qa/scripts/silent_degradation_probe.mjs
Rules targeting them match nothing and fail silently — the component keeps the library's stock look.
双方のCSSはまずstripCssComments(引用符やエスケープシーケンスを考慮した1文字ごとのステートマシン)を通過するため、コメント内の古いクラス名による偽陽性や、コメントアウトされたクラス名による偽陰性は発生しません。この点はtests/test_silent_degradation_probe.mjsの最初のテストケースで検証されています。スクリプト自身も、セレクタグループ内の別の分岐がマッチしていれば未使用クラス名は実害をもたらさないため、手動確認の上で修正するよう注意を促しています。

証拠の規律はプロンプトだけでなくコードレベルで徹底されています。レポート内のURLはすべて構造化マスキング(origin + /<redacted-path> + クエリキー名 + #<redacted-fragment> のみ保持)され、ターゲットに関連する機密トークンはレンダリングテキストからマスクされます。headerは環境変数を経由してのみ渡すことができ、直接指定された--headerはブラウザ起動前に拒否されます。

frontend-visual-qa/scripts/silent_degradation_probe.mjs
process.stderr.write('--header is disabled; use --header-env for every header value\n');
visual_layout_audit.mjs側にはredactUrlForEvidence / protectRenderedEvidence / targetSensitiveTokensが実装されており、URLのパス、クエリ値、パスワード断片をページテキストから順次<redacted-target-value>に置換します。targetEvidenceはfile:ターゲットに対してはcontentSha256を計算し、webターゲットに対してはtargetStringSha256フィンガープリントとクエリキー名リストのみを保持します。このようにデフォルトで閉じた証拠処理は、同種のskillの中でも稀です。

2コア機能

01実ブラウザLevel C機械スキャン:デフォルトの3段階ビューポートマトリクス(1700x1000 / 1440x900 / 390x844@DPR2+isMobile+hasTouch)で順次スクリーンショットを取得してJSONレポートを出力。終了コード0/1/2(問題なし / error検出または--fail-on-warning時のwarning検出 / 入力または実行時エラー)。
02ジオメトリおよび組版の欠陥計算:ページ/セクション/要素の3レベルでの横スクロールオーバーフロー、テキストクリッピングと意図的な省略の区別、孤立した見出し行、コントロール要素の折り返し、短いテーブルヘッダーの折り返し、不適切なCJK改行境界、画像とフロートテキストの衝突、カード左側のカラーバーまたは内部シャドウのAIアーティファクト候補(card-side-rail-ai-slop)。
03アクセシビリティの機械的候補検出:フォーカス不能な可視インタラクティブrole要素、aria-hiddenが付与された可視インタラクティブ要素、:focus/:focus-visibleの代替なしにoutline:noneでフォーカスリングが消去されている要素(error)、focusルール自体の欠落(warning)、アニメーションが存在するがprefers-reduced-motion分岐がないページ。
04モバイル有効ビューポート検証:meta viewportの欠落、要求幅に対するinnerWidthまたはvisualViewport.widthの24px以上の乖離、scaleの1からの0.08以上の乖離をerrorと判定し、「実質的に縮小表示されたデスクトップレイアウトにすぎない名目上のモバイル表示」を防止。
05メディア状態の証拠収集と遅延ロード事前ウォームアップ:8状態への分類、--scroll-visible-mediaによるレンダリング済みメディア行へのスクロールと遅延ロードのトリガー、画像アスペクト比/object-fit/過度なクリッピング判定、--media-selectorによるメディア範囲の限定。
06ページタイプ契約ヒューリスティクス:ランディングページのファーストビュー見出しとメインCTA、ダッシュボードのタスク領域の存在、アプリ/ツール/ゲームのインタラクティブ性の存在、deckスライド構造とキャンバスサイズの一貫性、デザインシステムの6大シグナル、live-artifactのフレームとインタラクション密度、タイプドリフトとカード密度。
073種類のサイレントデグラデーション検出モード:font(センチネルフォントの幅の差分によりフォントが実際に描画されているかを反証)、class(プロジェクトCSSで参照されているクラス名がインストール済みライブラリCSSで廃止されていないか検証)、shot(要素単位で切り抜いたスクリーンショットをエビデンスとして取得、サイズはデバイスピクセルではなくCSS pxで報告)。
08アテンションインベントリ(attentionInventory):ファーストビューの浅い可視テキストノード、完全重複テキストグループ、同一コンテナ内のラベルエコーを集計し、necessityVerdict: "not_evaluated"を明示的に出力(テキスト全体の検証可能性を担保しつつ、内容の必要性の合否判定は行わない)。

3外部依存関係

KindDependency / Endpoint
packagePlaywright(playwright-core / playwright / @playwright/test 三选一,从被审计项目解析)
cli本机 Chrome / Chromium / Edge 可执行文件(findChrome 的候选路径,可用 CHROME_PATH 覆盖)
network被审计目标 URL 及其子资源(唯一网络目的地,由调用者经 --url 指定)
cliNode.js 运行时与内置模块(node:crypto/fs/os/path/url/module);自带回归用 node --test

4推奨統制措置と判定根拠

安全運用のための推奨統制措置
Agent 向け
隔離環境で実行、都度明示的な認可
管理者向け
厳格な認可、全量監査、コンプライアンス確認
判定根拠(ファイルパスと抜粋)
  • 本地凭据 / 浏览器配置: ユーザーのログインCookie/セッション/キーチェーンの読み取り: --storage <playwright-storage-state.json>:ディスク上のPlaywrightログイン状態ファイル(Cookie/を含む)を読み取り
  • scripts/: ローカルスクリプトまたはコマンドの実行: node scripts/visual_layout_audit.mjs(メインスキャナー:headless Chromiumを起動し、auditPageを注入
  • 网络端点: 外部ネットワークアクセスの宣言: page.goto(--url)(visual_layout_audit.mjs)およびその後にページ自身が開始するサブリソースリクエスト—接続先は監査対象オリジンのみ
  • 本地工作目录: ファイルの読み書きと成果物の出力: <outDir>/<viewport>.png および <outDir>/frontend-visual-qa-report.json(issues、を含む
監査ノート: 判定の根拠(トリガー条件を明記):デフォルトの実行パス(ローカルURLを1つ渡すのみ)は非常に安全です。ローカルのheadless Chromiumが呼び出し側の指定したターゲットにアクセスし、一時ディレクトリに書き込むのみで、サードパーティへの外部送信は行いません。ただし、コード内には評価すべき4つの機能が存在します:① 資格情報を環境変数から読み取り、**監査対象のターゲットオリジンへ能動的に送信**(--header-env、値はargvに含まれない);② ディスク上のPlaywrightログイン状態ファイル(--storage、Cookie/localStorageを含む)を読み取りコンテキストに注入;③ サードパーティパッケージであるPlaywrightへの依存(監査対象プロジェクトから解決され、skill自体には同梱されない);④ probeスクリプトにおけるTLS検証無効化オプション--ignore-https-errorsの提供(SKILL.mdではTLSがデフォルトで有効であり、信頼された自己署名オリジンにのみ例外を認める旨が記載されており、利用には呼び出し側が明示的にフラグを指定する必要がある)。なお、スクリプト自体はいかなる書き込み変更も行わず、デフォルトで監査専用(audit-only)であり、ターゲットの再起動や再デプロイも行いません。またCookieデータベース、キーチェーン、.envファイルを直接読み取ることもありません。ローカルフィクスチャやローカル開発サーバーに対して認証情報フラグを使用せずに実行する場合、実質的な影響範囲は最小限です。

5二重目の独立検証

  • [ok] external_deps 逐条反查调用点是否真实存在 — grep 工具全量扫 scripts/:Playwright 候选数组(playwright-core / playwright / @playwright/test)、findChrome 的 process.env.CHROME_PATH、page.goto(url, { waitUntil, timeout: 30_000 })、SKILL.md 的 node --test 四处均逐字定位到文件行;网络 token 扫描只命中两处——probe 的 route.fetch({ headers: requestHeaders, maxRedirects: 0 }) 与 visual_layout_audit.mjs 用法字符串里的 http://localhost:port/ 示例,无第三方端点,无 axios / XMLHttpRequest / WebSocket / child_process / new Function。
  • [discrepancy] 安全结论反例搜索:是否存在未披露的外发/降级/隐藏脚本 — 主体结论(无第三方外发、无遥测、默认只读)成立,但发现两处 SKILL.md 未在安全语境点明的代码级能力:① probe 经 route.fetch 把 --header-env 提供的凭证以请求头形式发到目标 origin(值取自 process.env,不进 argv),文档只强调『argv 只含名字不含值』,未说『值会被转发给目标站』;② probe 有 --ignore-https-errors(ignoreHTTPSErrors: has('ignore-https-errors')),会关闭该上下文的 TLS 校验——SKILL.md 只在 sweep 段落自述『TLS stays enabled except for an explicitly trusted self-signed origin』,未提 probe 侧同一开关。两者都是显式 opt-in、需调用者自己写出 flag;未发现混淆内容、后门或隐藏脚本。
  • [ok] 凭证读取与文件写入面逐条复核 — credential_reads 三条、file_writes 三条均落到代码行:process.env[envName](probe)、storageState: flag('storage') || undefined、findChrome 的 CHROME_PATH/PROGRAMFILES/LOCALAPPDATA;写入侧为 outDir(默认 os.tmpdir()/frontend-visual-qa-<ISO>-<pid>)、frontend-visual-qa-report.json、截图 PNG。脚本不读 cookie 数据库、不读 keychain、不读 .env,也无删除行为。
  • [ok] 文件清单 glob 全量核对(含隐藏文件) — find -type f 得 24 个文件:SKILL.md 1 + scripts 3 + tests 2 + references 7 + evals/evals.json + evals/trigger-evals.json + evals/files 13(12 HTML + static-review.png);find -name ".*" 在 skill 目录内为空(无隐藏文件、无 .env、无嵌套仓库)。与 SKILL.md『Bundled Resources』清单一一对应,没有未列出的可执行文件。
  • [ok] 『实现原理』是否夸大:功能声明 vs 实际代码能力 — SKILL.md 称自带脚本为 'Playwright-powered mechanical viewport, layout, and media-state sweep with screenshots and JSON evidence',代码确为 chromium.launch + 三档视口 + 截图 + JSON 报告;report.checked 列的七项(navigation status and final URL、effective viewport and meta viewport、page and section overflow、rendered text wrapping and clipping candidates、custom interactive-role focusability candidates、rendered image request/load state and aspect candidates、page-type contract heuristics)在 auditPage 内逐条可定位到具体计算与 push。反向也不夸大:脚本在 report.notChecked 里主动列出做不到的项(真实浏览器 chrome 与打印预览、下载/剪贴板/弹窗/原生对话框、键盘旅程与焦点外观、完整 WCAG、GIS 交互、主观 parity),自述边界严于对外宣称。
  • [discrepancy] SKILL.md 关于『报告只写进唯一临时运行目录』的措辞与代码是否一致 — 默认路径确实唯一(os.tmpdir()/frontend-visual-qa-<ISO 时间戳>-<pid>,且拒绝非空 outDir 以防陈旧证据),但 --out 允许任意路径,脚本层不限制它落在被审计项目内;SKILL.md 的『Do not mutate the audited project merely to run the sweep』只是提示词层约束,代码不强制。属措辞与实现的轻微落差,非缺陷。
  • [ok] 注入面复核:被审计页面内容是否会进入可执行路径 — 四个注入浏览器的函数体全部来自 skill 自带文件(auditPage / collectAttentionInventory / primeVisibleMedia / collectScreenshotSections),页面内容只作为数据被 Range 测量、正则匹配、结构描述,不参与代码执行;无 eval、无 new Function、无 child_process,也没有把页面文本拼进 argv/shell 的路径(probe 的 --select 只交给 page.locator)。残余风险在模型侧(页面可埋针对审计 agent 的指令文本,本 skill 无过滤)与用户输入侧(--forbid/--require 正则无回溯上限)。
  • [ok] evals/ 的定位:是否确为自带评测夹具,能否在本地复跑出分数 — evals/evals.json 是 21 条 prompt + expectations 的行为回归集(12 条带 fixture 文件),evals/trigger-evals.json 是 24 条 should_trigger 路由集(14 true / 10 false),schema 与仓库内 daymade-skill/skill-creator/references/eval_pipeline_schemas.md 一致,且 skill-creator 的打包逻辑默认排除 root evals/(自述 'excluded by default as a development asset'),与 SKILL.md 的『excluded from packaged runtime content』吻合。但 skill 目录内没有 runner/评分器,仓库 .github/workflows/ci.yml 与 benchmark.yml 也未引用本 skill 的 tests 或 evals(grep 无命中),因此这些用例目前只在手动执行时生效。

6結論

  • 「視覚的QA」を主観的な記述から再検証可能な証拠チェーンへと転換:反証可能なscope contractを定義した上でA〜Dの証拠レベルに応じた収集を行い、弱い証拠を強い結論へと昇格させることを明示的に禁止(未閲覧のスクリーンショット、ヘッドレスの空状態、renderer URLはいずれも該当結論の裏付けとして不適格と規定)。
  • リスト出力ではなく実測計算:オーバーフローはscrollWidth-clientWidthのpx差分、クリッピングは文字単位のRangeと祖先クリッピング矩形の交差判定、画像は表示比率と自然比率の偏差で判定し、閾値とseverityをハードコード。--require/--forbidおよび終了コード0/1/2を備え、CIやエージェントループに直接統合可能。
  • 「全チェックがパスするのに描画崩れが起きている」問題に特化:silent_degradation_probeのfontモードはセンチネル幅の差分でフォントの実際の読み込みを反証(document.fonts.check()の偽陽性も回避)、classモードはライブラリ改名による未マッチ規則を特定。5つの判定のうち欠陥とするのは2つのみに留め、正常なフォールバックの誤削除を抑止。
  • デフォルト読み取り専用かつ極めて細粒度な権限モデル:source fix / interaction / target mutation の各権限は相互に独立。スクリプトは再起動や再デプロイを行わず、依存関係をインストールせず、監査対象プロジェクトを変更しない。証拠のディスク保存前に構造化マスキングを実行(URLはorigin+パスプレースホルダー+クエリキー名のみ保持、#フラグメントは全体をマスク)。
  • 意図的に構築された負例テストフィクスチャ:横スクロール発生ページ、クリック不能ギャラリー、700msで消えるエラーバー、無効なダウンロード/空の共有リンクなどを用意し、「品質ゲートをいかに判定すべきか」を21件の動作ケースと24件のルートケースとしてコードに定着。
  • 最適な用途: 「UIがすでに稼働しており、実際に画面を確認する必要がある」チームに最適です。フロントエンドやデザインシステムのメンテナーによるマージ前のレンダリング検証、QAエンジニアによる「ビルドは通るが表示がおかしい」欠陥への機械的証拠の補強、Electron/ネイティブウィンドウ、印刷/PDF、ダウンロード/共有、地図、deck/スライドなどのブラウザ出力に対する実パス検証を必要とする場面に適しています。また、visual_layout_audit.mjsをCIゲート(ローカル開発サーバーまたはフィクスチャ+終了コード)として利用したり、silent_degradation_probeのfont/classモードをデザインシステムの回帰テストに組み込む用途にも適しています。特に日本語・中国語などのCJK改行境界や英中・英日混植のセマンティック分類において高い価値を発揮します。
    不向きな用途: 要件定義フェーズやゼロからの新規UI設計(descriptionでgreenfield UI designは対象外と明記)、スクリーンショットからのデザインシステム逆引き抽出(デザイン系skillの領域)、包括的なQAプログラムやリリースマネジメント体制の構築(qa-expertが担当)、非視覚的なコードデバッグ(Reactのhydrationエラー原因究明など)には適していません。また、完全なWCAG認証、主観的なデザイン美観の判定、GIS地図の操作性検証、リファレンス画像との主観的な整合性確認の代替にはなりません。Playwrightが導入されていないプロジェクトではLevel A/Bへのフォールバックが必要であり、同梱スクリプトは依存関係を自動インストールせずにスキップされます。
    Install Agent-Ready
    ① Verified Mirror 2026-09-15
    Option A · Direct DownloadDownload frontend-visual-qa.tar.gz
    sha256: 48ff3a56b28549a2…
    Option B · Copy Guide for Agent
    install.json
    Agent はこの JSON ガイドから自動的にダウンロードして検証します。
    ② Upstream GitHub
    GitHub Repo ↗
    Pinned to commit d5c4678cb5.