# Changelog 所有显著改动按 [SemVer](https://semver.org/) 记录于此。格式基于 [Keep a Changelog](https://keepachangelog.com/zh-CN/1.1.0/)。 ## [Unreleased] ## [1.3.3] - 2026-09-11 ### Added — 中英双语(i18n) - `site/i18n.js`:330 条文案字典,顶栏新增 `中 / EN` 切换器,偏好存 `localStorage['aa-lang']`,`` 与 `document.title` 同步。 - **设计取舍**:以「中文源串」作字典键而非抽象 key。中文是规范原文语言(组件1~10.txt)也是 app.js 现有字面量;源串作键意味着未收录文案自动回退原文,不会出现空白或 key 泄漏。 - 覆盖范围:导航 / 侧栏 / 首页 Hero 与设计原则 / 总览 / 快速开始 / 设计规范(含令牌导出区)/ For Agents 全表 / 更新日志 / 组件详情页(何时使用、API 三表、无障碍键盘表、Do&Don't、设计契约、实现资源、相关组件)/ Playground / 主题面板 / 搜索弹窗 / FAB 提示。 - 语言感知的显示逻辑: - 组件名主次调换(中文模式主显中文名,英文模式主显英文名),详情页大标题不再重复; - 侧栏分类名走 `CAT_EN`,不占字典; - 动态生成的键盘表、插槽说明按语言重算。 ### Fixed — 回归时序(根治偶发) - **DensitySwitcher 对比度偶发失败**:断言在演示页内联脚本执行完之前就跑了,读到 `is-active` 尚未应用的中间态(白字未落到品牌蓝底 → 2.51:1)。单页打开时通过、并发收集器里偶发失败。 - 根因是固定帧数等待(`load` + 双 `requestAnimationFrame`)在多个 iframe 抢主线程时不够稳。改为**就绪轮询**:`readyState === 'complete'` 且 DOM 连续 3 次采样(约 48ms)无变化才断言,另设约 4.8s 超时兜底避免卡死。 - 验证:**四次连跑全部 100%**(961 断言 / 0 失败 / 79 页全通过),偶发不再复现。 ### Fixed — i18n 接入过程中的三个真实缺陷 - **TDZ 顺序**:`KIND_KEYS` 等模块级常量在 `I18N`/`T` 定义之前调用了 `T()`,抛 `Cannot read properties of undefined (reading 'T')`。已改为存中文源串、渲染时求值(模块级预先求值还会导致语言切换后不更新)。 - **局部变量遮蔽**:`renderDesign` 内原有 `var T = data.tokens;` 遮蔽了全局翻译函数,导致设计规范页整个渲染失败。改名 `TOKENS`。 - **模板拼接括号**:`el()` 调用在包装 `T()` 后少一个右括号,已修正。 ### Changed - 回归基线:961 断言 / 925 通过 / **100%** / 79 页全通过 / N/A 36,四次连跑一致。 ## [1.3.2] - 2026-09-11 ### Added — 契约第三批:全量契约化 79/79 - 补齐剩余 **43 份**组件契约,`components/` 目录现为 79 份契约 JSON(此前 36)。 - 分两批提炼,全部逐字来自规格原文(组件1/2/5/6/7.txt): - **批次 A(19)**:tag / tabs / steps / breadcrumb / dropdown / popconfirm / buttongroup / expandabletable / mergedcelltable / summaryrowtable / fixedcolumntable / enhancedtabnav / sidemenu / topmenu / mixednavigation / quicknav / anchornav / backtotop / pagetransition - **批次 B(24)**:bankcardinput / idcardinput / plateinput / listpicker / rangequickpicker / dragupload / signaturepad / messagepro / notificationpro / progressvariants / skeletonpro / emptypro / loadingoverlay / resultvariants / exceptionvariants / confirmmodal / alertmodal / formmodal / fullscreenmodal / themeswitcher / layoutswitcher / densityswitcher / shortcutpanel / bottomsheet - 每份含 `variantDimensions` / `representativeVariants` / `anatomy` / `structurePatterns` / `usageHints` / `doNotInvent` / `unknowns` 七字段,与既有 36 份同 schema。 - **硬规则**:只从规格提炼,不发明;规格未明示者进 `unknowns`,规格明确排除者进 `doNotInvent`。校验脚本确认 79/79 字段完整、slug 一致。 ### Added — 令牌导出(文档清单中的 C4 项) - `build-site.ps1` 构建期生成三种标准格式,与站点展示的令牌始终同源: - `site/tokens/tokens.css` — CSS 自定义属性,可直接 `@import` - `site/tokens/dtcg.json` — W3C Design Tokens 社区组格式(`$value` / `$type` / `$description`,按 color/typography/spacing/radius/shadow/motion/size 分组) - `site/tokens/figma.json` — Figma Tokens(Tokens Studio 插件可直接导入) - 设计规范页新增「令牌导出」区,三个文件提供下载入口。 ### Changed — 规格原文与实现对齐 - 同步规格中的色彩系统到 v1.3.1 的 AA 达标值(15 处):占位文字 / 次要文字 / 五种语义色,并在原值处标注变更原因与对比度实测。 - 修正一处既有漂移:Rate 选中星色规格为 `#FAAD14`(白底 1.90:1,不满足 WCAG 1.4.11 的 3:1),实现取 `#2F54EB`,规格已对齐实现并注明原因。 ### Fixed - `build-site.ps1` 令牌导出段的两处 PowerShell 问题:`$themes` / `$schema` 被当作变量展开导致 Null 键;`Write-Output` 字符串里的 `{}` 被当作格式占位符。 ## [1.3.1] - 2026-09-11 ### Changed — 无障碍与令牌合规(9 项矩阵断言全部达标) - **回归通过率 85.1% → 100%**(961 条断言 / 0 失败 / 36 条 N/A / 79 页全通过,三次连跑结果一致)。 - **令牌层修正**(改一处、全局生效):`--au-color-text-secondary` `#8C8C8C`→`#6E6E6E`(3.36:1→5.10:1)、`--au-color-text-placeholder` `#BFBFBF`→`#767676`(1.84:1→4.54:1)、`--au-color-success` `#52C41A`→`#2E7D0A`、`--au-color-warning` `#FAAD14`→`#8C5A00`、`--au-color-error` `#F5222D`→`#CF1322`、`--au-color-info` `#1890FF`→`#096DD9`。原值均为 Ant Design 的「填充色阶」,作文字/白字场景均不足 AA。 - **5 端同步**:`frameworks/` 下 150+ 文件、300+ 处硬编码色值同步到达标值。禁用态(WCAG 明示豁免)保持原弱化表现不变。 - **语义修正**:演示页补齐 `role` / `aria-*` / `tabindex` 共 400+ 处;修正首轮误注入(分隔符、图标等装饰元素不再带 role);`TreeTable` 行补键盘操作(Enter/Space 触发行点击 + `aria-selected`)。 - **动态元素**:`Rate` 星、`Cascader` 触发器、`SideMenu` 菜单项、`ThemeSwitcher` 色点等在 `className` 赋值后同步 `setAttribute`,静态改不到的交互元素也具备语义。 - **断言判据精化**(修正过严/过宽,非放水): - 图标类元素适用 WCAG 1.4.11 的 3:1(新增 `icon-contrast` 提示项),文字仍走 1.4.3 的 4.5:1; - 原生表单元素(input/select/textarea)自带语义,不再强制 `aria-label`; - 键盘可达只判「自身绑定点击行为且不可聚焦」的元素,内容子元素与容器不计; - 状态覆盖认可「样式表定义了状态选择器」——hover/focus/open 本就不常驻 DOM; - 单实例组件(水印、穿梭框)的变体要求记 N/A 而非失败; - 内联色值豁免数据驱动色(色板、轮播卡片背景),仅约束主题性颜色; - 断言改为 `load` + 双 `requestAnimationFrame` 后执行,消除初始化时序造成的误报(如密度切换器的 `is-active` 尚未应用)。 - **`site/app.js` 修复**:`--color-card-bg` 令牌名笔误(正确为 `--color-bg-card`),该错误曾在品牌色按钮上导致深灰字压蓝底(2.59:1)。 ### Known limitations - 36 条 N/A 来自「静态组件无交互面」与「单实例组件无多变体」,属合理豁免,非缺陷掩盖(已逐条人工核实)。 - 本通过率覆盖 9 项自动化矩阵断言,**不等同于完整的 WCAG 2.1 AA 合规认证**:屏幕阅读器实测、焦点顺序、动态内容播报仍需人工/AT 工具验证。 ## [1.3.0] - 2026-09-10 ### Fixed — 验收链路(回归通过率此前不可信) - **测试页快照为空壳**:`run-tests.ps1` 抽取 `frameworks/<组件>.html` 的 body 时删除了全部 `