feat(chv): 阶段 4 截图三级管线——a11y 角色解析 + diff_shot 逐像素裁剪 + verify_shot 全屏校验

- snapshot 纯字符串解析 a11y 角色计数/interactive/字符数/hash
  (不跑 JS、不取原始 DOM,禁 op 保持拒绝);status 带计数器
  与 verify_share
- diff_shot:PNG 全帧 Pillow 逐像素比对(单通道阈值 10),
  无变化 changed:false size 0;有变化 bbox 外扩 8px、钳制视口、
  宽高下限 32px,再 clip 截 JPEG q70;Pillow 缺失如实报错并
  指引回落 screenshot 全帧;open 不清基线(跨页局部差分靠它)
- verify_shot:全帧 JPEG q70,只用于检查点
- build.sh 与 playwright 同批 pip 装 pillow(只加 pillow);
  buildinfo BASE_CONTENTS 登记 pillow(pip 名覆盖)
- 单测 cloud/tests/test_chv_opt_stage4.py:31 项(bbox 纯函数、
  a11y 解析、计数器、Pillow 缺失回落、禁 op、lockfile 往返)
This commit is contained in:
host committed 2026-11-08 09:45:00 +00:00
1 parent 5dc75128f8
commit f723eb8a88
4 files changed
+893 -6

No files matched your search

+4 -1
View File
@@ -373,8 +373,11 @@ else
echo "警告:cloud/chv/guest/vsock_notify.py 不在仓库里(P1 未合并),镜像暂不含 vsock notify" >&2
fi
if [ "${PLAYWRIGHT:-1}" = "1" ]; then
# 阶段 4:与 playwright 同批 pip 装 pillow(diff_shot 的逐像素
# 比对与 JPEG 编码用)。只加 pillow,不动其它包版本;BUILDINFO
# 的 pip freeze 会自然记录 pillow 版本,lockfile 按 pip 名覆盖。
VC_ARGS+=(
--run-command '(pip3 install --no-cache-dir --break-system-packages playwright || pip3 install --no-cache-dir playwright) && PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/ms-playwright python3 -m playwright install --with-deps chromium-headless-shell'
--run-command '(pip3 install --no-cache-dir --break-system-packages playwright pillow || pip3 install --no-cache-dir playwright pillow) && PLAYWRIGHT_BROWSERS_PATH=/usr/local/share/ms-playwright python3 -m playwright install --with-deps chromium-headless-shell'
--run-command 'dpkg-query -W -f "\${Package} \${Version}\n" > /app/guest-versions-dpkg.txt; pip3 freeze > /app/guest-versions-pip.txt || true'
--run-command 'ls /usr/local/share/ms-playwright/ > /app/guest-versions-chromium.txt 2>/dev/null || true')
fi