保存标注前预检陈旧id
- dirty 标注保存前拉取后端标注 id 列表,已缺失的本地旧 annotationId 直接重新创建 - 保留 PATCH 404 兜底,覆盖预检后并发删除的情况 - 扩充分割工作区测试,区分预检缺失和 PATCH 后缺失两条路径 - 同步更新接口契约、需求冻结、设计冻结、测试计划和 AGENTS 说明
This commit is contained in:
@@ -156,7 +156,7 @@
|
||||
19. AI 画布根据容器和当前帧尺寸按 86% 适配比例计算初始 scale/position,使底图默认居中且尽量大,但保留画布边距。
|
||||
20. Canvas 按当前帧过滤并渲染 mask。
|
||||
21. 新 mask 会带上当前选择的模板分类元数据,包括 `classId`、`className`、`classZIndex`、`metadata.source=ai_segmentation` 和保存状态 `draft`。
|
||||
20. 顶栏保存状态按钮按当前项目待保存数量显示为“保存 X 个改动”或“已全部保存”;用户点击保存后,前端将像素 `segmentation` 转成 normalized `mask_data.polygons`;未保存 mask 调用 `POST /api/ai/annotate`,dirty mask 调用 `PATCH /api/ai/annotations/{annotation_id}`;如果 dirty mask 的后端标注已被其它操作删除导致 `PATCH` 返回 404,保存链路会保留同一 `mask_data`、几何、分类和传播 lineage metadata,改用 `POST /api/ai/annotate` 重新创建,并在随后回显时排除本地旧 mask id;保存成功后本次提交的 draft mask id 会从本地保留列表中排除,并由后端 saved annotation 回显替换。
|
||||
20. 顶栏保存状态按钮按当前项目待保存数量显示为“保存 X 个改动”或“已全部保存”;用户点击保存后,前端将像素 `segmentation` 转成 normalized `mask_data.polygons`;未保存 mask 调用 `POST /api/ai/annotate`,dirty mask 会先读取当前后端标注 id 列表,已知存在的 id 调用 `PATCH /api/ai/annotations/{annotation_id}`,已知缺失的本地旧 id 直接保留同一 `mask_data`、几何、分类和传播 lineage metadata 改用 `POST /api/ai/annotate` 重新创建;如果预检后发生并发删除导致 `PATCH` 返回 404,也会降级为重新创建,并在随后回显时排除本地旧 mask id;保存成功后本次提交的 draft mask id 会从本地保留列表中排除,并由后端 saved annotation 回显替换。
|
||||
21. 工作区加载项目帧后通过 `GET /api/ai/annotations` 取回已保存标注并转成前端 mask。
|
||||
22. 工作区“清空遮罩”可从画布右下角或左侧工具栏触发;删除当前帧已保存标注、清除当前帧本地 mask,并通过传播 lineage 同步清空这些 mask 的自动传播结果,不删除其它帧独立 AI 推理或人工 mask。
|
||||
|
||||
|
||||
Reference in New Issue
Block a user