Issue 127 Validation - ShaoClean/Alune GitHub Wiki
Issue #127:设置共用工作区外壳 — 实现验收
实现与验收覆盖
| 范围 |
实现和实际结果 |
| 共用外壳 |
保留同一个 .app-shell、48px 顶栏和 32px 状态栏;进入设置只替换分类导航、标题和正文。桌面断言进入前后的左栏/顶栏/状态栏尺寸、位置、背景和分隔线一致。 |
| 左栏、顶栏 |
共用184–320px宽度、收起状态和快捷键。返回按钮位于标题旁,隐藏左栏时转到顶栏;设置没有仓库标签、工具栏或右栏开关。原品牌和静态页脚已移除。 |
| 抽屉 |
899/741/739/320px通过分类切换后关闭并聚焦顶栏开关;800px手动验证 Shift+Tab 焦点循环、Esc 关闭和焦点恢复。 |
| 工作区保留 |
同一工作区 DOM、提交草稿、查找条件、仓库标签和面板偏好保留;返回恢复原焦点。非零左栏滚动位置实测180px保留,并增加桌面非零断言。恢复焦点使用 preventScroll。 |
| 路由与状态栏 |
仓库详情、连接页、仓库列表进入后可返回;未知设置分类回退服务商。状态栏跳转可用;代理未保存时继续编辑不改变 activeId,放弃后才切换目标仓库。Cmd/Ctrl+, 和菜单再次打开设置保留当前分类。 |
| 反馈与后台任务 |
设置和保留的工作区使用独立 FeedbackScope。桌面回归覆盖通知、更新提示、下载期间离开设置、刷新后继续下载和重启安装入口。使用模拟更新源,没有下载或安装正式版本。 |
| 内容规范 |
普通表单最大760px、宽页面1180px,左对齐并使用工作区正文内边距;单行输入34px,多行提示词保留4行(实测98px)。代理保存栏与状态栏贴合。 |
| 服务商响应式 |
按正文容器宽度≥900 / 600–899 / <600切换210px列表、178px列表和逐级进入。桌面断言1440/1100/560px下同一输入节点及未保存值保留;返回列表恢复选中项焦点。 |
| 11个Select |
全部迁移为antd,明确关联label/id、可访问名称、空值/占位、禁用和分组;逐项结果见下表。原窄屏分类Select由抽屉取代。 |
| 主题和动态效果 |
深浅两套截图;减少动态效果开关使 reducedMotion=true、面板按钮 transitionDuration=0s;没有新增动效。键盘和可访问树检查通过,未使用独立读屏软件做端到端朗读。 |
| 现有设置能力 |
桌面回归覆盖AI配置/密钥/测试模型、令牌、布局/外观/自定义代码主题/字体的进程重启持久化,以及更新模拟流程;代理离开确认和保存栏通过。后端配置结构与凭据生命周期未改。 |
下拉交互检查
所有11个控件均检查字段标题点击聚焦正确输入,并使用鼠标或方向键/Enter选择。配置依赖仍按原规则处理。
| 控件 |
结果 |
| 默认服务商 |
选择成功;清空显示“选择服务商”,同时清空默认模型。 |
| 默认模型 |
选择成功;空值显示“选择模型”。 |
| 输出语言 |
ArrowDown/Enter切换为English。 |
| 提交格式 |
键盘切换为自然语言。 |
| 服务商接口协议 |
自定义服务商键盘选择Anthropic。 |
| 测试模型 |
空字符串选项“仅测试模型列表接口”可实际选中;编辑未保存后禁用。 |
| 代理类型 |
键盘选择HTTPS。 |
| 测试SSH服务器 |
选择目标服务器,保留占位与可清空行为。 |
| 测试远端Git仓库 |
选择服务器关联的仓库,保留占位与可清空行为。 |
| 代码主题 |
“内置主题”分组正常,深色模式的Latte被禁用,键盘切换Macchiato;aria-describedby保留。桌面测试还覆盖已安装主题的选择与持久化。 |
| 示例语言 |
键盘切换Python并更新预览。 |
命令与结果
| 命令 / 场景 |
结果 |
基线 npm test -w web、npm run build -w web |
194项测试通过,构建通过。首次旧shared产物导致构建失败,重新构建shared后通过,无源代码补丁。 |
最终 npm test -w web |
196项通过,0失败。 |
最终 npm run build -w web |
通过;存在原有大chunk提示。 |
npm run desktop:build |
通过;包含后端、shared、Web及Electron原生依赖构建。 |
npm run desktop:test |
45项单元测试、Electron write/restore两阶段冒烟全部通过,包含新增设置外壳测试。 |
| 补充本地/SSH代码阅读验收 |
本地通过;SSH失败:ssh2 SFTP通道关闭抛出 No response from server。使用改造前Web产物和原始测试脚本复跑,得到相同异常;确认本环境基线同样失败,不计为本次通过项。 |
| PR CI(同一提交) |
测试工作流和commitlint全部通过:Web/desktop/server/ssh-client单元测试,macOS/Windows/Linux本地Git与网络代理检查。这些服务测试不代表Windows/Linux原生窗口验收。 |
git diff --check |
通过。改动的TS/TSX格式检查通过;workspace-layout.css原基线存在格式差异,本次未批量格式化。 |
过程中的失败保留:截图检查发现多行输入被压成34px、代理保存栏底部留白、窄屏开关与文字间距不足,修复后重新截图并运行桌面回归;新增非零滚动测试首次受窗口680px最小高度限制,测试临时解除限制并在finally恢复,重跑通过。额外代码阅读测试首次沿用原生Select定位,更新为antd后本地场景通过,SSH场景曾在60/120秒整体时限内超时;进一步采样定位为Electron未捕获异常弹窗阻塞,测试启动器现将异常写入日志并退出;使用原Web产物/原始脚本复验也出现相同SFTP异常,见上表。
截图与尺寸
224张前后对照 = 2版本 × 2主题 × 7宽度 ×(工作区 + 7分类)。1440宽使用900高,其余使用800高;另有14张分栏、抽屉、折叠、最窄侧栏及Select截图。所有after截图的页面/设置正文均无横向溢出,顶栏48px、状态栏32px。普通分类正文左缘相同(1440/1280宽x=266;901宽x=258;899宽x=22;741/739宽x=14;320宽x=10)。服务商内容另含内部列表。
| 改造前:1440深色网络代理 |
改造后:1440深色网络代理 |
 |
 |
| 改造后浅色全分类 |
改造后320px深色全分类 |
 |
 |
额外场景
完整前后对照索引
每格分别链接改造前、改造后的原图。
浅色
深色
复验与边界
Web截图流程:npm run build -w web 后用 ALUNE_SETTINGS_FIXTURE=1 node apps/web/tests/workspace-fixture.mjs 启动内存数据,再进入仓库并用Cmd/Ctrl+,打开设置,以保留工作区上下文。通过外观单选按钮切换主题;在各视口选择七个分类。桌面完整回归:npm run desktop:build && npm run desktop:test。
未验证Windows/Linux原生窗口、真实读屏软件、正式更新安装和真实第三方AI/代理服务。截图fixture仅用于界面,不作为远程服务连通性证明;桌面使用隔离配置与本机SSH,不读写用户实际仓库或凭据。没有数据迁移;回退该代码提交即可恢复旧外壳,Wiki记录需独立维护。