GameCreationApp 资源 kind 词汇表收敛为 Rust 单源并接上可注册留痕回调

- asset_kind.rs:新增声明宏,由一张 kind 表派生出枚举、线上值 as_str、ALL、严格解析与 ts-rs 绑定,仓库里不再有第二份 kind 列表。
- asset_kind.rs:from_str_lossy 改名 from_str_or_unknown 并去掉 trim / lowercase 归一,parse_with_context 只做严格等值匹配,认不出的原值不查别名、不迁移。
- asset_kind.rs:留痕改为可注册回调 set_non_canonical_asset_kind_reporter,把原始串与调用上下文交给壳层日志,未注册时静默。
- game_creation_app.rs:删除手写 GAME_CREATION_APP_CANONICAL_ASSET_KINDS 与 canonical_game_creation_app_asset_kind 别名表(含 font → document 特例),分类映射表按枚举成员穷举。
- shared-contracts/Cargo.toml:删除 kind-observability feature 与 tracing 依赖,留痕不再靠 tracing。
- api-server/editor_project.rs:图片编辑白名单注释改成「API 兼容面」,不再自称 kind 别名表。
This commit is contained in:
2026-09-17 15:43:51 +08:00
parent e6092dda6f
commit 6782d0ea23
7 changed files with 341 additions and 264 deletions
@@ -4112,13 +4112,11 @@ fn align_editor_image_edit_dimension(value: u32) -> u32 {
/// 图片快速编辑端点允许的**静态图**来源类型。
///
/// 口径依据 `packages/shared/src/contracts/gameCreationApp.ts` 的
/// `canonicalGameCreationAppAssetKind()`(等价实现见
/// `server-rs/crates/shared-contracts/src/game_creation_app.rs`):以「媒体类型为静态图
/// canonical 类型」为权威集合,并额外收下合法 legacy 类型本身(平台还有别的写入口按本地
/// manifest 原始类型登记来源资源,客户端不会先做 canonical 归一
/// `canonicalGameCreationAppAssetKind()` 对未知值回退 `image`,因此两个入口都放行的这些值
/// 在共享契约里语义等价,静态图集合对 canonical 归一封闭,不会漏放合法静态图来源。
/// 口径:以「媒体类型为静态图的 canonical 类型」为权威集合,并额外收下平台侧按本地
/// manifest 原始类型登记来源资源时会出现的等价写法。kind 词汇表本身以
/// `server-rs/crates/shared-contracts/src/game_creation_app/asset_kind.rs`
/// `GameCreationAppAssetKind` 为唯一真源(严格解析、无别名表),这里保持的是**对外 API 的
/// 兼容白名单**(按库原始值放行),不参与、也不代表客户端的 kind 归一规则
///
/// 必须与 `media_type == image` 一起构成 AND 门:视频、音频、序列帧等非静态媒体即使挂着
/// 图片类 assetKind 也照旧拒绝。
@@ -20762,8 +20760,8 @@ mod tests {
(Some("publication-material"), Some("image"), true),
(Some("ui-design"), Some("image"), true),
(Some("scene"), Some("image"), true),
// `canonicalGameCreationAppAssetKind()` 的合法输入:平台按本地 manifest 原始类型
// 登记来源资源时会出现这些 legacy 值,实测 `art-spritesheet` / `ui` 曾整片 400。
// 对外 API 兼容白名单里的平台原始写法:平台按本地 manifest 原始类型登记来源资源时
// 会出现这些值,实测 `art-spritesheet` / `ui` 曾整片 400。
(Some("art-spritesheet"), Some("image"), true),
(Some("art-spritesheet-slice"), Some("image"), true),
(Some("ui"), Some("image"), true),