---
description: 5e6 历史可访问性静态表面、current-main successor 与尚未闭合的运行验证矩阵
status: request_changes
updated: 2026-08-28
sources:
  - repo://ailoha-agent-iOS@5e6ac6e41c53780c85808c92290d2bd38f809123
  - repo://ailoha-agent-iOS@6922f359ad08da70242e4ec0c5c4a1486bc2908d
  - brain://reports/ios-frontend-refactor-map/current-main-recursive-architecture-2026-08-28.md
  - brain://reports/ios-frontend-refactor-map/current-main-accessibility-runtime-baseline-2026-08-28.md
  - brain://reports/ios-frontend-refactor-map/completion-and-revision-audit-2026-08-27.md
confidence: medium-high
sensitivity: internal
---

# 可访问性表面图（历史扫描 + current-main successor）

## 2026-08-28 登录入口运行 successor

current main 的未登录入口已经不再是纯静态推断，完整证据、最小改法与 8 图 3 视频验收合同见 [登录入口可访问性运行基线](current-main-accessibility-runtime-baseline-2026-08-28.md)。

- `fact / positive`：Debug Simulator 运行语义树能发现 Google、Apple 与 Legal agreement 三个真实产品动作；checkbox 同时给出 `Not agreed` value。标准 `Button` 和显式 label/value 在这一屏有效。
- `fact / Dynamic Type`：`large` 与 `accessibility-extra-extra-extra-large` 都是 40 个元素、6 个目标、0 个滚动区域，画面没有形成应有的字号/布局变化；`AilohaTypography` 用 `.custom(... fixedSize:)` 解释了该行为。
- `fact / Reduce Motion`：偏好开启后，一秒间隔两帧仍有 2,342 个像素超过阈值的变化，主要落在视频上半区；`LoopingVideoPlayerView` 又无条件 `play()` 和循环重播。登录背景未尊重 Reduce Motion 已形成代码 + 运行闭环。
- `fact / semantic noise`：Debug 语义树还出现 `快捷登录`、`Local` 和一个空白 button target；这不能外推成 Release 缺陷，必须用 Release snapshot 复核。
- `unknown`：这不是 spoken VoiceOver 走查；协议链接顺序、alert 焦点、loading/失败 announcement，以及账号内 Home/Chat/Contact/Calendar 仍未运行验证。

## 2026-08-28 current-main 修正

- `fact`：下文 `441` 个文件、`Reduce Motion 0/0` 和 Chat V1/V2 是 `5e6ac6e` 的历史词法扫描，不是 current-main 统计。
- `fact / main@6922f359`：Chat 已 V2-only；不再存在 V1/V2 可访问性 parity 问题，当前问题是 V2 长对话顺序、新消息 announcement、输入焦点与动态字号本身是否通过。
- `fact / main@6922f359`：源码出现 2 处 Reduce Motion 读取，但 active Onboarding 的循环视频与定时 / spring 动效仍没有统一 motion policy。
- `fact`：登录页已有 AXXXL 截图、Reduce Motion 对比帧和运行语义树；全局 VoiceOver 核心旅程、账号内 AX5 矩阵和真机对比录屏仍缺。因此 current main 是 **GAPS / login runtime partially verified**，不是“可访问性已通过”，也不是“所有失败都已证实”。

current-main 总体边界见 [完成度与 Revision 审计](completion-and-revision-audit-2026-08-27.md)。下文保留历史计数，供定位系统性风险，不把数字升级为当前覆盖率。

## 审计结论

当前状态记为 **GAPS（登录运行局部闭合）**：标准 SwiftUI 控件在登录页提供了可验证的语义基础；品牌排版忽略最大 Dynamic Type、登录背景视频忽略 Reduce Motion 已由 current-main 代码和 Simulator 共同证实；Calendar 核心拖拽缺少替代 action 仍是代码事实、运行未知。没有 Simulator/真机 spoken VoiceOver 全旅程，因此不声称所有页面不可用，也不声称一定触发 App Store 拒绝。

