Skip to content

Design v2 implementation and acceptance ​

The local Design v2 catalog contains 110 scenes / 120 active feature entries; the commented-out CRC dialog F066 is excluded. The native implementation covers each scene family and the nine functional gaps identified in the 2026-10-14 review. This ledger distinguishes implemented interactions from live service and operating-system acceptance; it is not a claim of pixel-perfect design parity.

internal/app/testdata/design-v2-scenes.json freezes the scene IDs. TestDesignV2Scenes renders 104 application-owned scene fixtures in 5 languages × 2 themes at 900 × 620. These 1,040 checks detect missing translations and clipped close actions; they do not independently prove every interaction. make snapshots exports the English light/dark variants. D11, D12, D47, D53, D54 and D55 are OS-owned surfaces or handoffs and are excluded from the headless rendering count.

Existing capabilities ​

These capabilities are connected to native views and service adapters. The review follow-up records the nine completed functional groups and their regression coverage.

  • Connections: AK, STS, authorization codes, HTTPS endpoint modes, requester-pays opt-in, keyring-backed keep-login, expiry/read-only enforcement, history, bookmarks and home directory.
  • Browsing: list/grid, prefix search and pagination, address navigation, context menus, multiple selection, drag/drop plans and bounded image thumbnails.
  • Buckets: region-dependent storage options, explicit public-ACL confirmation, empty-bucket deletion, paginated multipart search and queued cleanup.
  • Objects: recursive copy/move/rename/delete, cross-bucket same-region paste, conflict confirmation, per-item outcomes, HTTP headers and metadata, symlinks, archive restoration and restore-gated previews.
  • Preview: text editing/diff/unsaved-change guard, image zoom, native WebView audio/video, and explicit document/FLV/unsupported-format fallback. Text saves preserve headers, metadata, tags, ACL and storage class. Creating a copy is the default; replacing the original requires explicit opt-in and an ETag preflight.
  • Sharing: public ACL validation, expiring signed URLs, custom/accelerated domains, QR generation, clipboard/browser handoff, and confirmed SMTP messages.
  • Identity: RAM users and AccessKeys, user/group/role policy grants, multi-object policies, new-user codes, STS role codes and expiry. Partial grant completion is retained for retry within the dialog.
  • Transfers: independent upload/download limits, bounded automatic retries, pause/resume/remove/clear, diagnostic details, durable file-transfer recovery and CRC/ETag verification.
  • Preferences/distribution: an independent five-category settings dialog with automatic saving, system theme and language, searchable/clearable session diagnostics, automatic signed-package downloads, notes, progress/error/retry, confirmed installation and restart when the build has a configured update feed/key. Unconfigured builds offer manual release downloads.

Review follow-up ​

The 2026-10-14 review in 检查设计页面实施情况 identified nine functional gaps. The following code changes complete those groups. Paths are repository-relative; the local catalog and previews/all described in Design baseline remain the visual references.

Scope decision: FLV playback ​

D25-flv retains external-open/download fallback in internal/app/preview_media.go. In-app decoding remains a separate scope decision.

Evidence and remaining acceptance ​

Scene fixtures now represent the independent confirmations, editable save Diff, RAM result/mail failure, settings surface, batch results and update readiness. Focused tests exercise cancellation, retained drafts/credentials, stale callbacks, duplicate metadata, scoped policies and staged updates. Some unrelated error fixtures still use generic network errors; rendering coverage alone does not prove live service behavior. Real account, codec, OS and signed-distribution acceptance remains tracked below and in Releasing.

Production boundaries ​

Real OSS/RAM/SMTP requests were not performed during implementation. Account credentials, Windows/Linux desktop environments and distribution signing configuration remain owner-provided acceptance inputs, as recorded in releasing. Native macOS startup is a smoke test only. WebView codec behavior, OS dialogs, keyring prompts, live archive delays and signed update installation need those environments.

Local verification ​

Local verification on macOS on 2026-10-14 covers the completed follow-up. It does not replace live acceptance:

  • go test ./..., go test -race ./..., go vet ./... and go tool mygo vet passed.
  • All 1,040 scene fixture checks passed; make snapshots exported the visual regression images.
  • Native macOS launch/capture and application packaging passed. Windows/Linux cross-compilation was recorded by the earlier baseline review; desktop execution on those platforms remains pending.
  • The documentation typecheck and production build passed. Go formatting and whitespace checks were clean.

Application limits ​

The following deliberate boundaries are visible in the application:

  • Connections use HTTPS. Remote text loads are bounded to 8 MiB, editable UTF-8 to 5 MiB; image decoding is bounded to 20 megapixels. Document and FLV previews offer external open/download. Unsupported codecs depend on the installed native media engine.
  • Metadata self-copy is limited to 1 GiB. Recursive plans stop at 100,000 unique keys. Server-side cross-bucket copying requires matching regions. Object mutation jobs remain session-only; file upload/download records survive reconnect.
  • OSS ETag preflight followed by deletion/replacement is not atomic. Avoid concurrent writes. Forbid-overwrite semantics differ on versioned buckets. Explicit replacement can create a new object version.
  • SMTP requires implicit TLS or STARTTLS. Secrets use memory or the OS credential store. RAM AccessKey secrets are displayed only when created in this dialog; existing secrets cannot be fetched from RAM.
  • Multi-object grants permit listing the common parent directory so the recipient can browse; read/write object actions remain restricted to the selected resources. Review the editable policy before granting.
  • Removed transfer records use tombstones so late worker completion cannot restore them. Removing a task retains resumable partials; multipart deletion is a separate confirmed operation.
  • An unsigned development build cannot install updates. mygo.json must receive a trusted publisher public key and update feed during signed release preparation; no trust key is invented by this implementation.

Scene ledger ​

“UI” below means the scene has a native state fixture in TestDesignV2Scenes; it does not mean the design interaction or visual layout is complete. Read affected rows together with the review follow-up. Service tests use injected HTTP responses; this is not cloud acceptance. Filenames without a directory below are relative to internal/app/. The original Chinese titles are retained so IDs can be compared directly with the source catalog.

