Files
ttstd-infinite-canvas/docs/content/docs/progress/pending-test.mdx

606 lines
70 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
title: 待测试
description: 影策已实现功能的手工验证清单与未确认边界
---
# 待测试
## 服务升级运行基础
- 完整架构、状态机、Release 清单、备份和回退边界见 `docs/design/dynamic-update.md`。
- [x] 后端新增权威 BuildInfo、`schema_migrations`、独立 `migrate-schema` 命令、分层健康检查以及可停止 Worker;专项 Go 测试通过。
- [x] 生产 Compose 在 Backend 前运行一次性迁移服务,并使用 `CANVAS_AUTO_MIGRATE=false` 阻止业务进程隐式修改 Schema;Backend 收到 SIGTERM 后进入 drain、停止领取任务并等待活动任务。
- [ ] 使用 PostgreSQL 部署执行一次无迁移启动和一次跨版本迁移,确认 migrate 成功后 Backend 才启动,checksum 漂移和高版本 Schema 均会阻止旧 Backend 就绪。
- [ ] 在存在图片、视频和文本长任务时发送 SIGTERM,确认 readiness 立即返回 503、新任务被拒绝、已领取任务在宽限期内完成,超时后租约可由重启实例恢复。
- [ ] 构建带版本参数的前后端镜像,确认 `/api/system/version`、管理后台版本、OCI Commit 和 Release Tag 一致。
## 素材库网格密度
- [x] 素材库桌面端缩小卡片并改为每行 6 张;新增素材占首格,默认每页 35 项,可切换 70/105 项,首屏正好组成 6×6 完整网格;中窄屏按 4/3/1 列收敛,前端生产构建通过。
- [ ] 在 1280px、1440px、1920px 与窄屏下检查图片、视频、音频、文本、模型和新增素材卡片,确认标题、徽标、批量选择和操作菜单不拥挤或溢出。
## 短剧长篇项目分页读取
- [x] 短剧工作台已拆分项目核心、制作概览、章节摘要、当前章节生产包、画布分页、资产分页和候选分页接口;章节列表不返回正文,当前章节生产包不返回其他章节镜头和产物。
- [x] 资产库按目录/分类分页,候选角色单独分页;分镜工作台资产栏服务端分页,当前章节响应只携带镜头已绑定资产;项目设置仅在打开主图选择器时读取图片资产。
- [x] 新增章节、镜头、章节产物、画布、项目目录资产、候选资产和项目任务组合索引;后端聚合/隔离/分页专项测试与前端生产构建通过。
- [ ] 导入至少 1000 章、每章 10 个镜头的测试项目,分别打开概览、章节、分镜、画布、资产和设置页,确认首屏请求不再出现整项目详情响应,切章只读取目标章节生产包。
- [ ] 在浏览器网络面板记录上述页面的响应体积、请求耗时和内存占用;连续切换 30 个章节、翻阅 10 页画布和资产,确认 React Query 缓存及 DOM 数量没有持续异常增长。
- [ ] 在资产超过 80 项、角色候选超过 24 项、画布超过 40 张时验证分页、分类、目录、候选确认、镜头资产绑定和主图选择;确认新增、移动、删除、确认后总数与当前页自动刷新。
- [ ] 使用 SQLite 与 PostgreSQL 各执行一次大项目冒烟,确认新增组合索引成功创建,概览聚合、章节隔离和分页顺序一致。
## 多文件技能包库
- [x] 后端新增技能版本与文件索引,支持单个 Markdown、ZIP 和公开 GitHub 仓库安装;ZIP 路径越界、软链接、重复路径、文件数、单文件大小和总解压大小均在写入前校验,后端全量测试通过。
- [x] 技能详情改为约 82vw × 82vh 的弹窗,左侧支持多层文件树,右侧支持 Markdown 预览、源码、代码/文本及媒体文件查看;前端生产构建通过。
- [x] 在线 Agent 只在系统上下文保留技能元数据,并通过入口、文件清单、单文件读取和搜索工具渐进式加载;本机 Agent 只把用户本轮显式提及的完整技能包写入临时目录,321 项 Agent 测试与 TypeScript 构建通过。
- [x] 新增统一 Skill Runtime:画布、创作页和短剧工作台共用同一技能选择、引用解析、版本/文件来源记录与上下文预算;普通生成只加载 `SKILL.md` 和入口直接引用的相关文本,在线 Agent 使用渐进工具,本机 Agent 使用原生完整包,专项测试与前端类型检查通过。
- [ ] 分别安装无 Frontmatter 的单个 Markdown、两个用户提供的示例 ZIP,确认名称/简介推断、文件树层级、中文路径、预览/源码切换和相对 Markdown 链接正确。
- [ ] 使用公开 GitHub 仓库的默认分支、指定分支和子目录安装技能,修改仓库后手动同步并等待一次后台检查,确认 commit、版本、检查时间、同步时间和失败信息准确。
- [ ] 在浅色、深色、常规桌面、窄屏下检查大弹窗尺寸、双栏滚动、文件筛选、长路径、省略文本、键盘焦点和媒体预览;确认弹窗不会触发画布缩放或快捷键。
- [ ] 在线 Agent 使用示例技能完成一次任务,确认先读 `SKILL.md`,仅在入口引用时读取对应 reference;本机 Agent 确认 scripts/assets 保持目录结构、turn 完成后临时目录被清理,且聊天历史不出现完整技能正文。
- [ ] 分别在画布图片/视频/文本生成、创作页文本/图片/视频、短剧分镜图/动作预演/镜头视频中选择示例技能,确认任务只记录本轮技能版本和实际读取文件,不重复注入历史消息,也不加载 `scripts/`、`assets/` 或整个技能包。
- [x] 画布、创作页和 Agent 共用的 `@` 引用菜单改为真实光标定位,输入框或页面滚动、尺寸变化时同步更新;向上弹出按实际内容高度贴边。技能候选改为工作流图标、名称、说明、版本和文件数的统一信息行,专项测试和前端生产构建通过。
- [ ] 登录后分别在高输入框首行、末行、滚动后的中间行输入 `@`,确认菜单与光标保持约 8px 间距;在浅色/深色及窄屏下确认技能说明、版本、文件数和键盘选中态清晰可读。
## 短剧分镜工作流 v2
- [x] 后端新增镜头版本、镜头产物和生产任务上下文;分镜修改与资产版本变更会局部将旧产物标记为 `stale`,专项测试通过。
- [x] 短剧工作流调整为“剧情与章节 → 资产拆分 → 分镜脚本 → 黑白动作预演 → 视频生成 → 交付与打包”,旧 v1 实例保留,新章节使用 v2。
- [x] 项目工作台新增独立分镜工作流路由,支持初始化章节流程、新增镜头、保存分镜版本、绑定资产版本、查看预演/视频版本和交付缺失状态;前端生产构建通过。
- [x] 镜头轨道按当前制作阶段显示待生成、生成中、已生成和生成失败状态,状态标签固定在卡片右下角;横向镜头只在轨道内部滚动,不再撑宽脚本区或挤出产物预览。制作概览六个流程节点改为独立可点击卡片;前端类型检查、生产构建与相关专项测试通过。
- [x] 分镜生成设置接入统一模型选择、能力和计价链路,支持前台模型、系统模型与用户自定义模型;切换模型会归一画幅、分辨率/画质和时长,MiniMax-H3 的旧 `720` 会切换为 `768P`。项目设置可保存默认生图/视频模型;后端全量测试、MiniMax 回归测试和前端生产构建通过。
- [x] 单镜生成改为任务提交后立即返回,不同镜头可并行进入排队/生成状态;角色卡主图、绑定声音样本和场景资产会按 `图片N` / `音频N` 编译进提示词。MiniMax 项目资产使用 `reference_image` / `reference_audio`,仅显式首尾帧节点使用帧角色;产物固定绑定任务提交时的镜头版本。前后端全量测试与生产构建通过。
- [x] 视频图片语义统一为首帧、尾帧和普通参考图三类,并贯穿前端直连、后端任务与声明式协议;Agnes、Seedance `/videos`、火山方舟、NewAPI 媒体任务、xAI 和 MiniMax 不再按图片数量误猜项目角色资产。Gemini Veo、Novita 等仅支持起始图的协议会明确拒绝 `reference_to_video`,不再静默降级成首帧。
- [ ] 在真实项目中初始化一个已有章节,确认不会误用旧 v1 工作流,刷新和切换章节后阶段、镜头和当前版本保持一致。
- [ ] 在同一章节准备待生成、生成中、已生成和生成失败镜头,确认灰、蓝、绿、红标签始终显示在卡片右下角;增加到几十个镜头后确认只有底部轨道横向滚动,中间脚本和右侧产物预览仍完整可见。
- [ ] 在浅色、深色、常规桌面和窄屏下检查制作概览六张流程卡片的边界、间距、完成态、悬停和键盘焦点,确认跳转目标正确。
- [ ] 连续保存同一镜头多个版本并绑定不同资产版本,确认只有该镜头的动作预演和视频转为过期,其他镜头不受影响。
- [ ] 使用画布任务和项目任务分别登记镜头产物,确认 `production_task_links` 正确记录 Project、Canvas、Unit、Shot 和 WorkflowStep,且账号归属校验有效。
- [ ] 在浅色、深色、窄屏和常规桌面验证阶段导航、镜头列表、表单、检查器、媒体预览和长章节内容滚动。
- [ ] 在项目设置分别选择系统、用户自定义的默认生图/视频模型,刷新后进入分镜图、动作预演和镜头视频,确认项目默认优先、已下架模型回退全局默认;切换 Seedance、MiniMax-H3 等能力不同的模型时,画幅、时长、分辨率和本次预计积分立即更新,并与实际账单一致。
- [ ] 连续选择两个镜头并分别提交视频生成,确认两个镜头独立显示“正在提交/生成中”,第二个任务不会被第一个全局锁阻止;刷新页面后两个任务状态都能恢复,完成产物分别绑定各自提交时的镜头版本。
- [ ] 给镜头绑定带主图和声音样本的角色卡及场景资产,使用 MiniMax-H3 生成并检查请求日志:文本包含 `【资产参考】`、角色声音说明和台词,角色/场景图片为 `reference_image`、声音为 `reference_audio`,请求不再出现误判的 `first_frame`,画幅和 `768P` / `2K` 与界面选择一致。
- [ ] 使用同一镜头资产依次切换 Agnes 2.5、Seedance `/videos`、火山方舟、NewAPI 媒体任务和 xAI,确认单张角色图仍走 reference 字段;再切换 Gemini Veo、Novita,确认提交前给出“不支持 reference_to_video”的明确提示,而不是把角色图当起始帧生成。
- [ ] 当前“资产拆分 AI、多宫格生成提交、批量视频任务、后端交付包”仍是后续阶段,界面不得显示为已完成或可用。
## 角色声音素材绑定
- [x] 角色卡声音绑定移除无效的预设声音下拉框,改为从素材库选择或实时上传声音样本;支持 MP3、WAV、M4A/AAC、FLAC、OGG/Opus 和 WebM 音频。前后端共同校验资源归属、完成状态、资源类型和格式白名单,画布生成引用会保留资源真实 MIME 与文件扩展名。
- [ ] 在角色卡分别选择素材库已有音频并上传 MP3、WAV、M4A/AAC、FLAC、OGG/Opus、WebM 样本,确认选择器格式标签、浏览器试听、绑定、版本历史和刷新后的声音状态一致;再验证不支持格式、伪装扩展名、视频 WebM、未完成资源和其他账号资源均被拒绝。
- [ ] 使用绑定了不同格式声音样本的角色执行画布生成,确认请求中的参考音频使用资源真实 MIME 和对应文件扩展名,不再统一伪装成 MP3;生成成功、失败及刷新恢复后引用关系不丢失。
## 短剧章节后台生成与项目头部
- [x] “提取角色”和“生成到分镜制作”继续使用后端任务中心,确认配置后立即关闭弹窗;章节按钮按任务真实开始时间每秒显示“已运行 X分钟XX秒”,任务完成后恢复可点击并显示“已生成”。刷新页面后会按章节从任务中心恢复运行计时和完成态,并接管尚未写回的角色或分镜结果。
- [x] 项目名称、状态、六个项目导航、章节选择和新建画布操作已注册到全局公用头部,项目内容区不再重复占用一整行头部;相关专项测试、TypeScript 检查与前端生产构建通过。
- [ ] 在真实慢任务中分别启动角色提取和章节分镜,确认弹窗立即关闭、按钮计时连续增长、可编辑正文和切换章节,完成后按钮显示“已生成”且仍可再次运行。
- [ ] 在任务运行中和任务刚完成尚未写回结果时分别刷新项目,确认对应章节继续显示累计计时或“已生成”,成功结果会自动写回;再检查无新角色、生成失败和重新生成替换确认场景的按钮恢复、错误提示和旧分镜保护。
- [ ] 在浅色、深色、常规桌面和窄屏下检查全局头部:项目名、状态、项目导航、右侧全局操作和新建画布/章节选择不重叠,导航可横向滚动,内容区高度确实增加。
## 画布生成结果命名
- [x] 快捷键复制节点生成图片后保留 `_copyN`,参数变体生成图片后保留 `A/B/C/D` 版本标识;批量输出追加结果序号。
- [x] 下载文件名继续使用节点标题,因此复制、参数变体和同批多图结果不会再生成相同文件名。
- [ ] 分别使用快捷键复制和“创建参数变体”生成图片,确认生成中、生成完成和刷新画布后标题标识不丢失。
- [ ] 下载原图、复制结果、多个参数变体和同批多图结果,确认浏览器不会再提示同名文件覆盖。
## 画布生成进度与全屏视频控件
- [x] 移除图片、视频任务进入模型调用时统一写入的假 35%;排队、后端接管和连接上游阶段只显示真实阶段文案,不再显示伪造百分比。
- [x] 后端从图片、视频上游成功的创建与轮询响应中识别 `progress`、`percent`、`percentage`、`completion` 及常见百分比变体,支持数字、百分数字符串和 0~1 小数;进度单调写回任务,前端既有 2 秒轮询会同步到画布节点。
- [x] 画布视频节点保留紧凑控件;进入全屏后恢复完整顶部控制组,底部按钮调整为 52px 操作目标,同时放大图标、时间文字、进度轨道和拖动滑块。
- [ ] 分别使用会返回整数百分比、小数进度、百分数字符串和不返回进度的图片/视频渠道生成,确认前三者按上游实时增长,不返回进度的渠道仅显示阶段文案且不会卡在固定百分比;刷新页面后继续从后端任务恢复最新进度。
- [ ] 在桌面、窄屏和触屏设备全屏播放横版、竖版视频,确认播放/暂停、音量、时间、画中画、设置、全屏退出和进度拖动尺寸清晰且不会遮挡字幕。
## 视频画面与片段提取
- [x] 视频节点“尾帧截取”已合并为“提取画面”,支持首帧、当前帧、尾帧和最多 30 个自选时间点;批量结果保留来源节点与时间点元数据。
- [x] “截取重生成”已调整为“截取片段”,默认只创建片段素材;可选同时创建待生成节点,但不会自动提交生成任务。
- [x] 多张提取图片会保持全部选中,可继续使用画布现有批量连接能力自行创建并连接生成节点。
- [ ] 在真实视频节点提取首帧、多个中间帧和尾帧,确认画面、时间标记、网格布局、来源连线和多选状态正确。
- [ ] 选择接近重复的时间点、超过 30 个时间点及部分帧解码失败场景,确认去重、上限提示和部分成功反馈正确。
- [ ] 分别验证“只创建视频片段”和“同时创建待生成节点”,确认前者不要求模型,后者创建后不会自动扣费或启动任务。
- [ ] 选中多张提取图片后新建视频生成节点,确认批量连线和手动生成流程可用。
## 画布节点搜索
- [x] 搜索结果改为紧凑媒体行,图片、视频、绘图优先显示真实缩略图,文本节点显示内容片段;素材类型、尺寸、时长、文件大小和模型按可用信息摘要展示。
- [x] 节点新增可持久化创建时间与最后编辑时间;旧画布按项目时间建立迁移基线,素材 URL/尺寸后台恢复不会误记为用户编辑。
- [x] 默认按最近编辑排序,支持节点、章节、镜头、模型和标签搜索,以及方向键选择、Enter 定位、Esc 关闭。
- [ ] 在含图片、视频、音频、绘图、文本、分镜和插件节点的真实画布验证缩略图、摘要、时间和排序;确认失效媒体能降级为类型图标。
- [ ] 在窄屏、常规桌面、浅色和深色主题验证行密度、长标题截断、时间列布局、滚动与键盘焦点。
## 画布素材批量插入与右键菜单动效
- [x] 画布素材库复用既有多选能力,一次确认后按三列网格批量创建节点并选中全部新增节点;本地素材与插件来源共用同一 payload 转换路径。
- [x] 时间线素材入口继续保持单选,图片和文本不会被误当作可直接入轨媒体。
- [x] 右键主菜单、添加节点子菜单、菜单项、图标与箭头已移除位移和缩放动画,只保留淡入、颜色变化与 Spotlight 光影跟随;专项测试、TypeScript 检查与生产构建通过。
- [ ] 在画布空白处右键后缓慢移动光标经过各菜单项,确认菜单、文字、图标和箭头位置稳定,光影仍跟随光标,主菜单与子菜单打开时不跳动。
- [ ] 从画布工具栏和右键菜单分别打开素材库,混选图片、视频、音频、文本及插件来源素材,确认一次插入全部节点、顺序稳定、节点不重叠且全部保持选中。
- [ ] 从时间线打开素材库,确认仍只能单选;音视频可直接入轨,图片或文本会保留弹窗并显示明确错误。
## 画布本机 Agent 连接教程
- [x] 未连接、连接中和连接失败时,Agent 对话正文由连接教程替代;连接成功后自动恢复原聊天或历史区域,不清空消息和线程状态。
- [x] 教程按 macOS/Linux 与 Windows 生成安装、构建和启动命令,并将当前网页 Origin 写入 `FRAMEFIELD_TRUSTED_WEB_ORIGINS`;命令生成专项测试、前端类型检查与生产构建通过。
- [x] 页面明确区分网页侧边栏 Codex、外部 Codex/Claude Code MCP 与尚未验证的 Hermes/WorkBuddy,不再把 Codex 插件误写成本机侧边栏前置条件。
- [x] 画布全局 `Cmd/Ctrl+C` 在存在真实文字选区时交还浏览器处理,不再把 Agent 消息、日志或 Markdown 文本复制误判成节点复制;快捷键边界专项测试通过。
- [ ] 在 Windows、macOS 和 Linux 分别复制并执行教程命令,确认 Runtime 能连接当前线上 Origin,平台自动识别和手动切换均正确。
- [ ] 在未连接、自动重试、Origin 未授权、连接成功和运行中断后重连状态下验证教程与对话区域切换;确认原消息、历史会话和待确认工具调用不丢失。
- [ ] 在 360px 窄面板、常规宽度、浅色和深色主题下确认命令块可横向滚动、复制按钮可见、教程不遮挡画布。
- [ ] 在 Agent 回复、运行日志、代码块和普通 Markdown 中分别框选文字后使用右键复制及 `Cmd/Ctrl+C`,确认系统剪贴板内容正确;无文字选区时 `Cmd/Ctrl+C` 仍复制所选画布节点。
## 画布复制粘贴命名
- [x] 节点首次复制粘贴使用“原名称_copy1”,后续按当前画布已有最大序号递增。
- [x] 复制已有 `_copyN` 副本时回到原始名称计算,避免生成 `_copy1_copy1`;旧版空格 `Copy` 后缀已有兼容测试。
- [ ] 在画布中连续粘贴单个节点、多个同名节点和包含子节点的背板,确认名称依次递增且节点关系不变。
## 画布媒体下载文件名
- [x] 图片、视频和音频下载统一使用“画布名_节点名_yyyyMMdd.扩展名”,中文名称和跨平台非法字符已有专项测试覆盖。
- [x] 扩展名优先按媒体 MIME 类型判断,并兼容远程 URL 后缀;JPEG、WebM 和 MOV 已有专项测试覆盖。
- [x] 前端 TypeScript 检查与生产构建通过。
- [ ] 在浏览器中分别下载本地上传、生成结果、LibTV 导入和 TapNow 导入的图片与视频,确认文件名、日期和实际媒体格式一致。
- [ ] 在同一天重复下载同名节点,确认浏览器的重名处理不会覆盖用户已有文件。
## 创作输入区参考内容管理
- [x] 自动化覆盖首个、中间和末尾参考内容按稳定 ID 独立删除,且删除后其余顺序保持不变。
- [x] 折叠态提供明确的“查看全部”入口,展开态提供图片、视频、音频、文件筛选、清空全部和收起入口。
- [x] 在桌面浏览器验证上方“参考内容”打开素材选择、折叠堆叠态中间卡片删除、展开态任意卡片删除、筛选、拖动排序和收起。
- [ ] 在真实登录数据下验证“清空全部素材”同步移除全部附件引用,不影响技能引用和素材库原始文件。
- [ ] 在触屏及窄窗口验证删除按钮无需悬停也可见,素材轨道可横向浏览且不会遮挡提示词和底部控制区。
## Agnes Video 2.5 JSON 协议
- [x] 前端专项测试确认 Agnes 创建请求使用 `application/json`,不再发送 `input_reference[]`、`resolution_name`、`preset` 或像素型 `size`。
- [x] 后端专项测试确认内置 `host:agnes-video` 插件直接进入 Agnes JSON 协议执行器,不再回退到 OpenAI 风格 multipart;旧渠道能力读取时会收紧为官方 4–12 秒和 720P/960P/2K 档位。
- [x] Agnes 插件升级到 `1.2.0`:公共层像素画幅(如 `1280x720`)只转换为 `aspect_ratio: "16:9"`,公共层分辨率(如 `720`/`720p`)只转换为 `size: "720P"`,不再把两类字段混用。
- [x] 后端专项测试确认自定义渠道和系统渠道均允许官方 `/agnesapi?video_id=...&model_name=...` 轮询,并将该路径转发到 Agnes 主机根路径。
- [x] Agnes 完成态兼容 2.5 的 `metadata.url` 与 V2.0 的顶层 `url`;前端 provider 和后端协议专项测试均已覆盖。
- [ ] 使用真实 Agnes API Key 分别验证文生视频、单张首帧、三张图片 reference、视频/音频 reference;确认 `metadata.url` 可播放并且失败信息可见。
- [ ] 使用 Agnes Video V2.0 完成一次真实任务,确认顶层 `url` 能进入视频资源保存流程,不再报“没有 metadata.url”。
- [ ] 在系统渠道中验证 4 秒与 12 秒边界、720P/960P/2K、横竖画幅,以及 2.5 Flash 的 720P/最多 5 图/不支持视频限制。
## 画布生成按钮价格
- [x] 系统渠道价格按当前 operation、分辨率、时长、图片数量、质量和画幅匹配价格档,并按图片数量或视频秒数计算本次积分;逻辑前台模型继续使用后端报价。
- [x] 画布生成按钮改为价格与圆形生成操作一体式胶囊,保留完整无障碍标签;价格匹配专项测试与前端生产构建通过。
- [ ] 在画布中分别选择按次图片模型、按秒视频模型和前台逻辑模型,确认修改数量、时长、分辨率和参考素材后价格立即更新且与实际账单一致。
- [ ] 在浅色/深色主题及生成中、禁用状态下确认胶囊价格可读、圆形操作区清晰且不挤压模型与参数控件。
## 系统渠道默认积分价格
- [x] 新建渠道模型默认使用“所有规格统一价格”,管理员只需填写一次积分;1K/2K/4K、画幅和生成方式差异定价收进可选的“按规格定价”。
- [x] 系统渠道直连、前台逻辑模型按渠道计价和失败切换线路均按任务实际规格匹配价格档;缺失价格档 ID 不再被误转成 `"<nil>"`。
- [x] 后端全量测试、价格表单专项测试和前端生产构建通过。
- [ ] 在 `/admin/channels` 新建图片和视频模型,仅填写统一价格后分别生成不同质量、尺寸、分辨率和时长,确认都命中默认价格。
- [ ] 在默认价格之外新增一个 2K 或指定分辨率价格,确认精确规格优先、其他规格继续使用默认价格;关闭“可供用户使用”后该档不再参与匹配。
## 系统渠道模型 Logo
- [x] 后端保存系统渠道模型 Logo,并通过脱敏模型目录下发;前端类型检查与生产构建通过。
- [ ] 在 `/admin/channels` 的模型管理中新增和编辑模型,确认 Logo 可选择、清除并在列表中立即更新。
- [ ] 关闭“前台模型”功能后刷新创作端,确认模型选择器显示系统渠道模型配置的 Logo,浅色和深色主题下均清晰可见。
## 提示词位置型资源引用与缩略图
提示词中的画布连接使用 `@图片N`、`@视频N`、`@音频N`、`@文本N` 等位置型槽位,不再把节点 ID 写入提示词;创作页附件对用户仍显示同类编号,但内部使用稳定附件身份,避免删除中间项后引用错位。以下场景仍需要在浏览器中由用户确认:
- [x] 29 项提示词引用专项测试、TypeScript 检查与生产构建通过。
- [x] 旧 `@[node:节点ID]` 仅做读取迁移;新写入、配置组装、故事板物化、Agent 建图和快捷生成均只生成位置型引用。
- [x] 图片、视频、音频、文本和角色分别独立计数;生成时按当前连线顺序解析槽位,删除连线不再删除提示词。
- [x] 只有 `storageKey` 的图片/视频引用会异步解析预览地址;生成中按钮使用节点强调色与可见旋转动画。
- [ ] 在画布中连接图片 A 并写入 `@图片1`,删除 A 的连线后连接图片 B,确认提示词不变、缩略图切换到 B、生成请求使用 B。
- [ ] 混合连接两张图片、一段音频和一段文本,确认标签依次为 `@图片1`、`@音频1`、`@图片2`、`@文本1`,调整不同类型的连线不会串号。
- [ ] 打开包含旧 `@[node:...]` 的画布节点,确认面板自动迁移成可见位置标签,保存和后续编辑不再出现节点 ID。
- [ ] 使用只有 `storageKey`、没有 `content` 的本地图片和服务端资源图片,确认顶部参考栏、行内引用和放大预览均能显示。
- [ ] 点击生成,确认按钮保持节点强调色并显示连续旋转动画,不再出现纯红色空圆。
- [ ] 在 `/create` 添加至少三张参考图,并在提示词中重复引用 `@图片2`;拖动参考内容轨道中的另一张图片覆盖行内缩略图,确认提示词文本保持不变且所有 `@图片2` 缩略图同步刷新。
- [ ] 从本机拖入图片覆盖行内缩略图,确认上传期间不能发送,上传成功后原编号保持,上传失败时旧图和旧提示词不变。
- [ ] 分别测试图片模式、视频模式和文本模式,确认只有图片引用可成为替换目标,视频、音频、文件和技能引用不会误触发。
- [ ] 替换一个已经位于参考轨道中的图片,确认附件不会重复,其他引用仍指向正确素材。
- [ ] 确认浅色/深色主题、窄窗口和同一图片多次出现时,拖入高亮与“替换”遮罩清晰且不遮挡相邻文字。
## 已有图片节点图生图引用
- [x] 已有图片节点显式使用 `@图片1` 时会把节点自身作为参考图提交;未显式引用时仍保持文生图语义。
- [x] 无法解析的 `@图片N`、`@视频N`、`@音频N` 等画布引用会在提交前报错,不再静默丢失素材。
- [x] 后端专项测试确认 OpenAI Images 图生图使用 `POST /v1/images/edits` 和 `multipart/form-data`,并携带图片文件、模型、提示词、尺寸及响应格式。
- [ ] 在线上画布打开一张已有图片,输入“将 `@图片1` 图片变清晰”并生成,确认任务日志包含参考图、请求路径为 `/v1/images/edits`、Content-Type 为 `multipart/form-data`。
- [ ] 在同一图片节点移除 `@图片1` 后再次生成,确认请求恢复为 `/v1/images/generations`,不会隐式携带旧图片。
## 画布图片与音频组合的视频模型选择
- [x] 图片或角色与音频组合时继续按 `image_to_video` 匹配,音频仅作为附加参考;纯音频仍按 `audio_to_video`,包含参考视频时仍按 `reference_to_video`。
- [x] 模型选择专项测试覆盖“支持图生视频且允许参考音频”的模型,不再错误提示“不支持全模态参考”。
- [ ] 在线上画布只连接一张图片和一段音频,确认支持图生视频与参考音频的视频模型可选择,并能正常提交生成任务。
- [ ] 分别验证纯音频、图片加音频、视频加音频三种输入,确认模型筛选和任务 operation 依次为 `audio_to_video`、`image_to_video`、`reference_to_video`。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 工作区、Agent、画布复制、模型配置与创作附件修复
- [x] 前端 TypeScript 检查与生产构建通过;提示词引用、创作附件和侧栏主题专项测试通过。
- [x] 空间工作区与普通页面的左侧菜单统一使用 `--workspace-navigation`,不再随路由切换表面色。
- [x] 本机 Agent 输入框改为 Enter 换行、Cmd/Ctrl+Enter 发送;本轮模型失败会保留原请求快照并提供手动重试,不重复插入用户消息。
- [x] 文本节点展示区支持框选复制,复制文本在 Clipboard API 不可用时使用兼容回退;图片节点右键增加“复制图片”,非 PNG 图片会转为 PNG 后写入系统剪贴板。
- [x] 后台模型配置的章节标题与内容、价格档匹配条件与计费状态均改为上下结构。
- [x] 创作页附件删除按钮隔离 Reorder 拖拽事件;附件引用使用稳定 token,删除第三张不会让第四、第五张引用串位。
- [ ] 在普通列表页、创作页、空间工作区之间切换,确认左侧菜单明暗色调始终一致,折叠与移动端展开状态无闪色。
- [ ] 在本机 Agent 输入多行文本,确认 Enter 只换行、Cmd/Ctrl+Enter 和发送按钮正常提交;模拟模型中途失败后点击“重试本轮”,确认沿用原会话、文本、图片和技能且不重复用户气泡。
- [ ] 在画布文本节点中拖选部分文字并复制;分别右键 PNG、JPEG、服务端 `storageKey` 图片执行“复制图片”,确认可粘贴到系统应用。
- [ ] 在后台打开文本、图片、视频模型配置,确认所有章节为纵向阅读顺序,宽屏和窄屏都没有左右主从栏或价格档竖分隔线。
- [ ] 在创作页上传 5 张参考图,展开后依次删除第 3、5、1 张,确认每张都能就地删除,轨道不触发拖拽,提示词中的其余引用仍指向原附件。
## Agnes AI 官方视频协议
- [x] Agnes 协议已启用,覆盖 `agnes-video-v2.0`、`agnes-video-2.5`、`agnes-video-2.5-flash` 的官方创建字段、状态、失败信息和 `metadata.url` 结果解析。
- [x] 轮询使用同一 Base URL 主机的根路径 `/agnesapi`,专项测试确认 `https://apihub.agnes-ai.com/v1` 不会被拼成错误的 `/v1/agnesapi`。
- [x] Flash 的 720P、最多 5 张图片、禁止参考视频规则已在请求前强校验;协议与 provider service 专项测试通过。
- [ ] 使用真实 Agnes API Key 分别完成 V2.0 文生视频、单图生视频、2.5 关键帧、2.5 reference、2.5 Flash 的创建与轮询冒烟。
- [ ] 验证真实失败任务能显示官方 `error.message`,429/5xx 保持现有上游错误语义,生成成功后视频能进入影策资源保存流程。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 插件分层管理
- [ ] 管理员在 `/admin/plugins` 停用官方应用插件后,普通用户的有效状态和新请求同时被阻止;重新开放后保留原个人启用选择。
- [ ] 两个普通用户分别启用和停用同一官方应用插件,确认状态、Eagle 配置和工作流入口互不串号。
- [ ] 普通用户不能切换系统协议或管理员上传插件;关闭“向普通用户显示系统插件”后,两类插件均不可见。
- [ ] 用户停用 RunningHub / ComfyUI 后不能提交新任务,但已接收任务、Bridge 轮询、心跳和结果回传可以完成。
- [ ] 管理员上传、停用、启用和卸载自定义插件后,插件包、平台状态、用户状态与审计日志一致。
- [ ] 验证 `/plugins` 与 `/admin/plugins` 的浅色/深色主题、窄屏、空态、筛选、上传弹窗和开关失败回滚。
## RunningHub 与 ComfyUI Bridge 工作流
- [x] 后端全量测试、前端类型检查、Canvas Agent 构建和原生 Bridge Go 测试通过。
- [x] 工作流插件停用状态覆盖设置入口、画布创建、配置面板、任务创建、管理 API 和 worker 执行校验。
- [x] 覆盖后端重启后请求领取、结果先落库再恢复、原请求 ID 幂等复用,以及 RunningHub API Key 不进入 URL 的自动化测试。
- [ ] 使用真实 RunningHub Workflow 和 App 分别验证参数发现、图片/视频/音频输入映射、提交、轮询、取消和结果下载。
- [ ] 使用真实 ComfyUI API 工作流验证 Bridge 注册、心跳、领取、完成、取消和大文件结果回传。
- [ ] 在 Bridge 执行中重启后端,确认结果回传成功且任务不重复执行;在请求未领取时重启后端,确认原请求继续投递。
- [ ] 验证浅色/深色主题、窄屏设置页、画布工作流节点和任务中心状态展示。
## AI 提示词优化器
当前代码和生产构建已完成,但以下场景仍需要在真实配置和不同窗口尺寸下由用户确认:
- [x] `web` 前端 TypeScript 检查与生产构建通过。
- [x] 优化面板打开、关闭不再等待 Popover 入场或退出动效。
- [ ] 在 `/create` 中分别测试图片和视频模式的打开、发送、取消、失败重试和关闭。
- [ ] 在图片、视频画布节点中测试优化入口、结果采用和原提示词回填。
- [ ] 逐项测试五种优化方式,确认模式切换不会丢失当前输入。
- [ ] 测试优化模型切换,并确认目标生成模型与优化模型显示和请求职责分离。
- [ ] 测试已连接图片、文本参考,以及“结合参考”没有参考内容时的提示和禁用状态。
- [ ] 测试长提示词、长优化结果、滚动、拖动和四边缩放;确认窗口接近边缘时不会跑出视口。
- [ ] 测试浅色/深色主题和窄窗口布局,确认按钮、输入框和结果文本仍可读且可操作。
- [ ] 使用自定义文本渠道实际发送一次,确认渠道、模型和权限配置正确时不会误报“必须指定系统渠道和模型”。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 肖像可识别性排查画布插件
首版画布节点、本机签名运行时、本地 ONNX 预检、百度候选链路、模型作业协调器和四种报告导出已接入;以下边界仍需要真实环境确认:
- [x] Agent TypeScript 构建、Web TypeScript 检查通过。
- [x] 本机任务持久化、幂等、取消/重试清理、候选 URL 安全校验和报告转义测试通过。
- [x] Markdown、无脚本 HTML、DOCX 共用检测结论、本地预检、六维特征、修改建议和失败候选说明;报告结构回归测试通过。
- [ ] 使用固定真人/虚拟人图片建立 Python 原实现与 TS 实现的检测框、embedding 和风险金标。
- [ ] 在安装 `det_10g.onnx`、`w600k_r50.onnx` 的 Windows 环境完成直接比对和本地仅模式验证。
- [ ] 在系统 Chrome/Edge 可用环境完成百度识图、验证码、页面结构变化和候选下载失败验证。
- [ ] 配置支持双图输入的项目视觉模型,验证 Path A、Path B、模型租约、并发、取消和页面重开恢复。
- [ ] 浏览器确认插件首次关闭、旧节点只读、明暗主题、窄屏、键盘焦点和候选添加到画布。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 画布节点自动整理
自动整理入口和布局提交逻辑已完成,以下场景仍需要在实际画布中手工确认:
- [x] `web` 前端 TypeScript 检查与生产构建通过。
- [x] 画布底部视图控制中显示“自动整理节点”按钮。
- [ ] 无选中节点时,确认多个顶层节点会按连线流程布局;无连线时会按网格布局。
- [ ] 选中节点时,确认只移动选中的可移动节点,未选中节点保持原位。
- [ ] 确认锁定节点、容器节点和折叠批次隐藏子节点不会被移动。
- [ ] 点击“撤销”确认可以恢复整理前的位置,并确认刷新画布后布局仍能保存。
- [ ] 在浅色/深色主题、窄窗口和节点数量较多的画布中确认底部按钮可见、可操作且不遮挡主要内容。
## 分镜脚本资产关联
1. 在同一画布放入角色、场景图片、参考视频和音频后生成分镜,确认各镜头只关联模型返回的真实画布资产,不出现失效或编造 ID。
2. 分镜卡片按“序号、时长、视频提示词、台词/旁白、关联资产”五列显示;图片、视频和音频缩略图可点击并打开对应预览。
3. 从单个镜头及批量入口创建视频节点,确认脚本行输出和每个关联资产都自动连到视频节点,重复同步不会产生重复连线。
4. 打开视频节点提示词,确认关联资产以标准 `@资产` 缩略图展示,生成请求能解析图片、视频和音频引用。
5. 修改镜头资产关联后再次同步,确认已移除的托管资产连线被清理,而用户手工创建的普通连线仍保留。
## 零价免费模型
1. 管理员设置启用系统渠道模型的按次价格为 `0` 后,普通用户刷新设置即可看到并成功创建任务。
2. 前台逻辑模型使用统一按次价格 `0` 后,普通用户可见并能成功创建任务。
3. 零价任务完成后,账单状态为已结算,用户可用积分和预留积分均不变化。
4. 零价 Token 任务在上游未返回 usage 时仍能以 `0` 结算;正价 Token 任务继续依赖 usage 结算。
5. 管理端提交任一负价格仍会被拒绝。
6. 未勾选价格已配置的默认零价模型仍不会向普通用户公开。
## 用户诊断包导出
当前实现已完成前后端链路、脱敏和设置页 UI,但仍需要真实环境验证下载链路和不同错误场景:
- [x] `web` 前端 TypeScript 检查与生产构建通过。
- [x] 诊断服务已覆盖脱敏、ZIP 结构和跨用户任务拒绝测试。
- [x] 设置页桌面布局和 680px 窄屏布局已完成浏览器预览。
- [ ] 登录后从设置页导出成功,确认 ZIP、诊断编号和文件名均可用。
- [ ] 从失败任务详情进入诊断页,确认 `taskId`、`projectId` 和对应日志范围正确带入。
- [ ] 后端未重启或接口未部署时,确认前端能显示可操作的错误提示,而不是原始 Blob/502 文案。
- [ ] 验证浅色/深色主题、15 分钟到 24 小时范围、长问题描述和导出中的 loading 状态。
## Eagle 素材库
- [x] 增加素材无文件夹、无标签时的空集合归一化单元测试。
- [ ] 使用真实 Eagle 服务验证无文件夹素材、无标签素材、文件夹路径和预览引用。
## Windows 本地开发
- [ ] 在一台依赖已安装和一台全新工作区分别运行 `.\scripts\start-local.ps1`。
- [ ] 验证端口被占用时脚本会安全退出,且不会关闭已有进程或使用正式开发数据目录。
## 画布生成结果资源恢复
- [x] `web` 前端 TypeScript 检查与生产构建通过。
- [ ] 模拟图片生成任务已成功但结果下载失败,确认节点显示“重新加载资源”和“重新生成”两个按钮。
- [ ] 点击“重新加载资源”,确认只重新查询并消费原任务结果,不创建新的生成任务或重复扣费。
- [ ] 模拟视频结果落盘/OSS 上传失败后再次加载,确认恢复成功会清除错误状态并保留原任务信息。
- [ ] 点击“重新生成”,确认仍走原有生成重试流程;普通生成失败仍只显示“重新生成”。
## 数据同步与资源删除重构
- [x] 前端远端基线、登录 hydrated 屏障、上传并发编辑和删除持久化回归测试通过。
- [x] Generation 失败只回滚生成字段,保留同节点并发标题编辑;重复 Generation 仍按明确 effect key 幂等。
- [x] 资源引用识别改为显式字段合同,未登记的字段名和自由文本不会被推断为资源引用。
- [x] 后端素材删除改为数据库事务 + `resource_deletion_jobs` Outbox,数据库失败时物理文件保持不动。
- [x] Outbox Worker 本地文件删除、对象不存在幂等成功和失败退避测试通过。
- [ ] 使用真实 OSS 配置验证对象删除成功、权限失败后的退避重试和多实例租约接管。
- [ ] 浏览器真实环境验证登录快照慢响应期间工作区保持不可写,以及删除后立即刷新不复活素材。
## S3 兼容存储
- [x] 后端 S3 单次上传、Range 读取、预签名地址、Session Token、幂等删除、配置版本和迁移清单自动化测试通过。
- [x] 前端 S3 预设、关键字段重测判断、默认 `open-ai-canvas` 路径前缀、TypeScript 检查和生产构建通过。
- [ ] 分别使用 AWS S3、Cloudflare R2、Backblaze B2 和 RustFS 完成写入、Range 读取、删除及历史资源恢复验证。
- [ ] 验证 Path Style 开启时强制路径寻址,关闭时 AWS 使用虚拟主机寻址、其他自定义 Endpoint 自动使用路径寻址。
- [ ] 验证平台切换到本机后只影响新上传,历史 S3 资源仍可读取和删除;个人 S3 停用后正确回退平台存储。
- [ ] 验证同一 S3 修改 Bucket、Endpoint、Region、前缀或 Path Style 时,留空 Secret 和 Session Token 可继续复用,并要求重新连接测试。
- [ ] 使用私网 RustFS 验证浏览器同源代理,以及提交给模型上游时转换为影策公网 HTTPS 短时地址;未配置公网 HTTPS 地址时应明确拒绝。
- [ ] 验证管理员关闭个人 S3 后不再接受个人新上传,但已有个人 S3 资源仍可读取和删除。
## 3D 导演台时间轴关键帧删除与快捷键
关键帧删除入口、全局快捷键和交互控件守卫已接入,以下场景仍需要在浏览器中由用户确认:
- [x] `web` TypeScript 检查、导演台专项测试与全量前端测试通过。
- [x] 关键帧删除覆盖对象 transform、对象骨骼和摄影机三类轨道;未命中时返回同一场景引用,不记历史、不产生修订。
- [x] 时间轴关键帧为可 Tab 聚焦的真实 button;点击或 Enter/Space 只选择并定位播放头,Delete/Backspace 或顶栏删除按钮才删除,避免普通点击误删。
- [x] 所选关键帧可切换保持、线性、平滑缓动;缓动同时作用于对象/摄影机 Transform 与骨骼旋转插值,旧数据默认线性。
- [x] 切换镜头/摄影机或外部删除关键帧后会清除陈旧选择,顶栏缓动和删除控件不会继续修改不可见轨道。
- [x] 全局快捷键在输入框、按钮、链接、role 型控件、可编辑区域及其子元素内一律不解析;仅在动作真正执行时 `preventDefault`。
- [x] 鼠标点选场景对象、dock 工具、模式按钮、快速添加和顶栏图标按钮后会释放焦点,全局快捷键立刻可用;键盘激活(Enter/Space)保留焦点,Tab 序列不断。
- [ ] 在真实画布中记录多个关键帧后逐个删除,确认删除的是目标帧、其余帧顺序不变,且「撤销」能恢复。
- [ ] 折叠对象轨道后仅通过汇总轨删除关键帧,确认收起状态下仍可删除。
- [ ] 用键盘 Tab 走到关键帧上按 Enter/Space,确认只选择并把播放头定位到该帧;再按 Delete,确认删除的是该关键帧而不是整个对象。
- [ ] 对同一段动画依次选择保持、线性、平滑缓动,确认播放结果明显不同,撤销可恢复上一个缓动设置。
- [ ] 选中摄影机关键帧后切换到使用另一台摄影机的镜头,确认旧选择和顶栏缓动/删除控件立即消失。
- [ ] 确认浅色/深色主题下关键帧的悬停环与焦点环可见,命中区易于点中。
- [ ] 逐个验证 W/E/R、Delete/Backspace、H、Escape、Ctrl/Cmd+Z、Ctrl/Cmd+Shift+Z、Ctrl/Cmd+Y 和空格;确认在标题输入框内输入这些字符不会触发快捷键。
- [ ] 在场景列表点选一个对象后直接按 Delete,确认删除的是该对象;再点 dock 的「旋转」后按 W,确认能切回移动。
- [ ] 用键盘 Tab 走到场景对象行按 Enter 选中,确认焦点仍停在该行、可继续 Tab 到下一项。
## 3D 导演台场景模板与四模式骨架
新建场景模板和摆场/姿态/动画/摄影机四个一级模式已接入,以下场景仍需要在浏览器中由用户确认:
- [x] `web` TypeScript 检查、导演台专项测试与全量前端测试通过。
- [x] 导演台 P0 Chrome E2E 全部通过;场景 A 已同步为「默认摆场不显示时间轴与 AutoKey,切到动画模式后 AutoKey 默认关闭」。
- [x] 五个模板结构确定、每次实例 id 独立、对象 XZ 占位两两不相交,判据与 `resolveDirectorPlacement` 一致。
- [x] 空场景不含任何演员;未知模板 id 回落到空场景。
- [x] 模板不改动 `DirectorScene` 结构与 `version`;`mode` 只存在于工作台 store,不写入场景。
- [x] 离开动画模式会停止播放并关闭 Auto Key,并把渲染视图夹回当前模式允许的集合。
- [x] 动画模式会根据 Transform 关键帧绘制可见演员与摄影机的空间轨迹,包含起终点、方向和当前播放进度;隐藏演员及零长度轨迹不显示。
- [x] 播放头按镜头 FPS 而非固定 60 次/秒更新,跨过镜头末尾时保留余量;轨迹长度只在对象/摄影机内容变化时重算。
- [x] 「按运镜生成轨迹」只更新首尾关键帧,保留手工中间帧、关键帧 ID 与 easing,并提示切到动画模式继续编辑。
- [x] 截图/录制绑定开始时的场景快照;上传完成后重新核验节点与镜头,并只把预览引用合入最新场景,不用旧快照覆盖并发编辑。
- [ ] 从工具栏和画布右键菜单分别新建镜头,确认都会先弹出模板选择,且右键位置会作为新节点位置。
- [ ] 逐个使用五个模板新建镜头,确认空场景没有演员,单人/双人/走位演员数量正确,产品镜头含产品主体、背景板和侧面道具且没有演员。
- [ ] 确认双人对话两名演员面对面、走位三名演员互不重叠、产品镜头道具不穿模。
- [ ] 打开一个已保存的镜头,确认不弹模板选择、场景内容未被改写。
- [ ] 在摆场模式确认时间轴、Auto Key、记录关键帧、骨骼与姿势预设、深度/法线视图都不可见。
- [ ] 在姿态模式选中演员,确认骨骼与姿势入口出现;未选中演员时不出现;确认不会自动产生关键帧。
- [ ] 在动画模式开启 Auto Key 并开始播放,再切到其他模式,确认播放停止、Auto Key 关闭,且场景没有被继续写入关键帧。
- [ ] 在动画模式为演员和摄影机分别记录至少两枚位置不同的 Transform 关键帧,确认轨迹、起终点、方向锥和当前进度点可见;隐藏演员后其轨迹同步消失,离开动画模式后全部轨迹消失。
- [ ] 在摄影机模式确认右栏固定显示镜头/摄影机检查器,对齐视图与运镜可用,深度/法线视图可选。
- [ ] 在摄影机已有关键帧且播放头不在 0 秒时执行「摄影机对齐当前视图」,确认当前帧立即保持新机位,旧关键帧仍在且撤销可恢复。
- [ ] 在摄影机已有首尾帧和至少一枚带缓动的手工中间帧时执行「按运镜生成轨迹」,确认只更新首尾位置,中间帧、缓动与撤销历史都保留。
- [ ] 开始截图或白膜录制后切换活动镜头、删除源节点或继续编辑场景,确认旧输出被拒绝或安全合并,不写进另一项目、不复活节点、不覆盖新编辑。
- [ ] 确认模式切换不丢失草稿、撤销历史和保存状态,切换后标题与保存指示器仍正确。
- [ ] 确认浅色/深色主题下模式按钮的选中态、悬停态与焦点环可见,选中态不是主操作色。
- [ ] 在窄窗口(小于 lg 断点)确认模式切换仍可见可点击。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 3D 导演台取景模式(3D/CAM/五个正交视图)
新增 `viewMode`(自由/机位/顶前后左右五个正交轴向)取景切换,独立于摆场/姿态/动画/摄影机四个一级模式;以下场景仍需要在浏览器中由用户确认:
- [x] `web` TypeScript 检查通过;`director-view-modes.test.ts`、`director-modes.test.ts`、`director-template-mode-wiring.test.ts` 专项测试通过。
- [x] 三台相机对象(自由观察、机位、正交)互相独立持有,切换 `viewMode` 只挪动视口的活动相机指针,源码层面确认不共享可变状态。
- [x] 正交轴向使用真正的 `THREE.OrthographicCamera`,取景来自场景内容包围盒,而非把透视相机换个角度伪装;取景解算与视口接线均有专项测试覆盖退化场景(空场景、非法数值)。
- [ ] 逐个切换 3D/CAM/顶视/前视/后视/左视/右视,确认画面确实是对应视角,正交视图没有透视畸变。
- [ ] 放入大比例背景板和旋转后的长道具,逐个切换正交视图,确认对象完整进入画面,不再因只按对象中心构图而裁切。
- [ ] 在自由视角环绕后切到机位或任一正交视图,再切回自由视角,确认之前的环绕位置原样恢复,没有被拉回默认机位。
- [ ] 在机位视图播放/拖动时间轴,确认摄影机运镜正确预览;切到正交视图确认环绕已锁定、拖拽无效。
- [ ] 确认取景切换器(3D/CAM/TOP/FRONT/BACK/LEFT/RIGHT 七个按钮)可键盘 Tab 到达、Enter/Space 激活,`aria-pressed` 状态正确朗读。
- [ ] 确认切换取景模式不产生新的撤销历史记录,也不触发保存/未保存提示。
- [ ] 在机位或正交视图下点击「导出预览图」「录制白膜视频」,确认导出流程仍正常完成(不因当前相机是正交投影而失败)。
- [ ] 确认浅色/深色主题下取景切换器的选中态、悬停态与焦点环可见。
- [ ] 在窄窗口(小于 lg 断点)确认取景切换器仍可见可点击,不与其他浮层重叠遮挡。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 3D 导演台首次引导与窄屏属性面板
首次引导已接入真实登录用户 scope,并按 Issue #305 改为“添加演员 → 移动 → 调姿 → 轨迹 → CAM → 应用”六步;以下场景仍需要浏览器确认:
- [x] 引导进度按认证用户 ID 隔离,不回落 guest;重启入口在加载期间也可用,重置失败会重新读取原进度。
- [x] 已跳过或已结束的引导可从标题栏重新开始;最后一步使用“结束引导”中性文案,不宣称用户已经完成实际任务。
- [x] 小于 `lg` 断点时右侧属性区移动到工作区下方且可滚动,不再直接隐藏姿势与骨骼控制。
- [x] `director-onboarding.test.ts` 专项测试与 `web` TypeScript 检查通过。
- [ ] 使用两个真实账号分别推进、跳过和重启引导,确认进度互不串号;切换账号时旧读取结果不会闪现。
- [ ] 从新账号首次打开导演台,逐步完成添加演员、移动、姿态、两枚 Transform 关键帧、CAM 构图与应用,确认六步文案都指向真实可见入口。
- [ ] 在引导加载期间连续点击“重新开始引导”,再模拟 IndexedDB 写入失败与恢复,确认界面不会永久隐藏或假装推进。
- [ ] 在窄窗口检查摆场、姿态、动画、摄影机四种模式:标题栏可横向到达,底部属性面板可滚动,时间轴与引导不互相遮挡。
用户确认上述场景后,再将对应条目移动到功能文档的已验证范围。
## 模型请求失败日志完整性
模型请求日志已补齐 HTTP 失败关联、错误搜索与请求前失败兜底;以下场景仍需要在管理后台由用户确认:
- [x] HTTP 非 2xx 日志同时保留节点使用的中文错误归类和上游原始错误详情。
- [x] API 调用日志关键词搜索覆盖 `errorCode` 与 `error`,可按节点中文提示、上游错误或错误码定位。
- [x] 参数校验、协议构造、路由准备等请求尚未发出的最终失败会补记 `request_not_sent`,且不保存任务输入、API Key 或请求正文。
- [x] 已有真实 HTTP 调用日志的任务不会重复补记请求前失败日志。
- [ ] 在画布分别触发一次成功请求、一次上游 400 和一次本地参数校验失败,确认 `/admin/logs` 均能看到对应记录,并可按节点错误文案搜索。
## 渠道视频分辨率枚举兼容
画布已将渠道声明的分辨率视为不透明枚举,不再把带方向或本地化后缀的值静默回退为 `720p`;以下场景仍需浏览器确认:
- [x] 前端分辨率规范化、画布选中态、价格匹配与请求映射专项测试通过。
- [x] AutoDL 插件 `1.0.2` 已改用通用 `lower` 并通过协议包测试;宿主仅保留旧 `1.0.1` 清单所需的兼容 shim。
- [x] Manifest 工作流的视频能力改为按 `parameters` 投影:只声明分辨率时不再补画幅能力,也不会继续提交旧的全局 `size`。
- [x] 同时支持分辨率和画幅的渠道按当前比例与分辨率推导只读宽高,例如 `16:9 + 720P = 1280×720`、`16:9 + 1080P = 1920×1080`、`16:9 + 4K = 3840×2160`。
- [x] `web` TypeScript 检查与生产构建通过。
- [x] 后端允许视频能力明确省略画幅,并通过全量 Go 测试;前端能力投影、尺寸计算和画布模型专项测试通过。
- [ ] 在画布选择 `480p竖`、`768p竖`、`480p横`、`768p横`,确认按钮选中态、底部摘要和重新打开后的状态一致。
- [ ] 分别提交四个枚举值,确认请求中的 `resolution` 与插件声明一致,且其他标准 `720p`、`1080p` 渠道不受影响。
- [ ] 使用仅声明 `resolution` 的 AutoDL 工作流,确认画布和创作页不显示画幅/尺寸,生成请求不包含无意义的 `aspectRatio`。
- [ ] 使用同时声明画幅与分辨率的渠道,依次切换 `16:9` 下的 720P、1080P、4K 及 `9:16`,确认宽高展示随选择即时更新且请求仍按渠道协议发送比例与分辨率。
## 画布生成重复提交保护
画布生成入口已增加节点级同步提交锁,并为手动生成记录“提示词、模型、参数、参考素材”指纹;以下场景仍需浏览器确认:
- [x] 连续三次调用同一节点只执行一次的专项测试通过;提示词、模型、参数或参考素材变化会产生不同指纹。
- [x] `web` TypeScript 检查、21 个相关专项测试与生产构建通过。
- [ ] 在同一节点快速连续点击三次生成,确认任务中心只新增一个任务,且不会重复扣除积分。
- [ ] 首次任务完成后不修改提示词、模型、参数和参考素材,再次点击生成,确认出现“再次生成相同内容”二次确认;取消不创建任务,确认后只创建一个新任务。
- [ ] 分别修改提示词、模型、分辨率/时长和参考素材后生成,确认视为新内容,不弹重复确认。
- [ ] 执行分镜批量生成、Agent 自动生成和显式重试,确认不会被手动重复确认弹窗阻塞。
## 画布快捷键中心
画布搜索已统一为 `Ctrl/Cmd + F`,专注模式调整为 `Shift + Ctrl/Cmd + F`;原快捷键长列表已改为可搜索、可分类的快捷键中心。以下场景仍需浏览器确认:
- [x] 快捷键目录筛选专项测试、`web` TypeScript 检查与生产构建通过。
- [ ] 在 Windows 和 macOS 分别按 `Ctrl/Cmd + F`,确认打开画布节点搜索且不会触发浏览器页内查找。
- [ ] 按 `Shift + Ctrl/Cmd + F`,确认进入或退出专注模式;按 `Ctrl/Cmd + K` 不再打开节点搜索,并保留工作区命令面板入口。
- [ ] 打开快捷键中心,分别搜索“粘贴”“缩放”和“Alt L”,确认结果与分类计数正确,清空搜索后恢复完整列表。
- [ ] 确认浅色/深色主题下标题、分类选中态、搜索焦点环、键帽和滚动区域清晰可见。
- [ ] 在窄窗口确认分类可横向滚动、快捷键列表改为单列,弹窗不超出视口且长内容仅在列表区滚动。
## 管理后台在线更新
管理后台已新增“系统配置 → 系统更新”,并通过宿主机 Host Updater 执行强制备份、迁移、切换、健康验证和失败回退;以下场景需要在真实 Linux Docker Compose 服务器完成最终确认:
- [x] 后端 Host Updater、Unix Socket 客户端、管理员 API、版本比较和状态持久化相关测试通过。
- [x] 前端 TypeScript 检查、生产构建、侧栏入口、更新器未安装空态、更新器连接态、GitHub Release 日志、浅色/深色主题浏览器验收通过。
- [x] Compose 配置校验、systemd 安装脚本语法和 Release 二进制构建命令通过。
- [ ] 在生产更新前生成 PostgreSQL + 数据目录 ZIP,确认 `.partial` 不会被当作有效备份,最终 ZIP 可打开且 SHA-256、元数据、`database.dump`、`backend-data.tar` 均有效。
- [ ] 从首个在线更新版本升级到包含 schema v2 的测试版本,确认旧服务先 drain,迁移服务独占执行,目标 build version 和 schema version 在稳定窗口内一致。
- [ ] 人为让目标版本健康检查失败,确认自动恢复旧 Compose、旧镜像和数据库备份;旧版本因 schema 过高拒绝启动时,必须在数据库恢复完成后才能重新健康。
- [ ] 在拉取镜像、创建备份、迁移、启动和健康检查阶段分别模拟失败,确认停服前失败不会改变运行版本,停服后失败进入回退,回退失败明确显示“需人工介入”。
- [ ] 更新期间刷新页面、关闭浏览器和 Backend 短暂不可用,确认宿主机操作不中断,恢复后日志与最终状态完整。
## 管理后台存储资源
管理后台已新增资源列表、筛选、去重容量统计、预览下载和安全批量删除;以下场景仍需使用真实资源数据确认:
- [x] 后端专项测试覆盖管理员权限、筛选校验、共享对象去重统计、历史本地资源预览、部分删除成功、公告/画布引用阻止、共享物理对象保留、审计失败事务回滚和 100 项上限。
- [x] `web` TypeScript 检查通过;只读阶段与删除阶段均复用同一资源页面和统一 API 客户端。
- [ ] 在 `/admin/resources` 分别按资源 ID、对象路径、用户 ID、类型、状态和存储类型筛选,确认分页与筛选 chip 一致。
- [ ] 预览并下载本地、阿里云 OSS、腾讯云 COS、七牛云 Kodo 和 S3 的图片、视频、音频与普通文件,确认 Range、登录 Cookie 和错误提示正确。
- [ ] 选择一个仍被公告、素材、画布、项目、风格、工作流或镜头产物引用的资源,确认删除结果显示真实引用来源且业务数据和物理对象均保留。
- [ ] 批量选择“可删除、仍被引用、不存在”三类资源,确认只删除安全项,列表和统计刷新,审计事件与 outbox 数量一致。
- [ ] 创建两条共享同一物理对象的资源记录,只删除其中一条,确认另一条仍能预览且物理对象未清理;两条同时删除时确认只产生一个物理删除任务。
- [ ] 模拟对象存储暂时失败,确认资源记录事务仍成功、删除任务保留并重试,恢复后物理对象最终清理。
## 短剧分镜工作流工作台
短剧工作流已按镜头生产重构为单层项目工作台,并将资产绑定、镜头编辑、生成预览和整集镜头轨道放入同一视口;以下场景仍需用户在真实项目数据与模型渠道下确认:
- [x] 工作流路由保留系统全局侧栏和顶栏;项目头部压缩为单行,移除额外六阶段横条,项目导航入口改为“分镜制作”。
- [x] 项目详情 API 对旧后端可能缺失的工作流、镜头版本、产物、引用、候选资产和文件夹数组统一规范为空数组;使用缺失这些字段的响应完成浏览器复现,页面正常加载且控制台无错误。
- [x] 未初始化章节不再显示阻断式居中空态;镜头编辑器可直接查看和保存,首次真实生成时按当前章节自动建立工作流记录。
- [x] 分镜脚本、黑白动作预演、视频生成共用资产栏、镜头表单、预览/历史栏和底部镜头轨道;前端生产构建通过。
- [x] 模型、时长、画幅、分辨率和镜头语言合并为默认折叠的“生成设置”,模型提示词与接戏信息合并为默认折叠的“生成补充”;折叠摘要会显示当前关键参数,浏览器展开/收起验证通过。
- [x] 删除项目头部重复且发生重叠的“新增分镜”入口,只保留底部镜头轨道中的新增卡片;1280px 与 1680px 浏览器检查无横向溢出,系统全局侧栏保持可见。
- [x] 右侧产物阶段从标题旁的隐藏下拉框改为常驻三段切换,分镜图、动作预演和镜头视频始终可见;1280px 与 1680px 下切换路由、阶段文案、最新/历史状态和全局侧栏浏览器验证通过。
- [x] 底部镜头卡片取消悬浮上移和向外扩张的选中阴影,改为不改变坐标与尺寸的底色、边框和内描边反馈;右侧移除“复制参数”“入素材库”,仅保留并排的重新生成与下载,1280px 浏览器悬浮和布局验证通过。
- [x] 镜头编辑器改为脚本优先顺序:镜头名称与画面、镜头资产、表演与动作、对白/旁白优先展示,生成规格和模型补充保持折叠;字段统一为画幅、镜头时长、机位角度、运镜方式、排除内容和接戏备注等生产术语。
- [x] 编辑器标题实时反映镜头名称与“已保存/有未保存修改/保存中”状态;无修改时禁止重复保存,切换或新增镜头前会拦截未保存修改。浏览器交互验证通过。
- [x] 镜头保存使用真实版本写接口;资产点击绑定具体版本;生成统一进入后端任务生命周期,成功后登记对应镜头产物;下载使用带登录凭据的资源接口。
- [x] “生成设置”新增技能库多选,分镜图、动作预演和镜头视频统一通过 Skill Runtime 解析,任务与镜头产物记录技能版本和实际引用文件。
- [x] 镜头资产支持再次点击或从已绑定标签取消引用;解绑使用归属校验的独立写接口,并使该镜头旧产物失效。动态提示词复用画布 `@` 引用编辑器,已绑定图片和角色会按实际参考图顺序解析后提交;后端全量测试、前端专项测试和生产构建通过。
- [x] 镜头生成资产解析改为同时保留绑定版本视觉快照与当前角色卡声音配置;角色主图、场景图和声音样本按 `图片N` / `音频N` 写入 `【资产参考】`,并自动补充声音画像与镜头台词。历史角色版本 + 新版声音绑定的后端/前端专项回归通过。
- [x] 镜头编辑器底部在“保存脚本”左侧新增“删除镜头”;二次确认后原子清理该镜头的脚本版本、资产引用、生成产物、候选资产和生产任务关联,压紧剩余镜头顺序并自动切换到相邻镜头。
- [ ] 使用包含角色、场景、道具和画风的真实项目,确认左侧分类、绑定状态、参考素材标签和镜头切换保持一致。
- [ ] 分别删除首个、中间、末尾和唯一镜头,确认二次提示、相邻镜头切换、空态、镜头编号、总镜数以及刷新后的数据一致;有未保存修改时确认提示明确且取消不会丢失内容。
- [ ] 在同一镜头绑定角色和场景后输入 `@`,确认菜单、行内缩略图和生成请求中的“图片 N”顺序一致;分别从左侧资产行和已绑定标签取消引用,确认刷新后状态一致,旧 token 会阻止生成并提示重新选择或删除引用。
- [ ] 使用“分镜绑定角色旧版本、角色卡随后绑定声音”的真实项目生成镜头视频,确认请求包含旧版角色主图、场景图、当前声音样本、声音画像和镜头台词,且媒体角色为参考资产而非首帧。
- [ ] 配置一个图片模型和一个视频模型,分别生成分镜预览、动作预演与视频,确认任务中心、镜头历史、最新预览和阶段状态同步更新。
- [ ] 在浅色/深色主题及 1280px、1050px、760px 三个断点检查项目导航、表单滚动、右侧预览和底部镜头轨道,确认没有遮挡或不可达控件。
- [ ] 验证下载视频、复制生成参数、将任务物化产物加入项目素材库、章节切换与新增分镜;确认失败任务展示真实错误且不会伪造产物成功。
## 章节分镜生成到分镜制作
剧情章节的分镜入口已从“在画布中分镜”纠正为“生成到分镜制作”;生成结果直接写入镜头脚本,并在本章已有分镜时执行显式替换确认。以下场景仍需使用真实项目与已安装技能确认:
- [x] 章节正文、项目画风、当前角色版本和项目资产统一进入 `agent_storyboard_rows` 任务;分镜生成继续经过 `Skill Runtime` 的 `shortDrama` profile,并记录实际技能版本和引用文件。
- [x] 本章待确认角色也会进入分镜上下文;模型在 `characterIds` 中返回角色名称时,已确认角色自动映射到真实资产版本,待确认或未知角色降级为仅名称引用,不再触发结构修复请求或报废整份分镜。后端专项测试、前端映射测试与生产构建通过。
- [x] 分镜任务结果映射到镜头画面、动作、对白、景别、机位、运镜、图片/动态提示词与接戏备注;模型返回的项目资产关联随镜头在同一替换事务中保存。
- [x] 本章无分镜时直接写入“分镜制作”并跳转到分镜图阶段;已有分镜时展示镜头、脚本版本、资产引用、生成产物和候选资产影响数量,生成失败不修改旧数据。
- [x] 技能多选框占满弹窗内容宽度;专项测试、TypeScript 检查、后端服务测试和前端生产构建通过。
- [ ] 选择 1 至 4 个已安装技能生成真实章节,确认任务中心中的技能版本、文件来源和生成结果一致,完成后进入对应章节的“分镜制作 / 分镜图”。
- [ ] 使用已提取但尚未确认资产的“张振天、张天昊”重新生成真实章节,确认镜头正常落库、提示词保留角色名称;确认角色资产后再次生成,确认同名角色自动带上真实资产与版本 ID。
- [ ] 对已有镜头、历史脚本、资产引用和生成产物的章节重新生成,分别验证取消替换、模型生成失败和确认替换:前两者保留旧数据,确认替换后旧关联被移除且新资产引用可用。
- [ ] 在 560px 及更窄视口打开设置弹窗和技能下拉框,确认选择器、选项面板、长技能名称和替换警告没有横向溢出。
## 短剧项目导航与制作概览
项目设置、章节导航、制作概览、镜头轨道和画布新增入口已按长篇短剧工作流重构;以下场景仍需使用登录态真实项目确认:
- [x] 项目新增 `cover_resource_id`,服务端校验资源归属、就绪状态和图片类型;项目主图被资源删除流程识别为直接引用。章节新增持久化 `word_count`,新建、导入、更新和旧数据迁移均维护字数摘要;后端全量测试通过。
- [x] 项目设置可从个人图片素材、项目图片素材或实时上传中设置主图;项目列表优先显示主图,未设置时回退画风示意图。分镜制作头部改为上一章、搜索定位、下一章的虚拟章节导航;前端生产构建通过。
- [x] 修复项目更新仓储遗漏 `cover_resource_id`,避免接口返回“主图已更新”但数据库字段仍为空;回归测试同时校验设置与移除主图后的数据库重读结果,后端全量测试通过。
- [x] 剧情章节列表去除装饰性侧边表达并显示状态、字数、画布数;制作概览新增六阶段标准流程、当前指标、制作缺口和可点击快速入口;底部镜头卡增加画面、加粗时长、镜头参数、产物版本与绿色成功状态。
- [x] 画布空白区域双击改为直接打开已有新增节点面板,并保留双击位置作为节点落点;原“适配内容”能力继续由缩放控制区提供。
- [ ] 在项目设置分别从个人素材、项目素材和上传图片设置主图,刷新项目列表后确认图片一致;替换、移除主图后确认回退逻辑正确,尝试删除当前主图资源时确认显示项目引用来源。
- [ ] 使用 2500 章项目搜索章节序号和标题,确认定位弹窗桌面端为 5 列、默认每页 100 章,搜索区与分页区保持同一表面;连续切换上一章、下一章并刷新页面,确认当前位置、总章数、字数和路由一致。
- [ ] 在制作概览点击剧情、资产、分镜、预演、视频、交付和三个快速入口,确认跳转到正确章节及阶段,真实镜头产物数量与完成状态一致。
- [ ] 在浅色、深色主题和 1280px、1680px 宽度检查镜头卡,确认时长明显、标题与镜头参数不溢出、“已生成”为绿色且选中态仍使用工作台强调色。
- [ ] 在画布不同缩放和平移位置双击空白处,确认新增节点面板直接打开,选择文本、图片、视频和扩展节点后落点接近双击位置;双击节点、弹窗和其他浮层不应触发新增。
## 工作台首页创作仪表盘改造
参考模板 Dashboard 将 `/home` 首页重构为创作仪表盘(欢迎区 + 统计卡 + 活跃度/素材图表 + 最近项目表格),以下场景仍需要浏览器确认:
- [x] `web` 前端 TypeScript 检查通过;旧首页样式类已随页面重写移除。
- [ ] 登录用户确认欢迎区显示用户名、主操作跳转 `/projects?create=1`、打开画布按钮在未登录时引导登录。
- [ ] 确认统计卡数值与项目/画布/素材/任务页面一致:进行中项目、自由画布、素材资产、本周任务。
- [ ] 确认创作活跃度图表随 7/14/30 天切换刷新,生成任务与画布更新两个系列与任务中心/画布列表一致。
- [ ] 确认素材构成环形图按类型统计正确,无素材时显示空态文案。
- [ ] 确认最近项目表格的搜索、状态筛选、排序与分页行为,行点击进入项目概览;无项目时显示创建入口。
- [ ] 确认快捷创建与工作流面板入口可用,工作流提示显示最近项目阶段与章节完成度。
- [ ] 验证浅色/深色主题与窄窗口(表格横向滚动、统计卡换行)下可读可操作。