## `main@6922f359` 聚焦扫描

范围是 716 个 production Swift 文件，排除 Tests、Previews 与 vendor。以下是高召回词法信号，不是控件数或覆盖率：`Button` 1003/147 files、`onTapGesture` 47/38、`DragGesture` 14/9、accessibility modifiers 128/52、SwiftUI 固定 system font 197/57、custom font 32/13、`@ScaledMetric` 0/0、Reduce Motion reads 5/3、动画调用 167 hits。机器明细位于 [runtime audit JSON](evidence/current-main-accessibility-runtime-2026-08-28/accessibility-runtime-audit.json)。

Apple 提供的实现基线包括 [Reduce Motion environment value](https://developer.apple.com/documentation/swiftui/environmentvalues/accessibilityreducemotion) 与 [SwiftUI EnvironmentValues](https://developer.apple.com/documentation/SwiftUI/EnvironmentValues)。本报告以源码证据定位改造面，最终合规需要运行验证。

## `5e6` 历史范围与计数

范围：`Ailoha`、`AilohaShared`、`AilohaWidget`、`AilohaNotificationContent`、`AilohaDesignSystem`、`AilohaShareKit`、`OnboardingKit`；排除 Tests、Previews、Generated、DerivedData、`.build`。共 441 个 Swift 文件。计数是词法信号，不等价于控件数或失败率。

| 信号 | 命中 / 文件 | 解释 |
|---|---:|---|
| 标准 SwiftUI control 词法命中 | 504 / 119 | Button、Toggle、TextField、Picker、NavigationLink 等；其文本常提供隐式 label |
| gesture modifiers | 65 / 42 | tap、long press、gesture、simultaneous/high priority；需逐个确认替代语义 |
| UIKit controls | 6 / 2 | 包含通知扩展与 UIKit 表面 |
| SF Symbols / custom asset Image | 134 / 40；15 / 1 | custom asset 命中集中在 Live Activity；不自动等于缺 label |
| accessibility modifiers | 111 / 46 | label/hint/value/action/element 等总命中；不能除以 control 得“覆盖率” |
| SwiftUI / UIKit 固定字号 | 236 / 65；3 / 1 | 与固定 frame 组合时是 Dynamic Type 风险 |
| `@ScaledMetric` / `scaledValue` | 0 / 0 | 未形成可缩放自定义度量策略 |
| 固定 width/height frame | 679 / 131 | 需要在 AX5 与窄屏验证裁切，不逐条视为问题 |
| 动画信号 / Reduce Motion | 151 / 57；0 / 0 | 横切策略缺位 |
| differentiateWithoutColor | 0 / 0 | 选中/完成/错误态需人工验证是否只靠颜色 |
| accessibilityAction | 1 / 1 | 与 Calendar 等复杂 gesture surface 不匹配 |
| modal surfaces | 73 / 42 | 需验证焦点进入、退出与 dismiss 语义 |

## 关键用户路径

| Surface | 已有基础 | 代码风险 | 运行验证 |
|---|---|---|---|
| Login / Onboarding | 登录三个核心动作已被运行语义树发现；流程 reducer 清晰 | 品牌固定字号；登录视频在 Reduce Motion 下仍循环；Debug 有语义噪音 | 8 图 3 视频合同；Release VoiceOver 完整完成；后续 route 的 AX1–AX5、中英、键盘遮挡 |
| Home / Bottom navigation | 主入口结构稳定 | 部分 segment/row 使用 Text + `onTapGesture`，可能没有 button trait/selected trait | swipe/activate、selected announcement、刷新后焦点保持 |
| Task Chat V2（current main） | UIKit cell 可定义 semantics；文本内容丰富；旧 renderer/flag 已删除 | InputPanel 仍有大量固定 frame/font；长对话的焦点、announcement 和滚动语义未运行验证 | 长对话 VoiceOver 顺序、新消息 announcement、输入焦点、AX5；另做旧 renderer consumer=0 静态 guard |
| Contact list/detail/edit | 标准 fields/buttons 提供基础 | 大 VM 更新可能重置焦点；自定义 tab/编辑器需要 selected/value 语义 | 编辑、错误、保存、删除确认、Dynamic Type clipping |
| Calendar | 文本与按钮入口存在 | 移动/resize 依赖 LongPress+Drag；缺 action/替代表单；密集固定布局 | VoiceOver 创建/移动/改时长、Rotor、AX5 day/month layout |
| Screenshot / Live Activity / Widget | 系统 surface 自带部分容器语义 | 1682 行多状态卡片；custom asset 无显式 modifier；短空间放大字号/截断问题 | Widget 三尺寸、Live Activity expanded/compact/minimal、按钮 label/action |
| Settings / Theme | 标准 controls 较多 | theme 设置与实际强制 dark 不一致；disabled/selected 不能只靠色 | Increase Contrast、Differentiate Without Color、system/light/dark 产品决策 |

## 三个必须先修的合同

### 1. Typography contract

当前 `AilohaTypography.ailohaLora/Manrope` 最终调用 `.custom(... fixedSize:)`。目标应为相对 text style（或等价可缩放注册），并让行高、容器和图标跟随缩放，而非只放大 font。

验收：AX1、AX3、AX5；iPhone 最窄支持尺寸；中文、英文、长名称；不截断关键 CTA、不隐藏错误、不使可滚动区域失去焦点。

### 2. Semantic interaction contract

- 能用 Button/Toggle/Picker 表达的交互，不用裸 tap gesture。
- Calendar move/resize 提供 `accessibilityAction`（如“向后移动 15 分钟”“延长 15 分钟”）和表单替代路径。
- selected、disabled、processing、completed 通过 trait/value/announcement 表达，不只改变 accent。

### 3. Motion contract

- 所有自动循环视频、粒子、呼吸、spring 和定时 sequence 读取 `accessibilityReduceMotion`。
- Reduce Motion 下保留信息和完成能力：静态海报、短 crossfade 或直接切换。
- App 与 Widget/Live Activity 分别验证，因为系统 surface 生命周期不同。

## 验证矩阵

| Gate | 场景 | 通过条件 | 证据 |
|---|---|---|---|
| Login runtime | Large / AXXXL；Reduce Motion on/off；Release semantics | 最大字号真实扩展；开启减弱动态时背景静止；Release 无空 label/Debug action | 8 张状态截图 + 3 段未剪视频 + semantic transcript |
| VoiceOver smoke | Onboarding→Home→Task→Contact→Calendar→Settings | 每个核心动作可发现、可执行、结果可感知 | Simulator/真机录屏 + issue ledger |
| Dynamic Type | AX1 / AX3 / AX5，中英，窄屏 | 无关键文本/CTA 裁切；滚动与焦点可达 | 截图矩阵 |
| Reduce Motion | 开启后完成 Onboarding/Task/Calendar | 无不可停止自动循环；流程信息不丢失 | 对比录屏 |
| Gesture alternatives | Calendar move/resize、Home segment | 不依赖视觉触控手势即可完成 | VoiceOver action transcript |
| Cross-target | App、Widget、Live Activity、Notification Content | label/value/action 与状态一致 | 每 target 快照/走查 |
| Regression | semantic component tests | Button role、label、value、disabled、selected 合同稳定 | hosted/UI tests |

## 优先实施顺序

1. 先修 DesignSystem typography adapter，并用截图矩阵发现下游布局问题。
2. 把 Calendar 核心 gesture 补 action/替代编辑；把 Home segment 改语义控件。
3. 建 motion policy，覆盖 Onboarding 视频和 Try It 动画。
4. 以 Chat V2、Live Activity、Contact editor 做跨 target/复杂 surface 专项。
