Files
open-design/docs/testing/amr-auth-sync-rules.zh-CN.md
f1a0b60c6c chore: unify product name display to OpenDesign repo-wide (#6998)
* chore: unify product name display to OpenDesign repo-wide

Rename the user-facing product name from "Open Design" to "OpenDesign"
across documentation, web/desktop UI strings, i18n locales, prompts,
plugin/skill/design-system content, changelogs, and specs, matching the
landing-page rename already in flight.

Deliberately excluded so installed-app identity stays untouched:
- packages/release PRODUCT_NAME and everything derived from it
  (app bundle names, installer/registry identity, updater feeds)
- tools/pack, tools/release, apps/packaged, landing page (PR #6983)
- mocks/ recorded traces and LICENSE
- test fixtures and comments that encode real on-disk install paths
  (Open Design.app, Program Files\Open Design, AppData paths)

Validated with pnpm guard, pnpm typecheck, and targeted web/desktop/host
test runs over the renamed strings.

* fix(web): keep two-letter author monogram for CamelCase brand names

authorInitials split words on whitespace only, so the renamed single-token
author name "OpenDesign" produced a one-letter monogram. Treat lower-to-upper
CamelCase boundaries as word breaks so the avatar fallback stays "OD".

* fix(release): restore spaced Windows source artifact names in win.ps1

tools/pack still derives builder outputs from the unchanged PRODUCT_NAME
("Open Design"), so the asset script must look for the spaced filenames.
Matches the mac/mac-intel/linux asset scripts, which were already kept on
the original names.

---------

Co-authored-by: Joey <236967869+joeylee12629-star@users.noreply.github.com>
2026-08-18 07:09:45 +00:00

3.7 KiB

AMR 登录同步规则

目的

本文档用于对齐 OpenDesign 与 Vela 网页钱包 在以下场景中的状态预期:

  • 登录
  • 登出
  • 网页端切换账号
  • 状态收敛

目标不是追求“强实时双向同步”,而是保证:

  • 用户感知稳定
  • 不静默串号
  • 不静默恢复错误账号
  • 后续状态能正确收敛

两层状态

AMR 当前有两层相互独立、但会互相影响的状态:

  1. OpenDesign 客户端本地登录态
  • 以本地 ~/.vela/config.json 和当前 AMR profile 的有效登录信息为准
  • 这是 OpenDesign 判断“当前能不能用 AMR”的主依据
  1. Vela 网页钱包登录态
  • 以浏览器中的网页 session / cookie 为准
  • 这是钱包页判断“当前能不能看余额、充值、退出登录”的主依据

这两层状态允许短暂不一致,但后续必须正确收敛。

核心规则

1. OpenDesign 内点击 Sign in

  • OpenDesign 调用本地登录流程
  • Vela CLI 拉起网页登录/授权
  • 用户在网页完成授权后,OpenDesign 通过状态轮询收敛成已登录

预期:

  • OpenDesign 不直接假设网页已成功登录
  • 只有本地状态真正可用后,才显示为已登录

2. OpenDesign 内点击 Sign out

  • 优先清理 OpenDesign 本地 AMR 登录态
  • OpenDesign 立即显示为未登录
  • 不要求浏览器中的 Vela 网页钱包会话同步退出

预期:

  • 本地登出应立即生效
  • 即使网页还保持登录,OpenDesign 也不能自动恢复成已登录

3. Vela 网页端点击“退出登录”

  • 优先清理 网页钱包会话
  • 不要求 OpenDesign 必须实时收到退出事件

预期:

  • OpenDesign 可以短暂仍显示旧状态
  • 但在后续刷新状态、打开 Settings、发起 AMR 请求时,必须收敛成“需要重新登录”或明确权限错误

4. 网页端手动切换账号

  • 如果用户在钱包页从账号 A 切到账号 B
  • OpenDesign 默认仍保持本地账号 A

预期:

  • 网页切账号,不应自动切客户端账号
  • 只有用户在 OpenDesign 内再次显式 Sign in 并完成网页登录后,客户端才正式切到账号 B

5. 状态收敛优先于强实时同步

推荐采用:

  • “本地状态先准”
  • “网页状态独立变化”
  • “在关键节点重新校验并收敛”

关键节点包括:

  • 打开 Settings
  • 打开 onboarding
  • 打开钱包入口
  • 发起一次 AMR chat run
  • 用户主动刷新状态

不允许发生的行为

  • 网页端切账号后,OpenDesign 静默切到新账号
  • OpenDesign 本地已登出,但因为网页还登录着而自动恢复已登录
  • 钱包页已退出登录,但 OpenDesign 长期假装仍可正常使用 AMR
  • A 账号网页状态污染到 B 账号客户端身份、余额文案或聊天身份

推荐实现策略

基础版

  • OpenDesign 的 Sign out 只清本地状态
  • 网页端退出登录后,OpenDesign 在后续关键动作中重新校验并收敛

增强版

  • 钱包页退出登录或切账号时,尝试通过 bridge / callback / postMessage 通知 OpenDesign
  • OpenDesign 收到事件后主动刷新 AMR 状态
  • 即使事件丢失,仍由“后续关键动作重新校验”兜底

测试重点

最关键的验证点有 6 个:

  1. OpenDesign 本地 Sign out 后立即变未登录
  2. 网页端退出登录后,OpenDesign 后续能正确收敛
  3. 网页端切账号后,OpenDesign 默认保持旧账号
  4. 只有显式重新登录后,OpenDesign 才切到新账号
  5. 弱网、多 tab、旧网页会话残留时不串号
  6. 余额、钱包入口、聊天身份不会跨账号污染

对应测试文档

完整功能回归用例见: