-
Extends the 跳舞直播间 (dance room) system to one independent live room per character, with an operator playback-management/blacklist layer (T39), a "我的作品" page for paid users (T38), a standalone 人衣图生成 admin tool, and a new admin-dance-library.html page for curating the per-character dance clip pool with AI QC. On top of that, dance clips now have an explicit published (上架/下架) status: passing AI QC (or a manual admin override to "correct") auto- publishes a clip, failing it auto-unpublishes it, and only published clips are eligible for a room's random-fill pool — unreviewed/rejected clips stay in the library but no longer autoplay for viewers. Existing already-QC'd "correct" clips are backfilled to published on first boot so the room doesn't go quiet. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MvkJsRcQ2qEuaFea31rBY8
-
需求文档 7.4 节's stated floor: an expired user_paid character (T36) or its videos must stay individually retrievable by their owner — "下线=不再出现在公开直播间和其他人的衣柜/随机池里",不是"下线=消失". GET /api/dance/my-works (login required, no emailVerified gate — this reads your own past purchases, doesn't spend anything) returns the requesting user's own characters/garments (ownerUserId match) each joined with their generated videos from library.json. New standalone page my-works.html (matches live.css's visual language) renders two sections with inline video players (same preload="none" pattern as admin.html), a status badge (播放中/已下线 for characters, 衣柜中/已下架 for garments), and a login gate for logged-out visitors — reusing GET /api/dance/my-works's 401 rather than duplicating dance.html's auth modal in a second page. Linked from dance.html's header once logged in. my-works.test.js: 401 without a session; a real user who uploaded one garment (T27) and one 1-segment character (T35, deliberately expired by test time) sees both with their videos still attached; a second, unrelated user sees neither. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011DUiYs6UjxDMkfvnjtsKFo