Skip to content

feat: 在现有主干上重做核验台的质检与内容汇总能力(承接 #96) #132

Description

@huyanxius

问题

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 写操作,而 mainfeatures/review/index.ts 的注释写明「服务端不返回质检结论,产品上也不设『打回此帧』」,API_CONTRACT.md 中也没有对应端点。

#131 已经把最短的那条链路接上:读已确认的角色资产,按帧播放,用键盘操控。本 issue 承接 #96 承诺的其余部分,在现有主干上重做。

待定的前置决策

质检结论存不存、存在哪,目前有两份互相矛盾的成文结论。这件事定不下来,本 issue 的审核与结论保存部分无法开工。

需要与后端和导师确认三点:核验结论是前端本地状态还是服务端资产的一部分;如果入库,落在 Character 的资产树里还是单独一张表;「发现问题」记录下来之后,谁来消费它——是导出前的闸门,还是仅供用户自己参考。

结论出来之前,本 issue 先做不依赖它的那部分(见下),审核面板与结论保存留到决策之后。

范围

内容汇总与切换

  • /playtest 作为工作台入口,自动定位到第一个可播放的动作。
  • 左栏汇总当前项目下全部可播放的造型与动作,用缩略图、动作名、造型名和角色 ID 区分默认命名的内容。
  • 过滤空造型、零帧动作,以及最终没有可播放内容的角色。
  • 在左栏内切换造型与动作,不重新进入页面。

播放控制

  • 时间线与逐帧步进,暂停状态下可定位到任意一帧。
  • 播放速度与循环开关跟随 Action 的 fpsloop,用户可临时覆盖,覆盖不写回资产。

质量证据

  • 逐帧的图片几何、透明边界、序列位移、root motion 与关键帧分析。
  • 证据只读取帧图片本身,在前端算出,不请求后端,也不写回 Character。
  • 当前帧图片未成功加载时,界面要说明证据不可用,而不是给出一个算错的数。

资产维护入口

  • 造型与动作的改名、删除,这两项是明确的用户意图,允许写后端。
  • 从核验台进入 Quick Start 为当前角色补动作。

不在范围

验收标准

  • /playtest 进入能自动落到一个可播放的动作,没有可播放内容时给出明确的空状态。
  • 左栏能区分两个都叫「默认造型」的角色。
  • 切换造型或动作时播放状态重置,不残留上一个动作的帧序。
  • 逐帧步进后的当前帧与时间线显示一致,与 Frame.index 一致。
  • 质量证据在图片加载失败时显示不可用,不显示数值。
  • 改名与删除之外,页面不产生任何写操作。
  • 页面不导入 features,不绕过 @/entities,不由 app 层注入服务。
  • format:checklinttypechecktestbuild 全部通过。

#96 的关系

本 issue 承接 #96 的功能范围,不承接它的实现。可以从那个分支取用的是 workbench/analysis/ 下的证据分析与对应测试,那部分逻辑不依赖过期的传输层;页面组装、app 层注入和 entities/playtest-inspection 需要按现在的主干重做。

#96 处置方式另行讨论,本 issue 不代为关闭。

Related

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions