决策背景
“预览台”代表用户核验角色动作和操控效果的一级产品能力,因此顶栏入口与 /playtest 路由需要保留。
但当前 /playtest 为了让用户选择角色造型,重新实现了一套跨项目资产浏览界面:
- 再次读取并展示项目、角色和造型。
- 与项目资产库承担了大量相同的浏览和选择职责。
- 页面需要维护独立的项目分区、造型卡、分页、加载态、空态和错误态。
- 为组装全局画廊产生了跨项目数据读取和请求扇出。
- 后续为了修复请求数量,又需要增加当前业务并不需要的跨项目角色接口。
这说明问题不只是请求实现方式,而是页面职责发生了重复:资产库已经负责“找到一个角色造型”,预览台不应再复制一套资产目录。
决策
保留“预览台”一级入口,但将 /playtest 从跨项目资产画廊重构为轻量的最近预览启动页。
项目资产库继续作为唯一的完整资产浏览和选择入口;预览台首页只负责:
- 继续最近打开过的角色造型。
- 前往项目资产库选择新的角色造型。
- 进入现有参数化预览工作台。
页面职责
| 页面 |
职责 |
/projects 与项目资产库 |
浏览项目、角色和造型,作为唯一完整资产选择入口 |
/playtest |
展示少量最近预览,帮助用户快速继续或选择新资产 |
/playtest/:characterId/:outfitId |
读取最新资产并实际核验动作、移动和帧播放 |
用户流程
或者:
顶栏预览台
→ 从项目资产中选择
→ 项目资产库
→ 角色详情选择造型
→ 实际预览工作台
Scope
预览台一级入口
- 保留顶栏“预览台”导航及
/playtest 路由。
/playtest 不再读取或展示完整项目、角色和造型目录。
- 页面不再包含跨项目画廊、项目分区或项目筛选。
- 页面提供明确的“从项目资产中选择”入口。
最近预览
- 最多展示最近 4 条成功打开过的角色造型。
- 最近记录按当前登录用户隔离,并按最近打开时间排序。
- 同一角色造型重复打开时只更新时间并移动到最前,不产生重复记录。
- 只有实际预览工作台成功读取角色和造型后,才写入最近记录。
- 最近记录只保存定位和展示所需的最小字段,不缓存完整 Character 数据。
- 点击最近记录继续进入现有
/playtest/:characterId/:outfitId。
- 实际预览页仍读取并验证最新资产,不直接信任本地记录。
- 记录指向已删除、不可访问或不可预览资产时,给出明确反馈并移除失效记录。
- 退出登录时清理或隔离最近记录,避免账号之间互相可见。
页面状态
- 有记录时突出“继续上次预览”,其余记录以紧凑列表或卡片展示。
- 无记录时说明需要先从项目资产中选择角色造型。
- 不把最近预览包装成完整历史记录;当前只提供本地快捷入口,不承诺跨设备同步。
- 页面继续使用登录产品的共享设计令牌和组件语言。
Architecture Boundary
- 不新增跨项目角色列表或 Playtest catalog 后端接口。
/playtest 首次挂载不调用项目列表或角色列表 API。
- 项目资产读取继续由现有项目资产库负责。
- 实际预览工作台继续使用真实 Character 和 Project 数据。
- 最近记录属于轻量客户端快捷状态,不成为新的业务资产或后端数据模型。
Out of Scope
- 不实现跨设备同步或完整预览历史。
- 不修改项目资产库的信息结构和读取方式。
- 不修改实际预览工作台的布局、动作切换、移动、帧播放和键盘输入。
- 不实现四向或八向能力。
- 不调整全局限流阈值。
- 不在本 Issue 中引入全局 TanStack Query 改造。
- 不涉及公开宣传页。
Acceptance Criteria
决策变更与相关工作
本 Issue 记录一次明确的产品决策转变:
Supersedes #304
Supersedes #314
Refs #313
Refs #315
决策背景
“预览台”代表用户核验角色动作和操控效果的一级产品能力,因此顶栏入口与
/playtest路由需要保留。但当前
/playtest为了让用户选择角色造型,重新实现了一套跨项目资产浏览界面:这说明问题不只是请求实现方式,而是页面职责发生了重复:资产库已经负责“找到一个角色造型”,预览台不应再复制一套资产目录。
决策
保留“预览台”一级入口,但将
/playtest从跨项目资产画廊重构为轻量的最近预览启动页。项目资产库继续作为唯一的完整资产浏览和选择入口;预览台首页只负责:
页面职责
/projects与项目资产库/playtest/playtest/:characterId/:outfitId用户流程
或者:
Scope
预览台一级入口
/playtest路由。/playtest不再读取或展示完整项目、角色和造型目录。最近预览
/playtest/:characterId/:outfitId。页面状态
Architecture Boundary
/playtest首次挂载不调用项目列表或角色列表 API。Out of Scope
Acceptance Criteria
/playtest首次加载不调用项目列表或角色列表 API。/playtest前往项目资产库选择新的角色造型。/playtest不再产生逐项目角色请求扇出。决策变更与相关工作
本 Issue 记录一次明确的产品决策转变:
Supersedes #304
Supersedes #314
Refs #313
Refs #315