v1.3.0: 修复验收链路(iframe 真实渲染+跨帧断言)、基座焦点环、契约第二批 15 个

回归通过率此前不可信:run-tests.ps1 抽取演示页 body 时剥离全部 <script>,
而 79 个 H5 演示页的 DOM 全由内联脚本渲染,且测试页从未引用 frameworks/<组件>.css
—— 断言跑在空 DOM + 无组件样式上,v1.2.0 的 75.1% 属结构性误报。

Fixed — 验收链路
- 测试页改为 iframe 加载真实演示页(_template.html),_runtime.js 跨帧在真实
  渲染结果上断言:帧内 getComputedStyle/styleSheets/outerHTML,用例自动标注 +
  帧内描边,结果 postMessage 上报
- 标注改为容器下钻(.row/.demo-block → 首个含 ≥2 有效子元素的容器,最多 6 层)
- 新增 N/A 语义:静态组件键盘/ARIA 记 skip 而非失败;对比度与 token 检查限定
  在被测组件区,页头文档文字不计
- 通过率分母改为 pass/(pass+fail),tools/run-regression.mjs 与收集器同口径

Added — 设计系统
- 基座 :focus-visible 统一焦点环(colors_and_type.css)。--au-color-focus-ring
  此前只定义未消费,79 个组件样式仅 20 个自带 focus 规则 —— 一次性消除 66 页失败
- tests/_collect.html:零依赖浏览器批量回归收集器(并发 iframe + 汇总)
- tests/_index_template.html:测试总览页模板外置,读数来自 data.json

Added — 契约第二批(展示类 15 个)
- tree/collapse/calendar/carousel/imagepreview/qrcode/countdown/watermark/
  cardlist/treetable/timelinelist/steplist/chartpanel/dashboardcard/employeecard
- 逐份从规格原文(组件2/4/7/9.txt)提炼,含 dims/variants/anatomy/structure/
  usageHints/doNotInvent/unknowns;契约化 21 → 36/79

Changed
- run-tests.ps1 重写:删除失效的快照抽取(占位符替换早已不匹配模板),改生成
  iframe 版测试页;输出 WriteAllText 无 BOM;保持 ASCII-only,中文移入 UTF-8 模板
- 回归基线:960 断言 / 794 通过 / 85.1% / 11 页全通过 / N/A 27
- CHANGELOG/TESTING/改造清单同步;测试总览页与首页通过率联动

