合规测试(compliance-testing)是一套面向质量保障(QA)的合规验证技能,主要用途是检验产品在隐私、同意管理与广告体验方面的监管合规实现。它强调“合规是二元的”,不存在“基本合规”:同意前即触发 Cookie 或脚本即违规,无法在拒绝同意的情况下关闭的横幅同样违规。
【发现阶段】技能首先要求检查项目根目录下的 .agents/qa-project-context.md,其中记录适用法规、CMP 细节、广告网络与地理范围;已覆盖的问题不再重复询问,缺失时建议使用 qa-project-context 技能创建。需要确认的要素包括:适用法规(EU 的 GDPR、ePrivacy、DSA、EU AI Act;US 的 CCPA/CPRA 及约 20 个州法;UK 的 UK GDPR/DPA、PECR、OSA、DUAA;以及 LGPD、PIPEDA、POPIA 等)、处理的合法性基础(同意/正当利益/合同必需)、是否有 DPO 或法务团队(技能只验证技术实现,不定义法律要求)、使用的 CMP(OneTrust、Cookiebot、Didomi、Usercentrics、Iubenda、Sourcepoint、Axeptio 或自研)、同意类别(严格必要、分析/性能、功能/偏好、营销/定向)、同意如何传递给第三方脚本(IAB TCF v2 的 __tcfapi、自定义数据层或 CMP API)、广告网络与格式,以及是否存在无障碍合规义务(实际测试在 accessibility-testing 技能中编写)。
【核心原则】合规判定是二元的;自动化技术检查、把法律审计排期化;重点测试“无交互”“拒绝”“撤回”等不愉快的同意状态,因为违规多藏于此;验证行为而非信任 CMP 界面(CMP 也有 bug);采用配置驱动的多层防御,由类型化清单与追踪域列表驱动测试,方便随法规变化更新。
【GDPR / CMP 测试】使用 Playwright,将同意流程拆分为可独立失败的检查:横幅与暗黑模式(首次访问出现、接受与拒绝同等显著、存在隐私政策链接);同意前后的 Cookie 状态(同意前无非必要 Cookie、接受后才有分析 Cookie、拒绝后无任何非必要项);同意持久化与撤回;第三方脚本拦截(google-analytics.com、googletagmanager.com、facebook.net、analytics.tiktok.com、bat.bing.com 等同意前不得加载),这是最关键检查,用 page.on('request') 监控;Global Privacy Control(Sec-GPC: 1,断言 navigator.globalPrivacyControl === true 且无营销 Cookie,不要断言不存在的 window.__cmp.gpcStatus);TCF v2 同意状态(window.__tcfapi('getTCData', 2, cb),并可通过 tcfPolicyVersion 做 v2.3 时效校验);Google Consent Mode v2(EEA/UK 自 2024 年 3 月起要求,默认状态应对 ad_storage、analytics_storage、ad_user_data、ad_personalization 全部 denied,接受后触发 update 为 granted)。完整可运行代码见 references/gdpr-cmp-tests.md。
【EU AI Act 合规】法案分阶段适用,且 2026 年时间线有变动:Digital Omnibus(2025 年 11 月提案、2026 年 5 月 7 日临时协议)推迟了高风险义务,不要按旧的 2026 年 8 月 2 日高风险日期测试。禁止性做法+AI 素养自 2025 年 2 月 2 日生效(不得有 Article 5 禁止做法,记录范围内 AI 功能,拦截被禁库);GPAI 义务与处罚自 2025 年 8 月 2 日生效(模型卡、训练数据摘要、版权政策与披露页面存在);Article 50 透明度自 2026 年 8 月 2 日(AI 生成内容标记、深度伪造披露、告知用户正在与 AI 交互);机器可读标记宽限期至 2026 年 12 月 2 日;高风险(Annex III)延至 2027 年 12 月 2 日;高风险(Annex I)延至 2028 年 8 月 2 日。建议现在编写 Article 50 披露测试,推迟高风险 UI 测试。LLM 专项评估(幻觉、越狱、提示注入)应使用 ai-system-testing 技能。详见 references/eu-ai-act-tests.md。
【Better Ads 标准】列出触发浏览器级广告过滤的格式:弹窗广告、带声自动播放视频、前置倒计时广告、超过 30% 视口的大尺寸粘性广告(桌面与移动均适用)、移动端广告密度超过 30%、移动端闪烁动画广告。静音视频检查必须读取实时 DOM 属性 el.muted,而非 getAttribute('muted')。注意 CBA 于 2025 年 1 月 14 日新增两类桌面与两类移动广告体验,Chrome 最早于 2026 年 5 月 14 日开始评估。详见 references/better-ads-tests.md。
【Cookie 合规】维护类型化 Cookie 清单作为事实来源,并从三个维度断言实际 Cookie 与清单一致:清单(CookieDefinition[] 记录名称、类别、用途、最大过期时间及必须携带的 Secure/HttpOnly/SameSite 属性);属性校验(观察到的每个 Cookie 需匹配定义标志且不超过声明的最大过期时间,比较前将未设置的 SameSite 归一化为 None);漂移检测(出现清单外 Cookie 时抛错而非警告,强制清单随脚本更新)。详见 references/cookie-compliance.md。
【无障碍合规】仅给出法律地图,实际测试(axe-core、键盘、屏幕阅读器)在 accessibility-testing 技能中编写。涉及 EU 的 EAA(EN 301 549 / WCAG 2.1 AA,2025 年 6 月 28 日适用)、USA 的 ADA(WCAG 2.1 AA 判例)、Section 508(WCAG 2.0 AA)、加拿大安大略 AODA(WCAG 2.0 AA)、英国 Equality Act 2010(WCAG 2.1 AA 指引)。
【定时合规审计】建议每周运行(而非仅在 PR 时),以捕获配置漂移,并将结果作为长期 CI 产物留存以供审计追溯;定时 GitHub Actions 工作流与 90 天产物保留见 references/ci-automation.md。
【反模式】包括:只在“全部接受”状态测试;断言虚构的 CMP 全局变量;仅做属性级视频检查;硬编码且会漂移的 Cookie 清单;只测试 CMP 界面;仅手工季度审计;忽视地区差异(GDPR 需 opt-in,CCPA 允许经 GPC 退出);把合规当成一次性工作。
【验证方式】先用最小检查确认套件可运行并生效:npx playwright test --project=chromium --grep @compliance,正确的运行应让“同意前无非必要 Cookie”和“同意前不加载追踪脚本”成为门禁项并通过(使用全新上下文 storageState: undefined)。为证明套件确实能捕获违规,可临时指向一个同意前加载 GA 的页面,脚本拦截测试必须变红;对已知坏页面仍保持绿色的套件等于没有断言。随后确认设置 Sec-GPC: 1 后 GPC 测试能看到 navigator.globalPrivacyControl === true,且 Consent Mode 默认状态测试对四个信号均报告 denied。
【完成标准】适用法规已识别并记录于 .agents/qa-project-context.md;每个入口点的同意流程均有独立通过的测试(首次访问、接受、拒绝、撤回、跨导航持久化);GPC 被遵守;Google Consent Mode v2 已验证;EU AI Act 适用性已评估;Cookie 审计完成且漂移检测零未知 Cookie;无隐私政策未披露的追踪域或 Cookie 触发;合规套件在每周 CI 中绿色通过且结果作为产物保留 90 天。
【相关技能】accessibility-testing(编写实际无障碍测试)、security-testing(安全合规互补)、ai-system-testing(AI 功能评估层)、ci-cd-integration(流水线配置)、release-readiness(失败的合规门禁是发布阻断项)。
【参考文件】references/ 下包含:gdpr-cmp-tests.md、eu-ai-act-tests.md、better-ads-tests.md、cookie-compliance.md、ci-automation.md。