SceneCatalog titleImplementationEvidence / external acceptance
P01连接 · AccessKeyconnection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P02连接 · 授权码connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P03所有 Bucketbrowser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04对象浏览与详情browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P05上传队列 · 完整状态transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
P06下载队列transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D01连接历史connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
D02退出连接确认connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
D03收藏管理browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
D04创建 Bucketbucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D05公开访问风险bucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D06Bucket 访问权限bucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D07删除空 Bucketbucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D08上传碎片管理bucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D09删除上传碎片bucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D10新建目录object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D11选择上传文件与目录internal/desktop, transfer_actions.go, internal/transfers/download_plan.goNative delegation; OS picker/reveal and cancellation acceptance pending
D12下载保存位置internal/desktop, transfer_actions.go, internal/transfers/download_plan.goNative delegation; OS picker/reveal and cancellation acceptance pending
D13文件与目录重命名object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D14跨桶批量粘贴确认object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D15复制移动进度transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D16同名覆盖确认object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D17批量删除确认object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D18对象访问权限object_actions.go, internal/ossclient/objects.goUI; property/ACL preservation tests; live updates pending
D19HTTP 头与元数据object_actions.go, internal/ossclient/objects.goUI; property/ACL preservation tests; live updates pending
D20创建软链接internal/ossclient/advanced.go, object_actions.goUI; symlink, scope and restore-state/request tests; live restoration pending
D21恢复归档对象internal/ossclient/advanced.go, object_actions.goUI; symlink, scope and restore-state/request tests; live restoration pending
D22批量恢复归档internal/ossclient/advanced.go, object_actions.goUI; symlink, scope and restore-state/request tests; live restoration pending
D23文本与代码编辑object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D24图片预览object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D25视频预览preview_media.goUI fallback; native player/codec and external-open acceptance pending
D26文档预览降级preview_media.goUI fallback; native player/codec and external-open acceptance pending
D27不支持的文件格式object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D28保存前差异对比object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D29归档预览检查internal/ossclient/advanced.go, object_actions.goUI; symlink, scope and restore-state/request tests; live restoration pending
D31私有对象签名地址internal/ossclient/share.go, object_actions.goUI; exact QR decode, URL encoding, ACL and signed scope tests; domain binding pending
D32邮件发送下载地址mail_tools.go, internal/mailUI; address/header/cancellation tests; real TLS delivery pending
D33简化 Policy 授权ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D34创建子用户并授权ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D35子用户授权结果ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D36设置 · 传输settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D37目录临时授权码ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D38RAM 用户管理ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D39编辑 RAM 用户资料ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D40删除 RAM 用户确认ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D41AccessKey 管理ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D42禁用 AccessKey 确认ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D43删除 AccessKey 确认ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D44移除未完成任务transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D45清空传输队列transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D46传输详情与错误诊断transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D47下载本地位置internal/desktop, transfer_actions.go, internal/transfers/download_plan.goNative delegation; OS picker/reveal and cancellation acceptance pending
D48SMTP 测试确认mail_tools.go, internal/mailUI; address/header/cancellation tests; real TLS delivery pending
D49诊断控制台settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D50关于与检查更新update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
D51版本发布说明update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
D52安装与重启确认update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
D53应用与系统菜单menu.go, commands()Native delegation; edit/window/app roles; platform menu acceptance pending
D54单实例窗口激活main.go, application.openWindowNative delegation; instance lock and activation; platform acceptance pending
D55外部帮助交接window.openDocs, desktop.OpenURLNative delegation; URL policy tests; browser handoff acceptance pending
P01-stsSTS 临时凭证connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P01-customize自定义 Endpointconnection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P01-cnameCNAME 自定义域连接connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P01-privateLinkPrivateLink 私网连接connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P01-invalid连接失败与保留输入connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P01-loading正在建立连接connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P02-expired授权码过期connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
P03-gridBucket 图标视图browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P03-empty没有 Bucketbrowser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P03-readonly临时只读会话browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-grid对象网格视图browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-search前缀搜索与无匹配browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-empty空目录browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-loading目录正在加载browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-offline网络中断与重试browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-forbidden无权读取当前目录browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-multi多选与批量操作browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-context对象右键菜单browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-large大列表与增量列举browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P04-clipboard复制移动待粘贴browser_view.go, browser_controls.go, saved_locations.goUI; paging/navigation tests; live OSS pending
P06-failed下载失败与恢复transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D01-clear清空连接历史确认connection_view.go, connection_actions.go, saved_locations.goUI; authorization, scope and connection tests; live login/keyring pending
D07-nonemptyBucket 非空删除失败bucket_tools.go, internal/ossclient/buckets.goUI; request/scope/pagination tests; live bucket acceptance pending
D15-partial复制移动部分失败transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D17-partial批量删除部分失败object_actions.go, object_clipboard.goUI; recursive plan and partial mutation tests; live mutations pending
D19-batch批量编辑元数据object_actions.go, internal/ossclient/objects.goUI; property/ACL preservation tests; live updates pending
D23-readonly只读代码预览object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D23-oversize文本超过预览上限object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D25-audio音频预览preview_media.goUI fallback; native player/codec and external-open acceptance pending
D25-flvFLV 视频预览preview_media.goUI fallback; native player/codec and external-open acceptance pending
D27-error预览加载失败object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests
D31-public公开对象地址internal/ossclient/share.go, object_actions.goUI; exact QR decode, URL encoding, ACL and signed scope tests; domain binding pending
D31-domain自定义域与二维码internal/ossclient/share.go, object_actions.goUI; exact QR decode, URL encoding, ACL and signed scope tests; domain binding pending
D33-group授权给用户组ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D33-role授权给角色ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D33-policyPolicy JSON 预览编辑ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D35-mailfailure授权成功但邮件失败ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D36-system设置 · 系统settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D36-mail设置 · 邮件settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D36-logs设置 · 日志settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D36-other设置 · 其他settings_controls.go, system_settings.go, internal/diagnosticsUI; settings validation and log rotation tests
D37-generated临时授权码已生成ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D38-forbiddenRAM 列表权限不足ram_tools.go, internal/identityUI; signed RPC, pagination, scope and code tests; live RAM/STS acceptance pending
D46-crcCRC 校验不匹配transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D46-changed源对象变更重新下载transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D46-disk本地写入失败诊断transfer_controls.go, internal/transfersUI; queue, recovery, checksum and path tests; live transfer acceptance pending
D50-downloading更新下载进度update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
D50-failed更新下载失败update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
D50-finished更新已就绪update.go, internal/releases, internal/updatesUI; release parsing tests; signed feed/install/restart acceptance pending
E03放弃未保存修改确认object_actions.go, preview_media.goUI; size/integrity, unchanged/diff and discard tests

Protocol references ​

OSS storage classes, requester pays, RestoreObject, and PutSymlink. The staged updater follows the manifest/signature format of the pinned MyGo v0.4.8 module; adapted code retains its MIT notice in internal/updates/LICENSE.

An independent rebuild of OSS Browser.