HEL-872: 修复素材库删除并说明保留原因 #21

Manually merged
leefer merged 0 commits from agent/2/c3a0e79ab52a into leefer/hel-731-studio-project 2026-10-26 21:51:54 +08:00
Owner

修复内容(HEL-872 素材库无法删除素材)

根因(实证)

  • 只读核查测试站(192.168.200.15:8080,GET/空paths探测,未对线上素材发DELETE):线上即当前头版本(后台 1.5.8,前端含现行文案);素材库 44 项中仅 1 项(最新生成的视频「美女扭胯 · H3 加速版」)被画布卡片引用,0 项被项目数据引用。
  • 机制差异:GET /api/library/media 只排除项目数据引用,而 DELETE 额外保留"仍在画布卡片上"的文件;每个 playground 生成物都会被前端物化为画布卡片(materializeJobArtifact),因此用户新生成的素材在素材库可见却删不掉。
  • 修复前 UI 把所有保留原因合并成一句「被项目使用或无法删除」——对画布引用是错误解释,用户感知即「素材库无法删除素材」。
  • 仍未知:用户当时具体点了哪些文件、线上是否存在文件系统权限失败(只读无法证明),不作断言。

改动

  • calliope-backend/src/calliope/routers/library.py:删除保留原因拆分为 referenced(项目数据)与新增 on_canvas(画布卡片);保护逻辑、路径/越界/符号链接检查不变。
  • calliope-web/src/routes/library/+page.svelte:按原因分类汇总保留数(如「保留 1 个:仍在画布中使用 1;画布中的素材请先删除对应卡片」);0 删除时明确报「未能删除 N 个文件」;失败提示改用可读的 detail 并保持弹层可重试;确认弹层文案补画布说明。
  • 不改共享 Modal/API/路径函数、不动创作台预览与画布业务、无新依赖。

自测

  • 后端:tests/test_asset_library.py 9 项(新增 on_canvas 判定与混合批次 2 项)+ canvas/playground 相关 33 项,共 42 通过;Ruff 对改动文件无新增告警。
  • 前端:svelte-check 0 错 0 警、prettier/eslint 通过、npm run test 通过、build 成功。
  • 隔离端到端(真实页面,Playwright + 隔离后端/自建媒体):修复前 7 项复现缺陷;修复后 25 项通过——单项真删(磁盘消失、刷新不复活)、取消不变、画布保留原因准确、混合批次部分成功、失败可读可重试。
## 修复内容(HEL-872 素材库无法删除素材) ### 根因(实证) - 只读核查测试站(192.168.200.15:8080,GET/空paths探测,未对线上素材发DELETE):线上即当前头版本(后台 1.5.8,前端含现行文案);素材库 44 项中仅 1 项(最新生成的视频「美女扭胯 · H3 加速版」)被画布卡片引用,0 项被项目数据引用。 - 机制差异:`GET /api/library/media` 只排除项目数据引用,而 `DELETE` 额外保留"仍在画布卡片上"的文件;每个 playground 生成物都会被前端物化为画布卡片(`materializeJobArtifact`),因此用户新生成的素材在素材库可见却删不掉。 - 修复前 UI 把所有保留原因合并成一句「被项目使用或无法删除」——对画布引用是错误解释,用户感知即「素材库无法删除素材」。 - 仍未知:用户当时具体点了哪些文件、线上是否存在文件系统权限失败(只读无法证明),不作断言。 ### 改动 - `calliope-backend/src/calliope/routers/library.py`:删除保留原因拆分为 `referenced`(项目数据)与新增 `on_canvas`(画布卡片);保护逻辑、路径/越界/符号链接检查不变。 - `calliope-web/src/routes/library/+page.svelte`:按原因分类汇总保留数(如「保留 1 个:仍在画布中使用 1;画布中的素材请先删除对应卡片」);0 删除时明确报「未能删除 N 个文件」;失败提示改用可读的 detail 并保持弹层可重试;确认弹层文案补画布说明。 - 不改共享 Modal/API/路径函数、不动创作台预览与画布业务、无新依赖。 ### 自测 - 后端:`tests/test_asset_library.py` 9 项(新增 on_canvas 判定与混合批次 2 项)+ canvas/playground 相关 33 项,共 42 通过;Ruff 对改动文件无新增告警。 - 前端:svelte-check 0 错 0 警、prettier/eslint 通过、`npm run test` 通过、build 成功。 - 隔离端到端(真实页面,Playwright + 隔离后端/自建媒体):修复前 7 项复现缺陷;修复后 25 项通过——单项真删(磁盘消失、刷新不复活)、取消不变、画布保留原因准确、混合批次部分成功、失败可读可重试。
leefer added 1 commit 2026-10-26 20:52:20 +08:00
List only excludes project-data refs, but delete also kept canvas-card
files with the same 'referenced' reason the UI merged into 被项目使用或
无法删除 — every fresh playground output (materialized as a canvas card)
looked undeletable from 素材库 with a wrong explanation.

Backend: split the kept reason into referenced (project data) vs
on_canvas (live canvas card); protections unchanged.
Frontend: per-reason kept summary with counts and an actionable hint,
error toast names failure and stays retryable, readable API error text.
E2E: isolated real-page regression (cancel/single/batch/retry) +
backend tests for the on_canvas reason.

Co-authored-by: multica-agent <github@multica.ai>
leefer manually merged commit 2ad5d33c72 into leefer/hel-731-studio-project 2026-10-26 21:51:54 +08:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: leefer/aigc-home#21