验证:浏览器全量 79 页收集器跑通两次,基线一致;详情页契约章节
(含 doNotInvent/unknowns)、chip、首页「通过率 85.1%」、changelog v1.3.0 实测通过
This commit is contained in:
aurora-admin
2026-09-10 21:19:09 +08:00
parent 0289c8acfc
commit 6fec4ba6f8
110 changed files with 4310 additions and 3419 deletions
+18 -11
View File
@@ -1,6 +1,8 @@
# Aurora Admin 现状问题分析与改造清单
> **修复进度(2026-09-08 v1.1.1)**:A1 搜索增强、A2 For Agents + llms.txt、A3 站内 Changelog + 版本同步、B2 暗色令牌映射、B4 主题预设库 已完成并通过浏览器实测;剩余 B1(契约分批补齐)、B3(Playground)、C1-C4 待后续版本。
> **修复进度(2026-09-10 v1.3.0)**:v1.1.1 完成 A1 搜索增强、A2 For Agents + llms.txt、A3 站内 Changelog + 版本同步、B2 暗色令牌映射、B4 主题预设库;v1.2.0 完成 B1 契约第一批(21/79)、B3 Playground、C1 交叉引用、C3 headless 回归骨架、C4 静态薄壳 + sitemap。
>
> v1.3.0(本次)修复**验收链路**并推进契约第二批:测试页此前把演示页快照抽成静态 HTML(剥离 `<script>`)且未加载组件 CSS,而 79 个演示页 DOM 全靠内联脚本渲染——断言跑在空 DOM 上,v1.2.0 的 75.1% 属结构性误报,现改为 iframe 直载真实演示页 + 跨帧断言,基线 **960 断言 / 85.1%**;基座补 `:focus-visible` 统一焦点环(消除 66 页失败);契约第二批 15 个展示类组件落地(**36/79**)。剩余见下。
>
> 依据:《竞品网站检查报告.md》(2026-09-08)+ 对当前代码的逐文件核实(site/app.js 1671 行、site/style.css、components/index.json、data.json、tests/)
> 性质:问题分析 + 可执行改造清单。本文只做分析与方案,未改动任何文件。
@@ -34,8 +36,8 @@
- 深色模式下只有站点骨架变色,正文卡片、表格、侧栏、搜索弹窗等大量表面仍按浅色令牌渲染;演示 iframe 保持浅色是有意设计(`style.css:990` 注释),但**这一策略没有写进设计规范页**,使用者会误以为未完成。
- 竞品对照:7 家中 6 家有完整暗色(Ant Design 甚至有整套暗色主题预设)。
**问题 3:契约覆盖 6/79,扩展组件 API 靠源码启发式扫描**
- `components/` 目录仅 6 份契约 JSON(button/input/select/table/card/modal);其余 69 个扩展组件的 Props/Events/Slots 表由 `extractComponentAPI()` 扫描 `.css/.jsx/.vue` 源码正则提取。
**问题 3:契约覆盖 36/79,扩展组件 API 靠源码启发式扫描**
- `components/` 目录已有 36 份契约 JSON(6 核心 + 15 输入类第一批 + 15 展示类第二批);其余 43 个扩展组件的 Props/Events/Slots 表由 `extractComponentAPI()` 扫描 `.css/.jsx/.vue` 源码正则提取。
- 风险:跨 4 端命名差异(H5 class、React camelCase、Vue kebab-case)极易漏提/错提;竞品的 API 表全部由类型化源码(TS d.ts / props 定义)生成,可靠性不在一个量级。这直接削弱「可被审计」的核心卖点。
**问题 4:AI 消费入口未公开(竞品已全员押注的方向)**
@@ -56,9 +58,11 @@
- `theme-panel` 仅 4 个颜色键 + 复制覆盖代码;无预设主题一键切换(Ant Design 13 套 / Semi DSM 主题商店 / Naive UI 换主题演示)。
- 令牌文件里 au-* 令牌是分组注释的(品牌/中性/语义),面板未按组呈现,也没有「只改语义色不改品牌色」的分层能力。
**问题 8:测试断言未接入自动回归**
- `tests/*.html` 已带 `data-assert` / `data-status` 机器可读标记(PLAN §5.1 设计到位),但没有 headless 批量执行与报告输出;`run_tests.py` 只负责生成页面。
- Semi 宣称"单测+E2E+视觉对比 90% 覆盖"并作为首页卖点;Aurora 有同等素材却没形成证据链。
**问题 8:测试断言未接入自动回归**(v1.3.0 已修链路,剩余为真实缺口)
- `tests/*.html` 已带 `data-assert` / `data-status` 机器可读标记,`tools/run-regression.mjs` 与 `tests/_collect.html` 两种 runner 均可批量执行并产出 `tests/report.json`。
- **v1.3.0 修正**:此前测试页把演示页 body 抽成静态快照(剥离 `<script>`)且未引入组件 CSS,而演示页 DOM 全靠内联脚本渲染,导致断言在空 DOM 上大面积失败——原 75.1% 不是真实质量数据。现改为 iframe 直载真实演示页 + 跨帧断言,基线 960 断言 / 85.1%(N/A 27)。
- 剩余失败项是演示页的真实缺口:状态覆盖 45、对比度 35、ARIA 33、键盘可达 15、硬编码 hex 9、变体 2。
- Semi 宣称"单测+E2E+视觉对比 90% 覆盖"并作为首页卖点;Aurora 现已有可复现证据链,但覆盖率仍待补齐。
### P2 — 增强项
@@ -122,8 +126,10 @@
- **做法**:CAT_LABELS/导航/首页文案字典化为 `site/i18n.js`(zh/en),顶栏加语言切换并持久化;组件名本身双语已具备(splitName)。
- **对标**:全部 7 家竞品均有中英双语。
### C3 · headless 回归(P2,M)
- **做法**:用 Playwright 批量加载 tests/*.html,读取 `data-assert`/`data-status` 汇总通过率,输出 JUnit XML + Markdown 报告;文档站首页/测试总览页展示最近一次回归结果。
### C3 · headless 回归(P2,M)— v1.3.0 已完成
- **做法**:用 Playwright 批量加载 tests/*.html,读取 `data-assert`/`data-status` 汇总通过率,输出 JUnit XML;文档站首页展示最近一次回归结果。
- **落地**:`tools/run-regression.mjs`(Playwright + JUnit XML)+ `tests/_collect.html`(零依赖浏览器收集器,同口径);首页 Hero 读 `tests/report.json` 显示通过率。
- **关键修正**:测试页原先把演示页 body 抽成静态 DOM,剥离 `<script>` 后内容为空(演示页 DOM 全靠内联脚本渲染)且缺组件 CSS —— 断言在空 DOM 上跑出的 75.1% 是结构性误报。v1.3.0 改为 iframe 直载真实演示页 + 跨帧断言,基线 960 断言 / 85.1%。
- **落点**:`run_tests.py` 扩展或新增 `run_e2e.py`。
- **对标**:Semi「三种测试 + 90% 覆盖率」的公开证据链。
@@ -141,13 +147,13 @@
|---|---|---|---|
| 1 | 品牌与原则 | ✅ | README + 首页 Hero |
| 2 | 设计令牌 | ✅ | 设计规范页 + css.json,缺暗色组与导出 |
| 3 | 组件契约 | ⚠️ 6/79 | 详见问题 3 |
| 3 | 组件契约 | ⚠️ 36/79 | 详见问题 3(核心 6 + 输入类 15 + 展示类 15) |
| 4 | 批次映射 | ✅ | index.json schemaVersion 3 |
| 5 | 全量预览 | ✅ | 总览 iframe + 分类/关键词过滤 |
| 6 | 首页/总览/快速开始/设计规范 | ✅ | 四页 + 详情页 |
| 7 | 全局搜索 | ⚠️ | 基础可用,增强未落地(问题 1) |
| 8 | 主题定制器 | ⚠️ | 有,缺预设(问题 7) |
| 9 | 每组件测试页 | ✅ | 79 页 + index,缺 headless(问题 8) |
| 9 | 每组件测试页 | ✅ | 79 页 + index + 批量收集器;iframe 真实渲染,基线 85.1%(问题 8) |
| 10 | Changelog/Roadmap | ⚠️ | 仓库文件,未上网(问题 5) |
### 建议新增 6 个内容模块
@@ -169,7 +175,8 @@
|---|---|---|---|
| **v1.1.1**(1-2 天,hotfix 性质) | 搜索增强补票 / For Agents + llms.txt / 站内 Changelog + 版本同步 | A1、A2、A3(S) | 消除"声称≠实现"审计硬伤;补上 2026 年竞品标配的 AI 入口与维护信号 |
| **v1.2.0**(1-2 周) | 契约分批补齐(第一批 15 个)/ 暗色令牌映射 / Playground / 主题预设 | B1(批1)、B2、B3、B4 | API 可信度、暗色完整性、可试玩、可换肤四项对齐竞品一线水平 |
| **v1.3.0**(后续) | 契约第二批/第三批、交叉引用、i18n、headless 回归、令牌导出与静态化 | B1(批2/3)、C1-C4 | 形成完整证据链与双语能力,可对外交付 |
| **v1.3.0**(本次) | 验收链路修复(iframe 真实渲染 + 跨帧断言)/ 基座焦点环 / 契约第二批 15 个(展示类) | C3 修正、B1(批2) | 回归数字从误报变可信(85.1% / 960 断言);契约 36/79;焦点环一次性修 66 页 |
| **v1.4.0**(后续) | 契约第三批(剩余 43 个)、i18n、令牌导出、组件 FAQ、C2 | B1(批3)、C2、C4 剩余 | 形成完整证据链与双语能力,可对外交付 |
### 判断依据(一句话版)
- **先补票再做新功能**:搜索增强是 PLAN/CHANGELOG 声称已交付的,最优先修复。