Design v2 实现与验收
本地 Design v2 目录包含 110 个场景/120 项有效功能;已注释的 CRC 对话框 F066 不计入。原生实现覆盖各场景族及 2026-10-14 评审发现的九项功能缺口。本清单区分已实现交互与真实服务、操作系统验收,不表示已达到像素级设计一致性。
internal/app/testdata/design-v2-scenes.json 固定场景 ID。TestDesignV2Scenes 以 5 种语言 × 2 种主题、900 × 620 尺寸渲染 104 个由应用管理的场景测试数据。这 1,040 项检查检测缺失翻译及被裁切的关闭操作,不能独立证明所有交互正确。make snapshots 导出英语浅色/深色版本。D11、D12、D47、D53、D54 和 D55 属于操作系统界面或交接,不计入无窗口渲染数量。
现有能力
这些能力已连接到原生视图和服务适配器。评审后续工作记录九组已完成功能及回归覆盖。
- 连接:AK、STS、授权码、HTTPS Endpoint 模式、主动启用请求者付费、凭据库支持的保持登录、到期/只读约束、历史、书签和主目录。
- 浏览:列表/网格、前缀搜索和分页、地址导航、上下文菜单、多选、拖放计划和有界图片缩略图。
- Bucket:按区域提供存储选项、显式公开 ACL 确认、空桶删除、分页分片搜索及队列化清理。
- 对象:递归复制/移动/重命名/删除、同区域跨桶粘贴、冲突确认、逐项结果、HTTP 标头和元数据、软链接、归档恢复及受恢复状态限制的预览。
- 预览:文本编辑/Diff/未保存修改保护、图片缩放、原生 WebView 音视频,以及明确的文档/FLV/不支持格式回退。文本保存保留标头、元数据、标签、ACL 和存储类型。默认创建副本;替换原对象需要显式选择和 ETag 预检。
- 分享:公开 ACL 校验、限时签名 URL、自定义/加速域名、二维码生成、剪贴板/浏览器交接,以及确认后发送 SMTP 邮件。
- 身份:RAM 用户和 AccessKey、用户/组/角色策略授权、多对象策略、新用户授权码、STS 角色授权码和到期时间。部分完成的授权保留在对话框内供重试。
- 传输:独立上传/下载限制、有上限的自动重试、暂停/恢复/移除/清空、诊断详情、持久化文件传输恢复和 CRC/ETag 校验。
- 偏好设置/分发:独立的五分类自动保存设置对话框、系统主题和语言、可搜索/清空的会话诊断,以及在配置更新源/密钥的构建中自动下载签名包、显示说明、进度/错误/重试、确认安装和重启。未配置构建提供手动发布下载。
评审后续工作
2026-10-14 的检查设计页面实施情况评审发现九项功能缺口。下列代码改动完成了这些功能组。路径相对于仓库;设计基线所述本地目录和 previews/all 仍是视觉参考。
范围决定:FLV 播放
D25-flv 保留外部打开/下载回退,实现在 internal/app/preview_media.go。应用内解码仍是独立的范围决策。
证据与剩余验收
场景测试数据现在涵盖独立确认、可编辑保存 Diff、RAM 结果/邮件失败、设置界面、批量结果和更新就绪。专项测试覆盖取消、保留草稿/凭据、过期回调、重复元数据、限定范围策略及暂存更新。部分无关错误场景仍使用通用网络错误;渲染覆盖本身不能证明真实服务行为。真实账号、编解码器、操作系统和签名分发验收继续在下文及发布指南中跟踪。
生产边界
实现期间没有执行真实 OSS/RAM/SMTP 请求。账号凭据、Windows/Linux 桌面环境及分发签名配置仍需所有者提供,见发布指南。原生 macOS 启动仅为冒烟测试。WebView 编解码器行为、操作系统对话框、凭据库提示、真实归档延迟及签名更新安装都需要这些环境。
本地验证
2026-10-14 在 macOS 上的本地验证覆盖已完成的后续工作,不能替代真实验收:
go test ./...、go test -race ./...、go vet ./...和go tool mygo vet均通过。- 全部 1,040 项场景检查通过;
make snapshots导出了视觉回归图片。 - 原生 macOS 启动/捕获和应用打包通过。先前基线评审记录了 Windows/Linux 交叉编译;这些平台的桌面运行仍待验收。
- 文档类型检查和生产构建通过。Go 格式及空白检查无问题。
应用限制
应用中明确保留以下边界:
- 连接使用 HTTPS。远端文本加载上限 8 MiB,可编辑 UTF-8 上限 5 MiB;图片解码上限 2000 万像素。文档和 FLV 预览提供外部打开/下载。未支持编解码器的行为取决于已安装的原生媒体引擎。
- 元数据自复制上限 1 GiB。递归计划最多 100,000 个唯一键。服务端跨桶复制要求区域一致。对象修改任务仅限当前会话;文件上传/下载记录可在重连后保留。
- OSS ETag 预检后的删除/替换不具备原子性,应避免并发写入。启用版本控制的 Bucket 中禁止覆盖语义不同。显式替换可能创建新对象版本。
- SMTP 要求隐式 TLS 或 STARTTLS。密钥使用内存或操作系统凭据库。RAM AccessKey Secret 仅在本对话框创建时显示;不能从 RAM 获取已有 Secret。
- 多对象授权允许列举公共父目录以便接收者浏览;对象读写仍限制在选定资源内。授权前应审查可编辑策略。
- 已移除传输记录使用删除标记,防止迟到的工作完成将其恢复。移除任务保留可续传的部分数据;分片删除是独立且需确认的操作。
- 未签名开发构建不能安装更新。准备签名发布时必须向
mygo.json提供可信发布者公钥及更新源;此实现不会自行生成信任密钥。
场景清单
下表“UI”表示场景在 TestDesignV2Scenes 中有原生状态测试数据,不代表设计交互或视觉布局已完整实现。请结合评审后续工作阅读相关行。服务测试使用注入的 HTTP 响应,不等于云端验收。下列无目录文件名相对于 internal/app/。保留目录的原始中文标题,便于按 ID 与源目录直接比对。
| 场景 | 目录原始标题 | 实现 | 证据/外部验收 |
|---|---|---|---|
| P01 | 连接 · AccessKey | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P02 | 连接 · 授权码 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P03 | 所有 Bucket | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04 | 对象浏览与详情 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P05 | 上传队列 · 完整状态 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| P06 | 下载队列 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D01 | 连接历史 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| D02 | 退出连接确认 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| D03 | 收藏管理 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| D04 | 创建 Bucket | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D05 | 公开访问风险 | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D06 | Bucket 访问权限 | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D07 | 删除空 Bucket | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D08 | 上传碎片管理 | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D09 | 删除上传碎片 | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D10 | 新建目录 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D11 | 选择上传文件与目录 | internal/desktop, transfer_actions.go, internal/transfers/download_plan.go | 原生委托;操作系统选择器/定位及取消待验收 |
| D12 | 下载保存位置 | internal/desktop, transfer_actions.go, internal/transfers/download_plan.go | 原生委托;操作系统选择器/定位及取消待验收 |
| D13 | 文件与目录重命名 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D14 | 跨桶批量粘贴确认 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D15 | 复制移动进度 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D16 | 同名覆盖确认 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D17 | 批量删除确认 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D18 | 对象访问权限 | object_actions.go, internal/ossclient/objects.go | UI;属性/ACL 保留测试;真实更新待验收 |
| D19 | HTTP 头与元数据 | object_actions.go, internal/ossclient/objects.go | UI;属性/ACL 保留测试;真实更新待验收 |
| D20 | 创建软链接 | internal/ossclient/advanced.go, object_actions.go | UI;软链接、范围及恢复状态/请求测试;真实恢复待验收 |
| D21 | 恢复归档对象 | internal/ossclient/advanced.go, object_actions.go | UI;软链接、范围及恢复状态/请求测试;真实恢复待验收 |
| D22 | 批量恢复归档 | internal/ossclient/advanced.go, object_actions.go | UI;软链接、范围及恢复状态/请求测试;真实恢复待验收 |
| D23 | 文本与代码编辑 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D24 | 图片预览 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D25 | 视频预览 | preview_media.go | UI 回退;原生播放器/编解码器及外部打开待验收 |
| D26 | 文档预览降级 | preview_media.go | UI 回退;原生播放器/编解码器及外部打开待验收 |
| D27 | 不支持的文件格式 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D28 | 保存前差异对比 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D29 | 归档预览检查 | internal/ossclient/advanced.go, object_actions.go | UI;软链接、范围及恢复状态/请求测试;真实恢复待验收 |
| D31 | 私有对象签名地址 | internal/ossclient/share.go, object_actions.go | UI;二维码精确解码、URL 编码、ACL 及签名范围测试;域名绑定待验收 |
| D32 | 邮件发送下载地址 | mail_tools.go, internal/mail | UI;地址/标头/取消测试;真实 TLS 投递待验收 |
| D33 | 简化 Policy 授权 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D34 | 创建子用户并授权 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D35 | 子用户授权结果 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D36 | 设置 · 传输 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D37 | 目录临时授权码 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D38 | RAM 用户管理 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D39 | 编辑 RAM 用户资料 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D40 | 删除 RAM 用户确认 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D41 | AccessKey 管理 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D42 | 禁用 AccessKey 确认 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D43 | 删除 AccessKey 确认 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D44 | 移除未完成任务 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D45 | 清空传输队列 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D46 | 传输详情与错误诊断 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D47 | 下载本地位置 | internal/desktop, transfer_actions.go, internal/transfers/download_plan.go | 原生委托;操作系统选择器/定位及取消待验收 |
| D48 | SMTP 测试确认 | mail_tools.go, internal/mail | UI;地址/标头/取消测试;真实 TLS 投递待验收 |
| D49 | 诊断控制台 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D50 | 关于与检查更新 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| D51 | 版本发布说明 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| D52 | 安装与重启确认 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| D53 | 应用与系统菜单 | menu.go, commands() | 原生委托;编辑/窗口/应用角色;平台菜单待验收 |
| D54 | 单实例窗口激活 | main.go, application.openWindow | 原生委托;实例锁和激活;平台待验收 |
| D55 | 外部帮助交接 | window.openDocs, desktop.OpenURL | 原生委托;URL 策略测试;浏览器交接待验收 |
| P01-sts | STS 临时凭证 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P01-customize | 自定义 Endpoint | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P01-cname | CNAME 自定义域连接 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P01-privateLink | PrivateLink 私网连接 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P01-invalid | 连接失败与保留输入 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P01-loading | 正在建立连接 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P02-expired | 授权码过期 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| P03-grid | Bucket 图标视图 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P03-empty | 没有 Bucket | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P03-readonly | 临时只读会话 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-grid | 对象网格视图 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-search | 前缀搜索与无匹配 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-empty | 空目录 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-loading | 目录正在加载 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-offline | 网络中断与重试 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-forbidden | 无权读取当前目录 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-multi | 多选与批量操作 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-context | 对象右键菜单 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-large | 大列表与增量列举 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P04-clipboard | 复制移动待粘贴 | browser_view.go, browser_controls.go, saved_locations.go | UI;分页/导航测试;真实 OSS 待验收 |
| P06-failed | 下载失败与恢复 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D01-clear | 清空连接历史确认 | connection_view.go, connection_actions.go, saved_locations.go | UI;授权、范围和连接测试;真实登录/凭据库待验收 |
| D07-nonempty | Bucket 非空删除失败 | bucket_tools.go, internal/ossclient/buckets.go | UI;请求/范围/分页测试;真实 Bucket 待验收 |
| D15-partial | 复制移动部分失败 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D17-partial | 批量删除部分失败 | object_actions.go, object_clipboard.go | UI;递归计划和部分修改测试;真实修改待验收 |
| D19-batch | 批量编辑元数据 | object_actions.go, internal/ossclient/objects.go | UI;属性/ACL 保留测试;真实更新待验收 |
| D23-readonly | 只读代码预览 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D23-oversize | 文本超过预览上限 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D25-audio | 音频预览 | preview_media.go | UI 回退;原生播放器/编解码器及外部打开待验收 |
| D25-flv | FLV 视频预览 | preview_media.go | UI 回退;原生播放器/编解码器及外部打开待验收 |
| D27-error | 预览加载失败 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
| D31-public | 公开对象地址 | internal/ossclient/share.go, object_actions.go | UI;二维码精确解码、URL 编码、ACL 及签名范围测试;域名绑定待验收 |
| D31-domain | 自定义域与二维码 | internal/ossclient/share.go, object_actions.go | UI;二维码精确解码、URL 编码、ACL 及签名范围测试;域名绑定待验收 |
| D33-group | 授权给用户组 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D33-role | 授权给角色 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D33-policy | Policy JSON 预览编辑 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D35-mailfailure | 授权成功但邮件失败 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D36-system | 设置 · 系统 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D36-mail | 设置 · 邮件 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D36-logs | 设置 · 日志 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D36-other | 设置 · 其他 | settings_controls.go, system_settings.go, internal/diagnostics | UI;设置校验和日志轮转测试 |
| D37-generated | 临时授权码已生成 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D38-forbidden | RAM 列表权限不足 | ram_tools.go, internal/identity | UI;签名 RPC、分页、范围和授权码测试;真实 RAM/STS 待验收 |
| D46-crc | CRC 校验不匹配 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D46-changed | 源对象变更重新下载 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D46-disk | 本地写入失败诊断 | transfer_controls.go, internal/transfers | UI;队列、恢复、校验和及路径测试;真实传输待验收 |
| D50-downloading | 更新下载进度 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| D50-failed | 更新下载失败 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| D50-finished | 更新已就绪 | update.go, internal/releases, internal/updates | UI;发布解析测试;签名更新源/安装/重启待验收 |
| E03 | 放弃未保存修改确认 | object_actions.go, preview_media.go | UI;大小/完整性、未修改/Diff 及放弃测试 |
协议参考
OSS 存储类型、请求者付费、RestoreObject 和 PutSymlink。暂存更新器遵循固定 MyGo v0.4.8 模块的清单/签名格式;改编代码在 internal/updates/LICENSE 中保留 MIT 许可声明。