Repository navigation
Issue 153 Validation
- Issue:https://github.com/ShaoClean/Alune/issues/153
- 方案 · 覆盖与接口
- 时间:2026-10-02(北京时间)。负责人:Codex。
- 代码:
56ee4b90dae64c7fbb08e2ce9d70af5773e1975b,分支codex/alune-ui。 - 实施基线:
20a8dd7ffd912411549a1ceff9ec15b01406d41e;视觉 fixture 提交4b4d96c。 - PR:https://github.com/ShaoClean/Alune/pull/163;现已合入并完成公开部署验收。
macOS arm64;本机 Node 25.5.0 / npm 11.8.0;必需检查另用 Node 22.22.0 复测。React / React DOM 19.2.6、Ant Design 6.3.7、Astro 6.4.8,保持原有 React / Ant Design 锁定版本。
在根执行全新 npm ci 成功。另在完整源码临时副本中执行 npm ci --workspace website --workspace @alune/ui --include-workspace-root=false 成功,随后 Node 22 执行 npm run ui:check 与 npm run website:check 成功。实际确认 Electron、better-sqlite3、@nestjs/core 未安装,官网不构建服务端或桌面。源码包不依赖残留 dist。
| 命令 / 场景 | 环境 | 实际结果 |
|---|---|---|
迁移前 npm test -w web、Web build、官网 check/build/test |
原基线 | Web 218/218,全部通过 |
npm run ui:check |
Node 22.22.0 | 类型通过,18/18,API 无漂移,130 导出 / 46 文档 / 31 TSX 示例覆盖 |
npm test -w web |
Node 22.22.0 | 218/218,通过 |
npm run desktop:test:unit |
Node 22.22.0 | 45/45,通过 |
npm run desktop:build |
Node 22.22.0 | 6 个任务成功;Web build 成功;隔离 staging 中 better-sqlite3 重建成功 |
npm run website:check |
本机及选择性 Node 22 环境 | 0 errors / 0 warnings,79 页构建,5/5 静态测试 |
node apps/desktop/scripts/test-feedback.mjs |
Electron 44.2.0 | 四类反馈、滚动布局、焦点、草稿、单弹窗、轮询去重、离开释放、富内容全部通过 |
node apps/desktop/scripts/test-ui-dialogs.mjs |
Electron 44.2.0 + 构建后 preview | L0/L1/L2、Enter/Escape、默认焦点与恢复、双门槛、异步成功/失败及输入保留、同周期重复提交锁、role 恢复通过 |
静态测试递归检查所有文档/预览的 base、JS/CSS/图片/字体、内部链接、跨页 hash、唯一 ID、aria-controls、canonical;无 JS 内容与首页无示例 runtime;全部渲染示例源码与执行 TSX 字节一致。
使用同一 Ego Lite TaskSpace,直接操作构建产物 astro preview;桌面 1280×900,窄屏 390×844,组件对照使用 reduceMotion=true。
| 场景 | 操作与结果 |
|---|---|
| 搜索 | 英文 Modal、中文弹窗、无结果、清空;ArrowDown/ArrowUp、Enter 导航、Escape 收起通过 |
| 静态路由 | 文档、组件和 preview 直接访问 / reload;基路径与资源通过 |
| iframe | 深浅主题不影响外层;Portal 只存在于 iframe;390px、重置恢复、独立打开通过 |
| 源码 | 真实 Clipboard API 复制成功;模拟拒绝显示失败说明并展开;静态源码与文件完全一致 |
| 加载异常 | 阻断 modal 懒加载 JS,实际加载失败进入错误状态;解除后重置恢复。无 ready 的 404 iframe 触发 15 秒超时,重置恢复 |
| 弹窗 | 默认 field / ok / cancel;关闭恢复;Enter/Escape;L2 两个门槛及 Enter 不提交;失败保留草稿,等待中不重复提交 |
| 表单 / 空 / 结果 | 必填错误与帮助同时显示;本地异步失败保留输入;创建/清空记录、返回检查状态真实可操作 |
| 390px | 主页面宽度 390,无页面级溢出;API 和代码局部滚动;移动目录 Escape 恢复焦点 |
| 渐进增强 | 关闭 JavaScript 后导航、正文、API、展开源码仍可读 |
| 偏好 | 模拟 Storage getItem/setItem 抛错仍可切换;系统深色与减少动态效果传入预览通过 |
| 官网回归 | 移动菜单开闭与 Escape、产品锚点、下载区及 Release 文档链接、主题、UI 入口通过;首页不加载 UI runtime |
postMessage 接收代码核对 origin、source 和示例 ID,未放宽任意消息来源。示例只操作本地状态;没有 Git、SSH 或后端写请求。
- 基线 L0/L1 可能停在 Ant Design 的关闭按钮:首次执行等级焦点选择后,后续用户移动不被夺取;实际基线复现与修复验证均已记录。
- 同一事件周期内两次提交可重复进入 onOk:增加同步 ref 锁,Electron 验证只调用一次,异步失败后仍可重试。
- L2 复用弹窗切回 L0 的 alertdialog 角色未清除:每次打开按等级重设 role。
- Astro 会去掉高亮源码的末尾换行:高亮 transformer 恢复,静态测试覆盖全部示例。
- Form 的固定 help 会遮住校验错误:改为 extra,错误与帮助可同时阅读。
这些是验收后修复的明确行为差异;不把基线已有问题记录为迁移回归。#151/#152 再次核对仍 Open,未改变通知策略。
所有截图使用相同桌面视口 1280×900,浅/深主题,模拟状态;基线来自 4b4d96c fixture,最终来自上述代码提交。普通控件、危险弹窗布局一致;L0 焦点环移动是已说明的修复;反馈中时间文案变化属于动态内容。
控件与状态:基线 / 最终。


普通弹窗:基线 / 最终。


危险弹窗:基线 / 最终。


反馈:基线 / 最终。


控件与状态:基线 / 最终。


普通弹窗:基线 / 最终。


危险弹窗:基线 / 最终。


反馈:基线 / 最终。






- PR、Actions 与 required checks。
- Pages 部署。
- 公开 UI / 组件 / preview 直接访问、刷新、资源、主题与交互。
Windows / Linux 原生现场 UI 未执行;现有跨平台 CI 作为自动验证,不能冒充现场验收。公开部署已验收;总 Issue / P6 的全部关闭条件已满足。
- 官网 PR 构建:成功,deploy 在 PR 上按规则 skipped。
- 分支全套单元与跨平台:成功。
- PR 全套测试:全部成功,包括 Windows 本地 Git 与代理。
- PR commitlint:成功。
Wiki 初次推送遇到 HTTP400 和 github.com DNS 连接故障;通过 GitHub 官方 Git IP、保持主机名与 TLS 校验的单次 DNS 解析配置成功推送。没有改变全局网络配置。
快速开始与贡献指南的 TSX 模板分别提取到全新依赖副本,Node 22 的示例 tsconfig 检查通过;没有依赖应用私有路径。
- 合并提交:
bdc2c4f7258727f5b3eb41a4a994f22b2ea26d75;与本地已验证内容 tree 完全一致。 - Pages Actions:build / deploy 成功,选择性安装与 UI / 官网检查均成功。
- 公开入口:直接访问、刷新、搜索 Modal → Enter 导航通过。
- AluneModal:直访 / 刷新,浅外层 + 深 iframe 独立、浮层隔离、L0 聚焦 / Escape 恢复、真实复制成功。
- 独立预览:直访 / 刷新,L2 取消焦点、文字与勾选门槛、Enter 停用通过。
- 390×844 组件页无页面横向溢出,移动目录 Escape 后恢复。
- 真实已加载资源(主页面与 iframe 的 JS/CSS/图片/字体)21 项 HEAD 请求均成功,无失败。
- Wiki 方案、覆盖、验收 Markdown 与代表截图公开 GET/HEAD 200;截图如下。



- development 全套单元与跨平台测试:全部成功。
- development commitlint:成功。
- 公开更新日志:成功。
P0~P6、PR、部署和公开验收均完成。Windows/Linux 原生现场 UI 未执行,已明确区别于通过的跨平台自动测试;不影响本计划已定义的关闭条件。
- 状态:本地实现与验收完成,PR 待审阅;本节不改变上方原组件库交付的已发布状态。
- PR:官网文档圆角与示例布局 #176;关联 Issue #153。
- 代码:b76cf51fbfa8c89ab5b698d43f34fb5f34a29505,基于 development 的
378192e。 - 环境:macOS arm64,Node 25.5.0,npm 11.8.0,Chromium 本地静态预览。
侧栏链接的负外边距伸出滚动容器,导致左侧圆角被裁切。移除负边距并留出内侧空间,使 hover、选中和键盘焦点均显示完整四角圆角。实测 hover 四角均为 8px,左侧内缩 4px、右侧 12px。
全部 31 个示例补齐文档专用布局:图标分类网格、表单字段、按钮组、状态区域及组合内容均有明确宽度、分组和间距。样式保存在官网 ui-examples.css,不扩展共享组件 API。示例源码仍是运行与复制的唯一来源。
长示例和窄屏换行由 ResizeObserver 测量内容高度并通知父页面;父页面继续检查同源、iframe 实例和示例 ID,并保留注册表中的最小高度供浮层展示。侧栏及示例主题保持独立。
官网页眉、页脚、分享图统一使用 Alune;截图下方的版本文案已移除,截图来源和版本记录仍在官网 README 中。
| 检查 | 结果 |
|---|---|
npm run website:check |
通过:0 类型错误、0 警告;79 页构建;5/5 测试,包括资源/锚点/源码一致性 |
npm run ui:check |
通过:类型与 20/20 测试;131 导出、46 文档、31 示例覆盖 |
| 31 个示例桌面浅色 | 逐页查看;发现固定高度不足后补齐自动高度适配 |
| 31 个示例在 390px 文档深色 | 页面及 iframe 无横向溢出;内容高度均完整适配,见审计数据 |
| 表单 | 必填校验、保存成功、模拟失败及输入保留通过 |
| 弹窗 | L0/L1/L2、Enter/Escape、焦点恢复、typed+checkbox、异步失败保留输入、同一轮重复提交锁定通过 |
| 宿主控件 | 主题、390px 宽度切换、重置通过 |
| 首页 | 页眉与页脚均为 Alune,无截图版本说明,无页面横向溢出 |
git diff --check |
通过 |
弹窗回归复用 ui-dialog-browser.mjs。其 Electron 按键名称 Return 在 ego-browser 中不被识别;适配为 Enter 后完整回归通过,未修改仓库测试脚本。
31 个示例窄屏尺寸审计。线上合并与部署未执行,CI 状态以 PR 页面为准。本次未更改桌面业务代码;Wiki 随独立 Git 历史维护,代码回退时需核对本记录。
修改前,来自本次问题反馈:

修改后,侧栏圆角与图标分类网格:

窄屏深色示例:
![]()
首页品牌与截图区域:

设计文档首页 · Alune 品牌说明 · 维护约定 · 代码仓库