# axe-core 与 WAVE：成功、失败及结果分析

日期：2026-09-04。结果版本：`multi-agent-v3`。

本报告分析既有扫描和三 agent 复核结果，不新增扫描、不修改标签。这里的“成功”分别讨论引擎执行成功、候选发现价值和目标 failure 的证据支持，三者不能混为一谈。

## 1. 核心结论

1. **扫描执行成功**：31 个冻结生成站点首页 × 2 个工具，62/62 次正式扫描成功。它说明引擎完成执行并返回结果，不说明网站无障碍、联网渲染完整或任务可以成功完成。
2. **两种工具提供了不同的候选线索**：本批 axe 的目标范围内结果集中在主内容地标、区域覆盖、地标区分和标题层级；WAVE 的有用候选集中在重复链接、重复控件暴露及重复 accessible name。
3. **WAVE 的 48 条 FP 不能解读为“48 个确定 error 被证伪”**：它们来自纳入复核的 `alert` 类别。与 axe 的 `violations` 直接比较 TP/FP 数量，不能得出工具精度优劣。
4. **范围排除与去重是独立维度**：507 条纯视觉候选仍在目标范围之外，其中 222 条经共同修复关系复核改为 Duplicate。范围外 Duplicate 不进入研究范围内的 TP/FP 统计。
5. **当前结果不足以证明 dynamic / temporal failure 的检测能力或漏检率**：TP 是 agent 根据静态 DOM/AX、渲染及源码推断的导航相关影响；没有新增按键序列或 Orca 回放，也没有与 LTL 人工标注建立可靠的同缺陷对应。

来源：[正式扫描报告](../../report.md)、[执行与离线环境说明](../../REVIEW.md)、[v3 统计](summary.json)、[v3 复核报告](REPORT.md)。

## 2. 实验范围与方法

| 项目 | 本轮设置 |
|---|---|
| 被测对象 | 31 个冻结生成站点快照，不是对应真实在线网站的当前版本 |
| 页面状态 | 每站初始首页；没有系统遍历子路由或交互后状态 |
| 视口 | 1440 × 900 |
| 执行隔离 | 每个工具使用新的浏览器 context |
| axe-core | 4.12.1 |
| WAVE | 3.3.1.0，本地扩展引擎适配；不是官方托管 API |
| 网络 | 外部请求被阻止；15 个站点至少一次扫描出现被阻止的请求 |
| 复核证据 | 原始报告及截图、补采 DOM、computed style、Playwright AX snapshot、冻结源码 |
| 判定方法 | 三个同模型 agent 独立投票，至少 2/3 同意；保留理由和异议 |
| 人工确认 | 未作为人工金标准确认；没有新增参与者实测 |

主体页面均有内容，但部分站点出现图片缺失。WAVE 本地适配环境保留了侧栏扩展 API `onConnect` 不可用的日志；引擎成功事件和分类结果已返回。该环境差异应披露，不能据此假定与完整扩展 UI 的所有行为相同。[执行说明](../../REVIEW.md)

三个 agent 使用相同的去标签证据摘要。非视觉 253 条候选按 115 个呈现组提供上下文，允许逐 ID 例外；视觉类先作规则级范围判定。投票并不等于为每条候选独立重放三次浏览器，也不是三个独立人类评审者。

## 3. 判定口径

目标是 BLV 用户的键盘／屏幕阅读器交互 taxonomy，包括顺序导航、语义结构定位、命名、可达性及反馈／焦点／状态变化。纯视觉配色、字号等在本轮排除。

| 字段或标签 | 本轮含义 |
|---|---|
| TP / `correct` | 三 agent 多数认为现有证据支持具体的目标范围内导航或理解影响；未必是已回放确认的时序 failure |
| FP / `false-positive` | 在当前状态与所报机制下，没有成立的目标 failure；不等于整个网站可访问 |
| `excluded` | 范围外的保留代表项；排除本身不证明该 finding 是有效的一般无障碍问题 |
| `duplicate` | 与同工具、同站代表项属于同一具体缺陷／同一针对性修复；代表可以是 excluded |
| `unsure` | 多数判定仍未解决的候选；本轮展示数量为 0，但证据层面的不确定性仍存在 |
| `scope` | 独立标记 `in-scope` 或 `outside-target`，不会因展示为 Duplicate 而改变 |

