图生 3D 的引用预检改为按归类信号收敛,不再拿状态码猜
- api-server:`resolve_editor_reference_record_by_id_for_owner` 拆出 `..._classified` 版本,失败带「引用不可用 / 其它」归类;原函数保持逐字段一致的对外行为(其它调用方不受影响) - api-server tripo3d/image_source.rs:注入的解析闭包改为返回归类后的失败,只对 `Unavailable` 收敛成「图片输入必须是当前账号已登记的画布资源或素材」,400 / 404 里的 runtime 与通用过程错误原样上报;模块注释同步 - 用例:`image_source_resolution_only_collapses_unavailable_references` 改成「Unavailable 收敛、400/404/403/409/5xx 一律保留原错」 - docs/project-memory:pitfalls 新增「4xx 不等于用户输入错」一条,记下这条口径与新增模块文案时要同步的清单
This commit is contained in:
@@ -1,5 +1,14 @@
|
||||
# 踩坑与排障记录
|
||||
|
||||
## 4xx 不等于「用户输入错」:服务端没配好不能说成参数写错
|
||||
|
||||
- **现象**:Tripo 返回 401 / 403 时客户端看到「请检查参数后重试」;落点预检把「当前 identity 无权调用模型生成运行时服务」(403)与「模型定价服务身份尚未初始化」(400)都说成「生成结果的落点必须是当前账号已存在的画布项目或素材库文件夹」;图生 3D 把这两档也收敛成「图片输入必须是当前账号已登记的画布资源或素材」。
|
||||
- **成因**:两处都在错误的粒度上判断——provider 错误只看状态码区间(4xx → 400),定点预检只看 `is_client_error()` / 只看 400 与 404。这个区间里混着「密钥没配好」「找不到」「冲突」和「真的是参数写错」,按区间归类必然把服务端配置故障说成用户操作错误。
|
||||
- **处理(现行口径)**:`tripo3d/errors.rs` 给 401/403、404、409 与其余 4xx 各写一条分支(只有 400 / 422 是 `tripo-api-rejected`);定点查询(引用 / 落点)先经 `classify_editor_point_lookup_failure` 归类,只有「目标不存在 / 不属于当前账号」的固定文案才是 `Unavailable`,调用方也只对 `Unavailable` 改写成自己的文案。
|
||||
- **易错点**:不要再写「4xx 一律转 400」,也不要按「是不是 4xx」判断引用 / 落点不可用;模块新增或改写这类文案时要同步 `EDITOR_POINT_LOOKUP_UNAVAILABLE_MARKERS`,否则要么把新故障误报成用户问题,要么把用户侧的不可用变成 5xx。
|
||||
- **验证**:`cargo test --locked -p api-server -- tripo3d::errors tripo3d::target tripo3d::image_source editor_point_lookup`。
|
||||
- **关联**:`server-rs/crates/api-server/src/editor_project.rs`、`tripo3d/{errors.rs,target.rs,image_source.rs}`。
|
||||
|
||||
## 隐藏滚动条的横向滚动容器不等于「放得下」
|
||||
|
||||
- **现象**:桌面端画布底部工具栏尾部几个工具(含「生成 3D 模型」入口)看不到,用户反馈成「工具栏变成横向可滚动的了」「是不是限宽了」。
|
||||
|
||||
Reference in New Issue
Block a user