问题
PR #96 提出了一套完整的核验台,除了播放,还包含跨项目的可播放内容汇总、造型与动作的改名删除、逐帧质量证据分析、人工问题记录,以及把核验结论存回后端。这些功能本身是需要的,但那个 PR 现在合不进来。
它的基线停在 7ee5a98,早于 #117 与 #119。这两个 PR 已于 08-05 合入 main,其中 #117 落地了 shared/api 的通用传输层,#119 重写了 entities/character 并落地项目中心与资产库。#96 自带一份 shared/api/http-client.ts 和一份 entities/character/api.ts,与主干上的实现属于同一层的两套写法,当前状态为 CONFLICTING。
除基线之外还有两处需要先解决。一是 app.tsx 中构造 createCharacterApis()、createProjectApis()、createPlaytestInspectionApis() 后以 props 注入页面,与 frontend-architecture-v3.md 第 2 节「app 只做启动和路由,不构造服务、不向下注入」相反,这一条在 08-03 评审 #90 时已经提出。二是新增的 entities/playtest-inspection 定义了 status: 'passed' | 'issues_found' 与 save 写操作,而 main 上 features/review/index.ts 的注释写明「服务端不返回质检结论,产品上也不设『打回此帧』」,API_CONTRACT.md 中也没有对应端点。
#131 已经把最短的那条链路接上:读已确认的角色资产,按帧播放,用键盘操控。本 issue 承接 #96 承诺的其余部分,在现有主干上重做。
待定的前置决策
质检结论存不存、存在哪,目前有两份互相矛盾的成文结论。这件事定不下来,本 issue 的审核与结论保存部分无法开工。
需要与后端和导师确认三点:核验结论是前端本地状态还是服务端资产的一部分;如果入库,落在 Character 的资产树里还是单独一张表;「发现问题」记录下来之后,谁来消费它——是导出前的闸门,还是仅供用户自己参考。
结论出来之前,本 issue 先做不依赖它的那部分(见下),审核面板与结论保存留到决策之后。
范围
内容汇总与切换
/playtest 作为工作台入口,自动定位到第一个可播放的动作。
- 左栏汇总当前项目下全部可播放的造型与动作,用缩略图、动作名、造型名和角色 ID 区分默认命名的内容。
- 过滤空造型、零帧动作,以及最终没有可播放内容的角色。
- 在左栏内切换造型与动作,不重新进入页面。
播放控制
- 时间线与逐帧步进,暂停状态下可定位到任意一帧。
- 播放速度与循环开关跟随 Action 的
fps 与 loop,用户可临时覆盖,覆盖不写回资产。
质量证据
- 逐帧的图片几何、透明边界、序列位移、root motion 与关键帧分析。
- 证据只读取帧图片本身,在前端算出,不请求后端,也不写回 Character。
- 当前帧图片未成功加载时,界面要说明证据不可用,而不是给出一个算错的数。
资产维护入口
- 造型与动作的改名、删除,这两项是明确的用户意图,允许写后端。
- 从核验台进入 Quick Start 为当前角色补动作。
不在范围
验收标准
- 从
/playtest 进入能自动落到一个可播放的动作,没有可播放内容时给出明确的空状态。
- 左栏能区分两个都叫「默认造型」的角色。
- 切换造型或动作时播放状态重置,不残留上一个动作的帧序。
- 逐帧步进后的当前帧与时间线显示一致,与
Frame.index 一致。
- 质量证据在图片加载失败时显示不可用,不显示数值。
- 改名与删除之外,页面不产生任何写操作。
- 页面不导入
features,不绕过 @/entities,不由 app 层注入服务。
format:check、lint、typecheck、test、build 全部通过。
本 issue 承接 #96 的功能范围,不承接它的实现。可以从那个分支取用的是 workbench/analysis/ 下的证据分析与对应测试,那部分逻辑不依赖过期的传输层;页面组装、app 层注入和 entities/playtest-inspection 需要按现在的主干重做。
#96 处置方式另行讨论,本 issue 不代为关闭。
Related
问题
PR #96 提出了一套完整的核验台,除了播放,还包含跨项目的可播放内容汇总、造型与动作的改名删除、逐帧质量证据分析、人工问题记录,以及把核验结论存回后端。这些功能本身是需要的,但那个 PR 现在合不进来。
它的基线停在
7ee5a98,早于 #117 与 #119。这两个 PR 已于 08-05 合入main,其中 #117 落地了shared/api的通用传输层,#119 重写了entities/character并落地项目中心与资产库。#96 自带一份shared/api/http-client.ts和一份entities/character/api.ts,与主干上的实现属于同一层的两套写法,当前状态为 CONFLICTING。除基线之外还有两处需要先解决。一是
app.tsx中构造createCharacterApis()、createProjectApis()、createPlaytestInspectionApis()后以 props 注入页面,与frontend-architecture-v3.md第 2 节「app只做启动和路由,不构造服务、不向下注入」相反,这一条在 08-03 评审 #90 时已经提出。二是新增的entities/playtest-inspection定义了status: 'passed' | 'issues_found'与save写操作,而main上features/review/index.ts的注释写明「服务端不返回质检结论,产品上也不设『打回此帧』」,API_CONTRACT.md中也没有对应端点。#131 已经把最短的那条链路接上:读已确认的角色资产,按帧播放,用键盘操控。本 issue 承接 #96 承诺的其余部分,在现有主干上重做。
待定的前置决策
质检结论存不存、存在哪,目前有两份互相矛盾的成文结论。这件事定不下来,本 issue 的审核与结论保存部分无法开工。
需要与后端和导师确认三点:核验结论是前端本地状态还是服务端资产的一部分;如果入库,落在 Character 的资产树里还是单独一张表;「发现问题」记录下来之后,谁来消费它——是导出前的闸门,还是仅供用户自己参考。
结论出来之前,本 issue 先做不依赖它的那部分(见下),审核面板与结论保存留到决策之后。
范围
内容汇总与切换
/playtest作为工作台入口,自动定位到第一个可播放的动作。播放控制
fps与loop,用户可临时覆盖,覆盖不写回资产。质量证据
资产维护入口
不在范围
验收标准
/playtest进入能自动落到一个可播放的动作,没有可播放内容时给出明确的空状态。Frame.index一致。features,不绕过@/entities,不由app层注入服务。format:check、lint、typecheck、test、build全部通过。与 #96 的关系
本 issue 承接 #96 的功能范围,不承接它的实现。可以从那个分支取用的是
workbench/analysis/下的证据分析与对应测试,那部分逻辑不依赖过期的传输层;页面组装、app层注入和entities/playtest-inspection需要按现在的主干重做。#96 处置方式另行讨论,本 issue 不代为关闭。
Related