本报告遵循用户后续显式修订：范围外候选不用 FP 表示；范围外重复项可以指向 excluded 代表。这优先于旧 handoff 的四标签格式及通用 skill 中未区分该 scope 的表述。原始人工／agent 标注和旧版结果保持不变。

语义地标不是纯视觉样式，因此当前复核仍保留它们。但**“与键盘／读屏导航相关”不等于“已证明是动态／时序 failure”**。若论文评价对象严格限定为必须通过动作前后状态才能成立的 L2/L3 failure，还需要额外的时序证据资格判定，不能直接把当前 TP 数用作该目标的 TP 数。

## 4. 原始结果与最终标注

### 4.1 原始报告类别

| 工具 | 原始类别 | 数量 | 如何处理 |
|---|---|---:|---|
| axe-core | violations 节点–规则命中 | 295 | 纳入复核 |
| axe-core | incomplete 节点 | 544 | 单独保留，不当作 violations 或 FP |
| WAVE | error | 0 | 不意味着不存在无障碍问题 |
| WAVE | contrast | 176 | 纳入后按纯视觉机制排除，随后在工具内部去重 |
| WAVE | alert | 289 | 纳入复核，其中 text_small 185 条属于范围外 |

合计复核 760 条原始候选。该单位不是网站数、规则类型数或已确认的独立缺陷数。axe 按站点累加的违规规则出现次数为 36，也不是 36 种不同规则。

### 4.2 最新互斥展示标签（v3）

| 工具 | TP | FP | Duplicate | Unsure | Excluded 代表 | 原始总数 |
|---|---:|---:|---:|---:|---:|---:|
| axe-core | 17 | 1 | 196 | 0 | 81 | 295 |
| WAVE | 20 | 48 | 193 | 0 | 204 | 465 |

这里的 Duplicate 包括范围内和范围外两部分。两工具之间未去重，因此不能把 17 + 20 宣称为全局 37 个不同的网站缺陷。

### 4.3 按研究范围拆分

| 工具 | 范围内原始候选 | 范围内 TP | 范围内 FP | 范围内 Duplicate | 范围外原始候选 | 范围外 Duplicate | 范围外保留代表 |
|---|---:|---:|---:|---:|---:|---:|---:|
| axe-core | 149 | 17 | 1 | 131 | 146 | 65 | 81 |
| WAVE | 104 | 20 | 48 | 36 | 361 | 157 | 204 |

计数关系：axe 范围外为 65 + 81 = 146；WAVE 范围外为 157 + 204 = 361。范围外总量始终为 507。

### 4.4 v2 → v3 的变化不是检测性能提升

| 工具 | v2 excluded 展示数 | v3 excluded 代表数 | 转为范围外 Duplicate | excluded 展示数相对减少 |
|---|---:|---:|---:|---:|
| axe-core | 146 | 81 | 65 | 44.5% |
| WAVE | 361 | 204 | 157 | 43.5% |
| 合计 | 507 | 285 | 222 | 43.8% |

这是同源修复去重带来的表示压缩，不是修复了网站，也不是提高了检测准确率。v3 的 52 项范围外关系通过三人多数复核；没有确认关系的记录保留为 excluded，并不表示已证明其余代表绝无重复。[关系及投票](excluded-duplicate-votes.json)

## 5. axe-core：成功之处与不足

### 5.1 有用的发现形式

| 形式 | 本批案例 | 当前证据与价值 |
|---|---|---|
| 缺少主内容地标 | CVS `ST0002`；Udemy `ST0500` | 页面包含大量主体内容，但地标结构没有 main，支持主内容定位能力缺失的结构性推断 |
| 重要内容不在地标覆盖中 | ESPN 比分 `ST0303`；Steam 商店导航 `ST0393`；Yahoo Finance 行情 `ST0628` | 定位出应进一步检查地标导航绕行的具体模块，而不只是报告配色问题 |
| 同类地标无法区分 | Reddit `ST0453` | 两个用途不同的 aside 缺少区分名称，支持地标列表方向感不足的推断 |
| 标题层级线索 | ESPN `ST0302` | AX 中主 h1 后出现报道 h3；现标为 TP，但影响判断依赖对分组／导航语境的解释，仍应验证实际后果 |

CVS 与 Udemy 的大量 region 命中并不代表每个文本节点都有一个独立缺陷：同一主体容器修复分别覆盖多个后代，已在范围内去重。这个例子说明原始节点命中数容易放大同一结构问题。

### 5.2 FP 与证据薄弱点

当前唯一保留 FP 是 CVS `ST0004`：目标只是工具条中的分隔符 `|`。为该符号增加地标覆盖，并没有恢复有意义的内容或导航功能，因此这条 region 报告没有成立的用户后果。

同时，**较少 FP 不足以证明 axe 更准确**。其纳入集是 violations，且本批范围内候选高度集中于相近的结构规则；缺少一般内容访问路径的任务级验证。已有标题导航、页面阅读顺序或其他定位入口，是否足以避免额外负担，不能仅凭“节点不在 landmark 内”作最终结论。

尤其对短工具条、首页引题、标题跳级等候选，三人一致的结构性推断仍不等于用户已观察到困惑。这是现有 TP 应优先验证的部分，而不是本报告擅自修改标签的理由。

## 6. WAVE：成功之处与 FP 的主要来源

### 6.1 有用的发现形式

| Failure 形式 | 本批案例 | 证据支持的交互影响 |
|---|---|---|
| 同一卡片多次暴露同一目的地 | Amazon `ST0083`；Macy's `ST0101`；IMDb `ST0373`；Udemy `ST0595` | 图片、标题或详情分别成为到同一对象的链接，AX 确认多次暴露，支持顺序导航增加停靠的推断 |
| 响应式控件副本同时暴露 | Udemy `ST0594` | AX 确认两个同名购物车链接，而不是仅在 DOM 中存在隐藏副本 |
| 单个链接名称重复完整内容 | Allrecipes `ST0663` | 图片 alt 与链接内标题重复菜名，AX accessible name 中完整名称出现两次 |
| 标题结构线索 | ESPN `ST0334` | 与 axe 对应的 h3 层级候选；现有 TP 属于结构影响推断，而非时序回放结论 |

这些候选的价值在于定位值得检查的 DOM/AX 结构。要确认真实键盘停靠次数或 Orca 朗读负担，还需相应交互证据；AX snapshot 不等于完整的焦点轨迹或实际语音输出。

### 6.2 为什么有 48 条 FP

这 48 条全部来自 alert，而不是 WAVE error 类别。

| 规则 | FP 数量 | 常见原因 |
|---|---:|---|
| `link_redundant` | 26 | 相同 URL 不等于相同语义停靠；不同导航语境可能有合理用途；部分目标在当前状态没有暴露 |
| `label_orphaned` | 19 | 包裹式 label 或 aria-label 已提供可用名称，AX 也能确认，未成立所推断的命名失败 |
| `heading_possible` | 2 | 价格或引题并非需要独立导航的章节，所在内容已有语义标题 |
| `fieldset_missing` | 1 | 当前订票单选项名称及原生分组清晰，缺少 fieldset 本身未建立理解困难 |
| 合计 | 48 | 这是目标 failure 判据下的复核结果，不是对所有 WAVE alerts 的误报率估计 |

代表性例子：

- **不同语境的同 URL**：Enterprise 的品牌首页链接与导航中的 Rent；SoundCloud 的品牌链接与 Home；Mayo Clinic 在页头、hero 和服务选择区的 Find a doctor。不能仅凭地址一致，认定这些入口都增加无意义的重复。
- **不同内容的同 URL**：IMDb 页脚不同名称、Steam 不同游戏行、Yahoo 不同新闻行。当前针对 link_redundant 的 FP 只是否定“这些是同一语义目标的重复停靠”这一推断；它不证明共用目的路由一定正确，目的内容匹配仍是另一项未验证问题。
- **隐藏链接**：Yelp `ST0207`、`ST0209`、`ST0211` 的 DOM 记录为不可见、全零布局，完整 AX 中也无 View details；不能把源码中存在链接等同于当前多出一个读屏／键盘停靠。
- **名称已存在**：Cargurus 的 Make、Uniqlo 的商品专属 Size/Quantity、AA 的 Adults/Children/Cabin、Enterprise 的时间／年龄等选择框，在 AX 中有明确名称。
- **非标题文本**：Apple 的 Just $99 位于现有 h2 下；Petfinder 的 Pet care essentials 后紧跟描述性 h2。

