保存标注前预检陈旧id

- dirty 标注保存前拉取后端标注 id 列表,已缺失的本地旧 annotationId 直接重新创建

- 保留 PATCH 404 兜底,覆盖预检后并发删除的情况

- 扩充分割工作区测试,区分预检缺失和 PATCH 后缺失两条路径

- 同步更新接口契约、需求冻结、设计冻结、测试计划和 AGENTS 说明
This commit is contained in:
2026-05-03 19:29:36 +08:00
parent 0ba5a8c094
commit 3e998b9d6b
7 changed files with 93 additions and 12 deletions

View File

@@ -148,7 +148,7 @@
- 后端提供 `PATCH /api/ai/annotations/{annotation_id}` 更新已保存标注的 `mask_data``points``bbox``template_id`
- 后端提供 `DELETE /api/ai/annotations/{annotation_id}` 删除已保存标注。
- 当前前端保存状态按钮会保存当前项目未保存 mask并会更新已标记为 dirty 的已保存 mask。
- 如果 dirty mask 携带的本地旧 `annotationId` 在后端已经不存在,前端保存链路必须`PATCH` 返回 404 后用同一几何和 metadata 重新 `POST` 创建标注,并重新拉取后端标注替换本地旧 id点击“开始传播”前的参考帧保存也必须复用该容错逻辑不能因陈旧 id 中断传播。
- 如果 dirty mask 携带的本地旧 `annotationId` 在后端已经不存在,前端保存链路必须先用当前后端标注列表做存在性预检,已知缺失的 id 直接用同一几何和 metadata 重新 `POST` 创建标注;如果预检后发生并发删除导致 `PATCH` 返回 404也必须降级为重新创建,并重新拉取后端标注替换本地旧 id点击“开始传播”前的参考帧保存也必须复用该容错逻辑不能因陈旧 id 中断传播。
- 保存成功后,前端会重新拉取后端标注,并用后端 saved annotation 替换本次提交的 draft mask未提交的其他 draft mask 仍保留。
- 工作区“清空遮罩”可从画布右下角或左侧工具栏触发;它会删除当前帧已保存标注、清空当前帧未保存 mask并同步清空这些 mask 同传播链上的自动传播结果,但不能删除其它帧独立 AI 推理或人工标注 mask。
- 工作区加载项目帧后会查询已保存标注并回显。