这些例子解释了为什么“alert → 目标 failure”需要额外复核，也解释了为什么不能简单删除所有 alert：同一候选池中也包含实际重复名称和重复入口的有用线索。

## 7. 范围外发现与工具／环境误判要分开

范围外的 507 条来自 axe color-contrast 146、WAVE contrast 176、WAVE text_small 185。排除是研究目标选择，不是对视觉障碍用户影响的否定。

已有证据中的区别包括：

- Airbnb `ST0232` 的 Explore tiny homes 白字白底按钮，是值得关注的一般视觉无障碍问题线索，但纯视觉对比度机制不属于本轮目标范围。
- Redfin 白字下有独立深色遮罩，IMDb 排名有可见描边；此前复核指出直接使用报告中的简单颜色比可能没有代表实际外观。这类记录不能仅因为 excluded，就改称已确认 valid accessibility issue。
- 缺失外部图片或离线渲染可能改变视觉背景，因此不能把本批配色结果外推为真实在线网站的结果。

范围外去重仍要求具体共同修复。例如 Udemy 的课程原价共享 `.price del` 配色；同站金色与紫色 badge 虽配色不同，却共享 `.course-badge, .soft-badge` 的字号声明，故对于 text_small 可以属于同一次字号修复。跨工具遇到同一组件，仍分别计数。

## 8. 结果解释：观察、原因与研究含义

### 8.1 大量命中来自可复用组件，而不是同等数量的独立缺陷

- **观察**：axe 有 131 条范围内 Duplicate；WAVE 有 36 条。另有 222 条范围外 Duplicate。
- **解释**：主体容器、卡片构造器和局部样式会在多个节点实例上重复产生报告。
- **含义**：同时报告原始候选、代表项及同修复关系，不能只比较 raw finding 总数。
- **验证方向**：对代表组件作一次针对性修复后重扫，检查其成员是否共同消失。目前这些共同修复关系尚未经过修复后回归实验。

### 8.2 两种工具在本数据上的候选构成不同

- **观察**：axe 的范围内池为 149 条，WAVE 为 104 条；分别保留 17 和 20 个 TP 代表。
- **解释**：纳入类别和规则覆盖不同，axe 的结构候选与 WAVE 的链接／名称提示不能作为同质样本直接比较。
- **含义**：可以说明本批发现形式不同；不能据“20 大于 17”宣称 WAVE 更强，也不能据“48 大于 1”宣称 WAVE 更差。
- **验证方向**：统一页面状态、目标 taxonomy、候选类别及同缺陷匹配后，再比较共同任务上的表现。当前不存在适合计算算法相对性能提升的统一指标或基线。

### 8.3 投票解决了展示标签，但没有消除经验不确定性

- **观察**：v2 的 760 条基础票中 757 条一致，非视觉 253 条中 250 条一致；多数结果 Unsure 为 0。v3 不改变这些基础票。
- **解释**：同模型、同政策和相同分组证据容易形成一致判断；一致性不等于独立验证。
- **含义**：不能报告“零不确定性”或“人工验证准确率”。本批是全候选的 agent 分组复核，而非随机独立人类标注研究。
- **验证方向**：优先人工／Orca 检查结构推断较强但实际用户后果尚弱的 TP，并保留原始少数意见。[异议记录](../multi-agent-v2/disagreements.json)

## 9. Dynamic / temporal failure：当前不能支持的结论

本次没有采集动作前后焦点、反馈、展开状态和恢复行为的完整序列。因此，对于以下模式，当前数据既不能给出已确认检出量，也不能给出漏检量：

- 激活按钮后缺少可感知反馈；
- 页面或视图切换后焦点滞留、方向感丢失；
- disclosure 展开／收起状态与可访问状态不同步；
- 模态框或复合控件中的键盘陷阱与焦点恢复失败；
- 异步结果延迟导致用户无法确认操作结果。

**没有这类证据，不等于证明本批所有实例都被 static checker 漏检。** 必须先建立确认存在的目标 failure 集，再在相同状态上检查工具输出。

两个历史 S2/FD1 JSON 各含同一套 1502 条案例；其中 184 个案例位于首页路由，但现有精确名称匹配未建立静态候选到历史同缺陷的可靠链接。0 个匹配不等于 0 个真实重叠。没有据此继承历史标签，也没有逐条回读大体积 runtime trace 来建立 TP/FN 对照。[历史材料使用记录](../historical-review-use.json)

本报告不计算 precision、recall 或 F1：缺少与目标时序 failure 对齐的独立 ground truth，候选类别不一致，且分组／代表层面的复核比例不能直接作为全体检测精度。尤其不能把所有 Duplicate 当成 TP，或把所有范围外报告当成 FP。

## 10. 可用于论文的保守结果表述

> 在 31 个冻结生成站点的初始首页上，axe-core 与本地 WAVE 引擎分别完成 31 次扫描，产生 295 条 violations 节点–规则候选，以及 176 条 contrast 和 289 条 alert 候选。按照 BLV 键盘／屏幕阅读器导航范围进行三 agent 证据复核后，分别保留 17 和 20 个范围内 TP 代表；范围外报告单独记录，并按工具内部共同修复关系去重。这些结果刻画了静态报告中的导航相关线索与复核负担，而不是动态／时序 failure 检测能力的已验证估计。

这里的 TP 必须在论文中定义为 agent-adjudicated navigation-related candidates。如果主实验要求 interaction-confirmed temporal failures，应先补充交互验证，而不是直接沿用该名称和数字。

## 11. 建议的下一步（未执行）

1. **验证代表案例的真实后果**：选择两工具保留的 TP 代表，使用明确的导航／操作任务采集焦点、AX、Orca 语音和动作前后状态；优先验证地标覆盖、标题跳级和重复入口的影响边界。
2. **统一比较状态和候选政策**：在同一个任务状态检查 axe 与 WAVE，并明确 WAVE error、contrast、alert 以及 axe incomplete 的纳入方式，避免不对称候选池。
3. **建立 LTL—static 同缺陷对应**：使用网站、路由、目标元素、动作前后状态及共同修复定位，而不是只比 errorId、控件名称或 URL。随后才能讨论 FN、召回率及互补覆盖。

这些是后续验证建议，不表示本轮已经重放、修复或修改任何网站。

## 12. 数据与文件索引

本报告所在 scratch 目录：

`/scratch/general/vast/u6076945/generator-runs/static-a11y-selected31-20260904-r1/blv-review/multi-agent-v3/`

HOME 备份目录：

`/uufs/chpc.utah.edu/common/home/u6076945/static-a11y-selected31/results/static-a11y-selected31-20260904-r1/blv-review/multi-agent-v3/`

- [axe 完整标注](axe-reviewed.json) / [CSV](axe-reviewed.csv)
- [WAVE 完整标注](wave-reviewed.json) / [CSV](wave-reviewed.csv)
- [最新计数与检查](summary.json)
- [全部 axe 范围外记录，含重复项](axe-outside-target.json)
- [全部 WAVE 范围外记录，含重复项](wave-outside-target.json)
- [范围外共同修复证据及三票](excluded-duplicate-votes.json)
- [范围内共同修复证据及三票](../multi-agent-v2/duplicate-votes.json)
- [初始独立票 A](../multi-agent-v2/reviewer-a.json)、[B](../multi-agent-v2/reviewer-b.json)、[C](../multi-agent-v2/reviewer-c.json)
- [原始扫描逐站结果](../../summary.csv)、[执行条件及环境限制](../../REVIEW.md)

逐条记录中的 `evidenceRef` 指向原始 `candidate-evidence.json` 的同 errorId 证据；`canonicalId` 指向同工具代表。分析研究范围时使用 `scope=in-scope`，不要使用 `decision!=excluded`。

本报告依据已有检查结果：760 个原 ID 均保留；范围外原始总量 507 不变；范围内标签及原始三票不变；无跨工具／scope 重复、无重复链。没有因撰写分析而重新标注或覆盖已有 JSON/CSV。
