无限画布无限画布

待测试

当前版本已实现但仍需人工验证的变更项

  • XCamShow 三个 Partner 视频工具(video-face-swap、video-undress、video-pose)已按画布 a13e3168、Scheduler 06d1a244 窄部署美国生产:按模型与订单 ID 稳定散列,约半数优先既有 GPU 工作流、半数走 Wan3.0。GPU 优先订单需通过 Scheduler 原子即时准入;仅对已持久取消的专用 409 gpu_not_immediately_available 以同一订单回退 Wan3.0,结果不明确时不二次提交。姿势云端首阶段为 qwen-image-3.0-pro,GPU 分支保留原姿势图/Klein 身份恢复/MiniMax 视频链路;模板、上传顺序及源视频前 10 秒合同和旧独立接口保持不变。隔离环境三项云端订单、换脸与脱衣 GPU 订单已完成;姿势 GPU 订单也完成并返回可解码 MP4,关键帧与源图对照未见明显结构或时序异常;缺失 LoRA 的即时准入返回 409、任务持久取消并转云端。定向测试 22 项通过,生产 Web/Proxy/Scheduler 运行时验证退出 0,公网 Partner 鉴权只读探针与 ic-doc 页面通过。仍待已登录 XCamShow 工具箱实测、并发抢卡、生产账本扣退及多素材质量抽样;旧容器保留作回滚。

  • 本轮候选把画布视频换脸统一到 /v1/video-head-swap-spicy → Wan3.0;画布工具箱与视频工作台换脸模型改为 video-head-swap-spicy。LTX 2.5 旧版保留为 video-head-swap-spicy-ltx25,Scheduler 旧接口不变,ic-doc v2 归档。后续 XCamShow 工具箱另有模板 Partner 接入候选,见下节;两者不要混作已上线状态。

XCamShow 模板视频换脸改走 Partner(本地候选,未发布)

  • XCamShow 后端候选将 video_faceswap 从直连旧 Scheduler 改为 Partner POST /videos、公开 model=video-face-swap,只传身份图和受控 template_id;轮询、结果保存和失败退款沿用现有任务链路。

  • Partner 校验 14 个字典 ID;Canvas Proxy 从美国区 spicy-cc-us 的 OSS 内网同键路径取得模板源视频。模板与普通上传视频都由服务端 ffmpeg 只取前 10 秒,再按身份图、源视频顺序送 Wan3.0。旧 Scheduler 接口和历史 LTX 模型不删除。

  • 14 个模板已借现有 OSS 跨区复制规则进入美国桶目标路径,并逐个核对大小与 ETag;静态与隔离单测已通过。仍待真实 Partner 提交、生成账本、10 秒输出和视觉验收。生产域名文档在正式上线前仍描述旧运行链路。

  • ic-doc Partner API 文档已发布 v2 当前合同,v1 的总览、图片和视频原文保留在固定版本归档路径;正式文档站的当前页、版本页、v1 视频页均已返回 HTTP 200。后续仍需由 Partner 集成方按实际请求校对示例输入与任务回执。

视频换脸v2 · 破甲 DeepSeek 遮挡选路(开发站已部署,待用户素材验收)

  • 画布视频工具箱与视频工作台新增「视频换脸v2」入口,旧的 视频换脸、DreamID-V 视频换脸、Wan3.0 视频换脸/视频换人 入口全部保留。输入为 1 张人脸图 + 1 条 1–15 秒 MP4/MOV,480p/720p、30fps、保留原音频,计费固定 15 秒。
  • 服务端用内网 opencode-spicy 的破甲 DeepSeek(deepseek-v4.1-flash,绿网 disable)抽 6 帧做遮挡判定:任一抽帧缺可读人脸就走 wan3.0-video 参考生成(下绿网,使用现有固定换脸提示词),每帧都可读就走 DreamID-V 逐帧换脸。判定与提交在后台协程执行,任务阶段与选路结果可轮询;判定被打断提示重新生成,提交结果未知提示核对且不自动重发。
  • 路由判定 JSON 合同修正(开发站 Proxy 已部署,8e262927e154120167ea96313a5fe52ef6ff0cf7):沿用 OpenCode Spicy 为 DeepSeek 注入的 system prompt;本轮 user prompt 只提交 6 张源视频抽帧,不提交人物参考图,并要求 JSON 同时给出 face_occluded、route 和 occlusion_reason。route 必须与遮挡布尔值一致;非 JSON 或互相矛盾的结果不会直接选路,而会触发第二次简化提问,之后才按现有显式兜底策略处理。ecs110 隔离测试 43 项通过;dev 运行容器用合成 14 秒视频抽出 6 帧,真实模型返回 route=wan3、face_occluded=true、route_source=model、route_answer=json;完成旧镜像回滚、候选恢复及两轮完整 runtime 校验。真实用户素材的选路准确率与最终视频视觉质量仍待验收。
  • ecs110 隔离验证:Web 全量测试与基线 db9b2083 逐条比对新增失败 0;Proxy 全量测试 4 个失败与基线同名同因(镜像内无 WAN3_1_*),新增用例全通过;部署后模型 /v1/models ready=true。dev.ic.xshow.live 窄部署 Web+Proxy(85a6ee4da9c0c221e607ceb5d97ae8f9cb073868)完成首次应用、回滚、最终应用与完整运行校验;登录态浏览器确认工具箱出现「视频换脸v2」卡片、旧卡同屏保留,视频工作台「工具」页签显示「视频换脸v2 · 智能选路」。后续低帧率修复以 Proxy-only 窄重建上线(d87c31fed82bfab8ecd79c4b8ba078d434bb25fb,Web 镜像沿用兄弟分支已上线的 7c840afa5ebad2ef6651fe1cf443fa95567492ba 未动)。
  • 现场探针:全清晰抽帧 → DreamID,手挡脸 → Wan3,清晰+遮挡混合 → Wan3;另用纯色图确认图像确实进入该模型。
  • 低帧率源视频修复(开发站已部署):真实提交路径发现 Wan3 上游要求参考视频 ≥16fps,15fps 源视频在遮挡分支被百炼以 InvalidParameter: Video frame rate must be >= 16fps, got 15.0fps 拒绝。_normalize_wan3_boundary_video 现在同时处理两个上游门槛:>15 秒截断(流拷贝)与 <16fps 补帧(内置 ffmpeg,libx264 veryfast crf20 + aac,上传名与类型归一为 MP4),两者可同时生效;补帧失败时以明确中文错误终结任务,不再把低帧率素材送去上游。源码 d87c31fed82bfab8ecd79c4b8ba078d434bb25fb 隔离测试 Proxy 346 passed / 4 failed(4 个失败与基线同名同因,新增 4 项全通过)。
  • 部署闸门实测(运行中容器,不看构建日志):候选镜像内对真实 15fps 素材调用补帧 → probe_fps_before 15.0 normalized True probe_fps_after 24.0 duration_after 14.0;候选首次应用、回滚、最终应用与每轮完整运行校验全部通过。回滚 override 现在同样注入 OPENCODE_SPICY_*——否则回滚只换镜像会把 v2 打成 503(该缺陷本轮由闸门自身抓到并修掉)。
  • 判定不再卡死(开发站历史版本,0ebb19208a1a179276c77045f274bcde2a0c056b):判定改为两次尝试,首次没有结构化结论就用极简二元追问再问一次(最多再等 120 秒);该历史版本曾把部分自然语言表态当结论,本轮 JSON 合同修正后已不再直接据此选路。两次都没结论时按写明的策略默认值把链路跑完——内容拒答 → 本地 DreamID-V,仅答非所问 → Wan3.0。任务状态的 route_source/route_answer/route_fallback 与轮询的 route_source、route_reason 区分模型结论和策略兜底;真正的服务侧故障仍保留错误。历史验证记录见 reports/face-swap-v2-dev/VERIFICATION.md。
  • 视频工作台按钮置灰归因:视频换脸v2 等换脸卡片在余额不足时只显示灰色「开始生成 ⚡150」、不解释原因。本轮确认为积分闸门(creditQuote.canAfford === false)而非功能缺陷,并为 QA 账号经官方管理端接口补足额度;是否在按钮上直显「积分不足 19/150」尚未实施。
  • 待用户素材验收:人脸相似度、遮挡段身份稳定性、音频保留与 15 秒边界;判定属概率模型,真实素材误判率需抽样统计。main 已包含视频换脸v2 与本轮 JSON 合同修正;开发站完整部署仍需持续核对 OPENCODE_SPICY_* 运行配置。详见 reports/face-swap-v2-dev/VERIFICATION.md。

DreamID-V 视频换脸(开发站候选)

  • 新增独立 video-face-swap-dreamid 模型,视频工作台和画布工具箱接入 1 张人脸图 + 最长 15 秒 MP4/MOV;支持 480p faster/16 步与 720p dwpose/20 步,不替换现有 BFS/SCAIL2 视频换脸。
  • Partner 复用 /api/partner/v1/videos 的 Bearer、幂等键、查询、下载与取消契约。vps66 私有适配器按 121 帧顺序分段,在 NAS 存放临时/最终产物,并回填源音频。开发站已启用私有适配器、受限隧道和 Proxy 配置;/v1/models 返回 ready=true。Partner 的 720p/dwpose 真任务完成并下载 45 帧、1.5 秒、带 AAC 音频的 MP4,重复幂等键返回同一任务。已登录浏览器的视频工作台 480p/faster 任务完成、记录可回看;真实画布工具箱也已从选中素材、创建 DreamID-V 流程、生成到刷新后输出节点播放全链路通过,视频 464×832、1.5 秒且带 AAC 音频;首中尾关键帧已人工对照。工具模式分次上传素材时模型不再跳走;最新 Web 源码 b7eb34497821abe9ef7943bec2898a6a2e686c68 已在开发站窄部署,配置卡正确显示跟随源视频、最长 15 秒、30fps 与原音频,完整运行检查通过。验证记录与回滚见 reports/dreamid-v-dev/VERIFICATION.md。正式站尚未部署;完整 15 秒、多段、不同构图质量和独占 GPU 峰值仍待验收。

Wan3.0 视频换脸 / 视频换人 / 视频脱衣工具(正式发布候选,待浏览器验收)

  • 本轮将默认“视频换脸”和 Partner faceswap / video-face-swap 统一切换到 wan3.0-video R2V。工作台根据已读取的源视频时长设置输出秒数;Partner 由 Proxy 实际探测上传视频,均向下取整且最长 15 秒,不会比源视频更长。

  • 视频工作台与画布工具箱新增两个独立入口,均调用 wan3.0-video R2V,限定 1 张目标人物图及 1 条源视频;换脸与换人采用不同提示词。该模型是参考生成,不保证源视频逐帧精准保留。源视频遵照用户要求仅作输入,不查看内容。

  • GitHub main 源码 8ef9729eaf3a56fbf127c8f73a941f70c14622b4 已在 dev.ic.xshow.live 窄部署 Web;ecs110 隔离定向测试 24 项与 Next 构建通过,完整 runtime 校验及实际回滚/恢复通过。实际登录浏览器验收被现有测试凭据失效拦住,真实模型效果与音频边界仍待确认。详见 reports/wan3-video-swap-dev/VERIFICATION.md。

  • 可见性修复:原入口只在“工具”页签,用户在“提示词”页签看不到。源码 0d36afa2734ccac6f8339c577c6a1fa41c744cb3 将两张 Wan3 工具卡固定显示在创作方式下方,默认视图和工具视图均可见;dev.ic.xshow.live 新 Web 镜像已发布、完整 runtime 校验和旧镜像回滚/恢复通过。登录态浏览器的新版 UI 仍待复核;遵照用户要求不查看源视频内容。

  • 交互修正已发布开发站:两个 Wan3 入口归回“工具”页签;选中任一工具后显示专用提示词、目标图和源视频上传控件,并将图片/视频上传上限限制为各 1 项。选中工具时不再展示无关的自动尾帧与续拍操作。源码 d68ec9152116927475f122ce6bac07ca004daf9d 隔离测试 75 项与 Web 构建通过;Web 镜像按 GitHub SHA 构建并完成首次应用、回滚、最终应用及三轮运行校验。登录态新界面和真实模型视觉效果尚待验收;本轮未查看用户源视频内容。

  • 专用表单去重已发布开发站:工具选中时只显示对应提示词、目标图与源视频输入;通用参考图/视频、尾帧、音频、文档、网页区域不再重复出现。专用区列出已选素材并提供移除按钮,旧草稿里不兼容的参考素材可单独清理。源码 6909aad47347e586d47fbdce58d5beacd66b4357 经隔离测试 75 项及 Web 构建;运行 Web 镜像 b7eb3449 包含该提交。并行发布切换镜像后补齐开发站 Web 完整环境配置,最终运行校验通过;登录态浏览器新 UI 尚待复核。

  • 新增第三个同族入口「Wan3.0 视频脱衣」(画布视频工具箱 + 视频工作台工具页签):与换脸/换人共用 wan3.0-video R2V 和同一份工具合同,但输入只要 1 条源视频、不吃参考图。三个工具都会请求服务端按源视频时长、分辨率和帧率整理最终输出。工具语义集中在 web/src/app/(user)/video/wan3-swap-tools.ts;残留参考图会在专用输入区给出「移除无关参考」一键清理。

  • Wan3.0 是参考生成,不是逐帧视频编辑:脱衣同样是「重新生成一个同人同场景的画面」,不承诺像素级保留源片、原音频或衣着下的人体细节一致性。真实模型效果必须用授权素材验收,本轮未提交真实任务、未产生 GPU 计费。

视频去马赛克分支整合(待实际视觉验收)

  • 将三个视频去马赛克分支的画布工具箱、Partner 路由、VDE mosaic_remove 阶段、管理员视频清理 Proxy 路由与源码/Docker 文档整合到线性主线候选;本地并行未提交改动未纳入或覆盖。
  • ecs110 隔离候选已通过 Proxy 清理合同 9 项、VDE 相关 22 项和 Web 定向回归;完整 Web 类型检查与原 main 同为 16 个旧错误,本轮未增加。源码合并及单测不代表 GPU 实际视觉效果通过。
  • 待核对正式站部署 SHA、Web/Proxy/VDE/Scheduler 链路、真实视频首中尾关键帧及回滚;本轮未部署生产。

GPU 调度器卡片仪表盘(待上线验收)

  • 画布顶栏新增调度器入口;画布调度器与管理后台资源区改为自适应多卡网格,参考 AI Toolkit GPUWidget 的指标分区、负载/显存条和布局,使用画布主题 token;保留实例、能力详情和管理员 ComfyUI 入口。
  • 补充 GPU 主机只读硬件采样(型号、温度、核心频率、功耗、功率上限、利用率)及每个 ComfyUI 实例的原生运行/等待队列;风扇传感器不支持时继续显示“未上报”,采样超过 30 秒不显示为实时值。平台任务与 ComfyUI 直接任务分开计数,并显示已归属平台任务的工作流名称。
  • 上线后仍需在原画布鉴权路径和后台完成浅色/深色、窄屏、真实遥测及运行/等待队列对账;GPU 高负载还可能来自非 ComfyUI 进程。

Krea2 Turbo v2.5 姿势工作流换新版画布(候选)

  • workflows/krea2-turbo-v25-edit.json 候选改为新版画布的前端等价 API prompt:节点集合、节点 id 与连线与 Scheduler main 现行文件一致,仍以 1014:984(DonutFaceDetailer)为最终图、2000 为唯一最终 SaveImage,运行时剔除预览/WAS 输出;平台画布、Proxy、Partner 与视频姿势的字段、模型名、LoRA 白名单和任务合同均未改动。
  • 导出件把 1014:984.max_faces、1014:989.denoise、1014:989.tiled_diffusion 回退成旧值,候选用 krea2-turbo-v25-edit.overrides.json 复原为 Scheduler main 已确认的 13/0.35/true;同时剔除 893 的两个客户端只读展示键(当前输出宽度/当前输出高度,不是节点输入,携带会让 validate_prompt 报 invalid input)。
  • 按用户确认,姿势路径第二个 LoRA 槽位由 Scheduler f0072d6 之后的 Off/None 改回 On + KNP_000003000.safetensors(对该次“isolate LoRAs”的有意反向),补丁为 deploy/scheduler-pose-2000/scheduler-main-7941725-knp.patch(针对 main 7941725,同时更新 test_toolsbox_pose_edit.py 断言);只替换工作流文件而不应用该补丁时,生产生效差异仅剩只喂给被剔除节点的 777.seed。
  • 新增 scripts/comfyui-ui-to-api-prompt.py、UI 原件 krea2-turbo-v25-edit.ui.json 与差异复原文件;python3 deploy/scheduler-pose-2000/test_candidate.py 14 项离线检查通过。跨仓离线验证:把该工作流换进 Scheduler main 检出后 python3 -m unittest test_toolsbox_pose_edit 8 项通过,叠加 KNP 补丁后再跑仍 8 项通过。
  • 已在 vps66 真机验证(ComfyUI 8189 = GPU 1):object_info 比对无缺失节点、无 COMBO 不匹配(含 KNP_000003000.safetensors 与 krea2/sex/krea missionary.safetensors,两个 KNP 版本并存);按 Scheduler patch 口径打补丁后真实出图 success(墙钟 30.0 秒,1152×2048 PNG),人工看图通过:同人同发型肤色、办公室背景保留、missionary 构图生效、无重影撕裂残肢。
  • 待验证:真实加载工作流并检查“工作流总览”错误面板与 validate_prompt();走调度器 /v1/toolsbox-pose-edit/ 的真实 HTTP 链路(Proxy、Partner 鉴权/签名、计费、任务持久化);Partner 图片姿势→Klein 精准换脸与 video-pose 现有视频阶段;采集排队、GPU 执行与逐卡显存峰值;逐张/逐帧目视验收视频关键帧。
  • 本轮未做生产部署;Scheduler 仓库的候选分支 codex/krea2-pose-canvas-revision 因 key 只有读权限尚未推送,vps66 那套调度器仍是 ae79e85d… 旧版本,生产仍运行现有工作流;Scheduler 侧 SHA 与实测数据在验收通过后再写入 backend/gpu-api/reference.mdx。

画布 Agent 左侧会话历史

  • 网站 Agent 参考 DSH 的会话结构,将“历史”从聊天区顶部标签移到左侧常驻栏;左侧可新建、切换、单条删除或清空会话,连接配置与运行日志也收纳在侧栏底部,右侧只保留当前会话与输入区。
  • 会话数据、当前模型、工具调用和日志合同不变;窄屏保留 136px 侧栏,桌面为 168px。待在开发站实际核对深浅主题、长标题、长历史滚动、键盘操作及 390px 窄屏布局。

视频换脸/换人源比例与 Partner 合同

  • 开发候选将普通 video-face-swap 与 video-person-swap 的首帧、图片结果及 SCAIL2 输出统一为源视频显示比例,在 458752 像素、896 长边和 32 对齐预算内补边;覆盖横屏、竖屏、方形、旋转与像素宽高比,不改 Spicy、模板和独立 SCAIL2 默认值。
  • 任务持久保存几何信息,阶段切换及重启恢复使用原值;旧在途任务沿用原合同。UI 不再把这两个模式统一标为固定竖版。
  • Partner 文档补齐逐模型输入顺序、时长/音轨/尺寸限制、Auto 路由、异步状态和错误;Python 示例覆盖 GIF 后缀、模板、双身份图及原任务继续查询,并有无网络合同测试。
  • 隔离单元/路由回归与类型检查通过;开发站已用横屏 1280×576、竖屏 720×1278、方形 576×576 三个真实任务验收:成片与中间图分别为 896×384、512×896、672×672,音轨保留,视觉核对方向保持、无拉伸撕裂、补边为细黑边、身份已应用。
  • 美国生产已同步 Scheduler 7941725 与 Web 6ce0a997,production_runtime_check=ok、gpu_cleanup_contract=ok;回滚容器为 ic-us-scheduler-before-videoswap 与 ic-canvas-web-before-gpu-image-release。
  • 待用户确认:生产域名实际提交横屏/竖屏/方形源视频的效果与 Partner 文档描述一致;旋转源被拒绝的提示文案是否符合预期。

Partner 视频姿势按比例路由

  • XCamShow Partner video-pose 先执行 Toolsbox 姿势编辑,再以姿势图为目标底图、原始上传图为头部身份参考执行标准 Klein 精准换头;该 Partner 链路不再使用 BFS。普通画布姿势图片编辑、Partner image-pose 的 Klein 精准换脸及普通画布 video-pose 原链路不变。
  • 换头后的姿势关键帧进入每任务一次性视频路由:20% 使用 MAAS_JUSTIN_SG_API_KEY 与对应新加坡 Workspace Base URL 调用百炼 Wan3 下绿网,80% 使用本地 MiniMax H3 DaSiWa I2VA。Wan3 明确提交拒绝、明确任务失败或成功但无视频地址时,复用同一张关键帧自动降级到本地 MiniMax,并保持原 Partner 任务 ID、计费归属和中间图接口;提交结果未知时不自动双发。
  • 已完成本地 Proxy 与 Scheduler 候选定向自动化回归;仍需在隔离环境分别强制 Wan3、本地 MiniMax、Wan3 明确失败降级三条路径做真实生成,查看姿势图、Klein 换头图和最终视频,并核对身份、头发、肤色、头身比例、手脚、服装、背景、重影、撕裂、下绿网 Key/Base 配对、任务计费及取消行为。

视频去水印升级为 DiffuEraser

  • 视频创作台的 watermark_remove 保持既有 Proxy、VDE cleanup_only 和中央 Scheduler 契约,GPU Worker 改为全片 OCR 定位、时域稳定像素提取精确轮廓、2px 遮罩补偿、DiffuEraser 时序修复,并直接复用原视频音轨;subtitle_remove 的 STTN-DET 路径不变。
  • vps66 隔离 canary 已用 1280×720、30fps 水印视频验证自动检测、上下叠加水印完整清理、输出解码、原 AAC 音轨、严格 manifest 与关键帧视觉效果;上线后仍需在视频创作台真实上传同类视频,核对任务历史、结果保存到“我的素材”、整段播放和运动物体经过水印区域时的纹理稳定性。

视频换脸超长源视频提交前校验

  • 视频换脸、换人和脱衣共用的 SCAIL2 链路在 Web 提交前校验源视频时长;超过后端 15.05 秒上限时直接显示当前时长与“请剪辑到 15 秒以内”,不再创建注定失败的 Scheduler 任务和生成记录。
  • 待测试站分别用 18 秒与 15 秒以内源视频验证:前者不产生上游任务,后者仍正常进入 Partner head-swap-bfs 图片预处理和 SCAIL2 视频阶段。

视频工具箱换脸复用 Partner 自动换头路由

  • 普通视频工具箱的 video-face-swap 不再依赖 Scheduler 的固定默认图片模型;提交前复用 Partner head-swap-bfs 的身份图分析、幂等持久化与自动选择,将 head-swap 或 krea2-bfs-v1 写入图片预处理阶段,之后继续原有 SCAIL2 视频阶段。
  • 新增项目 Skill 和只读预检,防止后续把工具箱与 Partner 的路由再次拆成两套。待测试站用真实身份图与源视频核对自动选择、中间换头图、最终视频、关键帧质量和总耗时。

GPU 图片 Proxy 与新文档入口

  • Krea2 文生图与 50 明星独立调用指南接入新 Proxy 图片导航;GPU 图片分类与执行后端标签修复,补齐旧模型别名计费归一化。不改变推理工作流和默认参数。隔离回归、构建与发布验收记录见本轮发布报告;真实全模型推理效果仍待逐项验收。

直播首页动效与 13000 创作恢复

  • 首页创作示意恢复直播语义:主播形象显现、镜头缓动、声音律动、互动提示和爱心浮动;保留原有黑曜/珍珠白主题和画布外无点阵约束,减少动态效果偏好下静止展示。
  • 6 项相关测试与深浅/桌面手机 4 项浏览器验证通过,实际检查图片优化资源可加载、动画随时间变化、窄屏边界与减少动态效果。恢复示意素材使用既有公共主播图片,不读取私有用户媒体。
  • 已将旧 13000 全部业务数据合入当前域名:原账号与密码哈希、2 个画布、13 条素材、86 个媒体对象、编辑历史、生成详情及积分账本。保留当前域名已有数据;旧配置与原始记录完整归档,旧会话导入后需重新登录。86 个媒体使用独立副本并通过全量哈希和域名 Range 验证。
  • 隔离浏览器真实点击“直播角色”卡片、读取 9 节点/7 连线与素材、刷新和返回重开通过。原账号密码未改,用户需在域名使用旧账号重新登录确认;无新活动回滚演练通过,有后续改动时拒绝直接删除。
  • TODO 已核对;数据恢复状态、发布验收和回滚记录见 artifacts/live-studio-restore/。

dev 域名黑曜珍珠白界面与画布任务恢复

  • 基于主线保留现有生图断线恢复、媒体缓存与视频工具箱错误处理,合入已验证的黑曜/珍珠白界面;小点仅出现在实际画布编辑区。目标为 dev.ic.xshow.live 现有 3000 Web,沿用其数据库、鉴权、Proxy 和媒体路由。
  • 修复新图像任务拿到 ID 后被恢复 effect 再次接管的问题;已有节点请求不启动第二套轮询。原版在浏览器复现同一任务并发轮询峰值 2,修复后为 1,刷新继续原任务且不重新提交。
  • 尚无用户所述“20 秒任务”的具体 ID,不能把本次复现当成该任务已经恢复;实际生成耗时仍须按任务链路核对。本项不改变供应商或计费协议。
  • 已上线 dev.ic.xshow.live 原 3000 Web;运行检查、24 个静态资源、签名媒体/Range 和域名深浅模式登录页均通过。媒体 CDN 分发原本未启用,保留同源回源配置。TODO 已核对,完整节点和供应商视觉验收仍保留;部署和回滚证据见 artifacts/dev-domain-release/。

视频工具箱确定性拒绝不再无限等待

  • SCAIL-2 视频换脸、换人和脱衣工作流的首次提交收到 Scheduler 确定性 HTTP 4xx 校验拒绝时,立即记录原始失败、释放积分预扣并停止自动恢复;既有 unknown 的恢复请求即使再次得到 4xx 也继续待核对,408、409、425、429、5xx 与网络中断同样不误退款或重复创建任务。
  • 根因现场中视频换人请求从未取得 Scheduler task ID,HTTP 400 被旧计费层转换为 unknown,浏览器持续恢复超过 150 分钟;历史成功任务实际约 1.2–7.8 分钟。候选集成测试 39 项通过,待测试站真实无效输入与正常视频换脸各验收一次。

MuleRouter 文生视频接入

  • W3.0 / Pro / Prime / Prime Pro 与 Berry 1.0 / Pro / Turbo / Pro Turbo 共八款支持显式 T2V 文生视频;参考图、首帧和首尾帧模式保持。两款 Turbo 已接入模型发现、凭据归属、计费名单和异步路由。
  • 修复 Berry 名称不含 video 被错误归类为文本模型的问题,前端视频模型列表与刷新后的供应商目录一致;补上配置 seed 到请求的传递。
  • 发布源码 74d140b5c5d65300ce6429bce093a36cb85a59ed。95 项 Web 回归及 4 项 Proxy 专项通过;完整生产镜像构建通过。类型检查四个旧错误及 Proxy 全量三个旧失败与主线基线一致,未标记为全绿。
  • 开发站 dev.ic.xshow.live 与生产站 ic.xshow.live 已部署同一源码版本的 Web/Proxy;新旧镜像 canary、dev 实际回滚、完整 runtime verifier 及两站登录后视频页/画布页面验收通过。
  • 八款模型用中性红纸船提示词各生成一条 2 秒视频,全部成功、解码通过,已查看首中尾帧;开发站真实浏览器确认 Berry Pro Turbo 可选及 T2V/4K 控件。计费预扣及用户历史回写保留合同测试证据,不冒充真实用户扣费全链路验收。

图片工作台旧任务恢复与重连提示

  • 本地代理明确返回 404 / task_not_found 时暂停本页自动跟踪,保留原记录并提示待核对,不伪造生成失败;暂停卡片隐藏持续计时、假进度和取消按钮。普通网络、鉴权与无类型网关错误仍按可恢复错误处理,同一连续断线只提示一次。
  • 修复源码 c3f90a2d30918c0003f1a30c87f12952487548f6 已部署至测试和正式 Web,镜像完全一致;62 项回归、208 个断言、构建和两环境 runtime verifier 通过。完整类型检查与基线相同,仍有 4 项既存错误。
  • 正式旧记录已按原环境真实结果恢复:15 条成功、6 条历史失败;21 条鉴权历史、19 个媒体读取与哈希通过,无余额写入。代码与数据回滚分别保留,恢复数据时不删除媒体。
  • 待用户刷新原浏览器确认旧缓存合并后不再刷屏;本轮浏览器自动化连接超时,未声称完成截图验收。TODO 已检查,无对应已完成项需要移除。

生成记录媒体预览修复

  • 最终结果预览先读取受保护媒体接口的真实 Content-Type,再决定使用图片或视频组件;修复视频命名空间中的实际 PNG 结果被强制交给视频播放器而显示“视频预览加载失败”的问题,并保留按需加载、Range 探测和点击重试。

Partner Spicy 视频创建修复

  • 修复 video-head-swap-spicy 头像裁剪判断函数导入作用域错误,避免身份分析结束后返回笼统 500;保留模型、输入顺序、裁剪策略和幂等键。
  • 新增路由级回归覆盖头像裁剪、无需裁剪、裁剪失败与普通视频换脸分支;真实视频生成与视觉质量仍需独立验收。已检查 TODO,无同名待办需要迁移。

Scheduler 候选补丁修复

  • 修复 deploy/scheduler-pose-2000/comfyui_api_server.patch 提示词常量缺少右括号的问题;同步修复 BFS 源码副本及补丁中视频阶段切换成功后缺少 return True、返回语句误落入 BFS 函数的问题。
  • 后续审查修复阶段共用文件名导致视频首帧被清理、持久化失败误删原始参考图并继续完成逻辑的问题;API 构图移除预览输出,避免缩略图进入下一阶段。python3 deploy/scheduler-pose-2000/test_candidate.py 的 5 项离线回归检查通过;覆盖补丁与副本一致性、组合语法、阶段切换/回退、输出筛选和哈希。候选说明明确 Scheduler 集成边界与 GPU/视觉验收待办;个人工具配置不纳入代码提交。
  • 本地轻量验证:Python ast.parse 检查源码副本与两份补丁依次应用后的源码通过;patch --batch 应用及 BFS 补丁与副本一致性检查通过;抽取视频阶段函数并模拟外部调用,确认 pose_image、bfs 两种入口均返回 True 且任务保持 PENDING、阶段变为 video。未执行真实生成或部署,仍待 Scheduler 集成与实际任务验收。TODO 无对应完成项需要迁移。

姿势图片编辑路由分离

  • 普通画布/Proxy 的 toolsbox-pose-edit 改为只执行 Krea2 Turbo v2.5 姿势图片阶段,完成后直接返回,不再自动进入 BFS 换头。
  • Partner image-pose 保持公开接口、参数、计费和任务 ID 不变;Web 使用内部 HMAC 签名标记,Proxy 验签后才让 Scheduler 在姿势图之后执行 Klein 精准换脸,外部表单不能伪造该分支。
  • Partner 独立 /api/partner/v1/toolsbox-pose-edit 使用静态 Route Handler 包装共享图片处理器,不再依赖 Next.js 不会提供的动态 params 上下文;缺少图片等非法请求应返回结构化 4xx,不得在业务校验前抛出 500。
  • Partner 路由 29 项 Web 回归、Proxy 图片编辑及兼容链路 38 项测试(另含 267 个参数化子项)和 Scheduler 候选 8 项离线检查通过。ecs110 隔离 canary 已完成真实 GPU 串行验收:普通 Proxy 路径只返回 1152×2048 姿势 PNG;Partner 路径先持久化同尺寸姿势中间图,再进入 klein_face_swap,最终返回 2168×3840 PNG,全链路可解码。高清正脸输入的热模型两阶段总耗时约 69 秒,目视确认身份、肤色、坐姿、黑裙、背景、手部与椅子结构保持,未见明显重影或撕裂;低清缩略图输入曾出现脸部暗化和眼部失真,已明确判为素材质量失败,不冒充通过。TODO 中已有 Partner 真实参考图效果对照项继续保留,用于更多真实业务素材覆盖。

Partner head-swap-bfs 自动路由实现

  • 保持原模型名、参数和输入顺序;仅分析第二张身份参考图,人脸框面积占整图不超过 50%(含 50%)走 Klein,超过 50% 走 BFS;姿态结果只作诊断,不再阻止半身、小脸参考图进入 Klein;无脸/多人脸返回 422。
  • 分析在计费前完成,路由在 PostgreSQL app_state 中持久化,重试固定模型、变更有效输入返回 409;检测不可用返回 503。显式 head-swap 与其他入口不变。
  • 待用人脸面积分别位于 50% 边界两侧的真实业务样本完成生成效果对照验收。

Partner Klein 换头

  • Partner 图片编辑新增 head-swap,固定两张输入依次为目标底图、头部身份图;复用已有 Bearer 鉴权、幂等、计费和任务生命周期。保留独立的 head-swap-bfs,不开放 head-swap-pro。
  • 待验证真实 Partner 图片生成效果;本轮不修改底层工作流、推理参数或 GPU 路由。TODO 无同名待办需要迁移。

Mathew 工作台分支整合

  • 整合模型路由、工作台草稿持久化、历史批次展示等 28 个原分支提交,保留主线圆角悬浮与主动收起行为。独立审查后修复历史图片回填被自动切换模型、视频拼接入口丢失两处回归。ecs110 隔离生产构建通过,68 项相关测试通过(961 断言);源码 2e28dc5d 已完成隔离验证并纳入 Web 发布清单;生产运行检查与浏览器用户场景验收分别记录,不将构建通过视为交互验收完成。

13000 智能尾帧执行恢复

  • 原因:开发 Compose 漏配 Media Worker,按钮提交的 4 个 extract-frame 任务一直 queued、无领取者和开始时间。补齐当前栈 Worker、同库与 Proxy 绑定、健康检查和自动重启,使用已核对源码的固定镜像;其他开发/生产容器未变化。
  • 原视频隔离抽帧、Worker 只读启动预检、6 项命令单测、Compose 渲染与 OCR 审查通过。启动后原 4 个任务全部成功,实际处理各约 5.6–5.8 秒;PNG 均为 1662×1246 RGB,字节和摘要校验通过,与隔离产物一致。已查看结果及源视频最后可解码帧,人物、画面与颜色匹配,画布已回写 AI Film 智能尾帧 节点与 ai-film-tail-v1 策略。
  • 证据与回滚见 artifacts/tail-worker-recovery/;TODO 已检查,完整节点/供应商验收仍保留,不以本次尾帧成功替代。未重建 Web、未修改生产或数据库结构。

黑曜与珍珠白 AIGC 工作台

  • 按 design/black-bg/ 参考图统一当前共享界面:深色纯黑、银灰面板,浅色珍珠白、银灰边界;首页、画布列表、生图/视频工作台、素材/Skill、登录及管理页沿用真实功能与中文文案。
  • 首页突出图像、视频、画布与 Skill 入口;背景改为原创的提示词输入、图像显现、视频分镜和画布连线动画,不沿用参考视频波浪。仅首页创作示意有循环动画,支持减少动态效果;编辑工作面保持静止。
  • 顶部导航对齐参考图的 7px 圆角、细银边、金属渐变和悬停扫光;二级菜单、模型选择器、账户子菜单、弹窗、抽屉及表格共用深浅色 token,危险/禁用/选中语义保留。另补 320px 导航布局与手机画布外观面板边界修复。
  • 画布背景采用明暗和位置略有变化的小点,按用户要求放大约 30%;深色白点、浅色银灰点。鼠标附近保留选定点/线网格反馈,空白模式仍隐藏点缀;既有主题偏好、画布数据和入口保存屏障保留。
  • 点阵范围修正:仅点击卡片进入后的实际画布编辑区保留小点;首页、画布列表、其他普通页面、登录/404 和生成等待卡片移除点阵,保留精致的黑银/珍珠白层次、导航反馈与 AIGC 创作动画。
  • 点阵范围修正已更新 13000 Web:镜像 ic-canvans2-web:canvas-dots-only-48ef3bca45f7。6 项单测、TypeScript、构建、OCR 审查通过;同镜像隔离浏览器 4 组深浅/桌面手机检查覆盖 9 类页面、真实卡片标题/空白点击、返回重开及刷新,13000 登录页深浅模式 2 项检查通过。运行镜像、健康、完整环境、网络/端口、Redis 与 VDE 绑定核对通过,其他开发和生产容器不变;证据见 artifacts/canvas-dot-scope/。
  • 本轮取代此前薄荷蓝、青蓝折射与波浪视差方案。TODO 已检查并更新视觉验收入口;真实生成结果、全部节点和供应商效果仍按原待办验证。验证记录与截图见 artifacts/black-pearl-ui/,未推送或更新生产服务。
  • 隔离验证:50 项单测、TypeScript 与构建通过;19 项交互回归、最终 4 组页面视觉检查及 6 项菜单/窄屏复验通过。OCR 复审无待处理问题,最终源码与构建快照逐文件一致,临时服务与浏览器已清理。
  • 按用户要求部署到 13000:仅重建 ic2-dev-web-1,镜像 ic-canvans2-web:black-pearl-f0eb2548b0ae,与隔离验证镜像 ID 一致;健康、登录页 HTTP 200、完整环境/网络/端口一致性、Redis DNS、VDE token 一致性通过,其他开发与生产容器未变化。部署后浏览器登录因现存测试凭据无效未完成,未重置账号;登录后页面与卡片交互沿用同镜像的隔离验收记录。回滚镜像 ic-canvans2-web:rollback-before-black-pearl 与部署记录见证据目录 deployed/。

本轮视觉修改已撤销

  • 已撤销 TapNow 配色、视频参考浅色配色、Shader 页面转场与 Lenis 滚动,恢复会话前源码和 13000 Web 镜像;既有鼠标跟随网格与加载优化保留。
  • 回退至 ic-canvans2-web:grid-perf-2023bf254f18e393 对应镜像,容器健康、登录页 HTTP 200;11 项相关测试、40 个断言及范围 TypeScript 检查通过,git diff --check 通过。TODO 无对应事项需修改。本轮生成的截图与证据移至 /tmp/canvas-session-reverted-artifacts/,可恢复。

画布鼠标跟随网格与加载优化

  • 保留画布内鼠标跟随网格:线/点模式在光标周围 180px 柔和显现,离开后淡出,使用项目原有主题颜色;空白模式不显示网格。
  • 按用户最新要求保留加载优化:卡片悬停/聚焦预取;已确认成员角色的画布进入时免重复远端保存,新建及未确认画布仍等待持久化;并行恢复节点与助手媒体,忽略离页后的旧恢复结果。原有深浅色配色保持,180ms 页面进入动画继续撤销。
  • 验证:25 项测试、52 个断言通过,隔离快照 Docker 构建通过;OCR 复核四个加载优化文件未发现新问题。主题源码与原快照逐字一致。13000 Web 已更新为 ic-canvans2-web:grid-perf-2023bf254f18e393,健康检查通过,其他开发容器 ID 未变化。
  • TODO 已检查,没有对应待办需要迁移;待用户确认网格手感。
  • 加载优化恢复后,桌面/手机两项浏览器复测通过:模拟保存接口 503 时已确认画布仍可从标题及空白区进入、返回重开与刷新;新建画布仍留在列表提示失败并保留草稿;原配色及鼠标网格有效,无页面异常。本轮点击至工具栏显示样本为 312ms/264ms,不代表所有网络和画布的耗时。回滚镜像 ic-canvans2-web:rollback-before-grid-perf-2023bf254f18e393 已保留。
  • 前一步原配色恢复时,13000 桌面/手机两项浏览器验收通过:卡片标题与空白区进入、选择/重命名取消/导出/删除取消的事件隔离、深浅色恢复、光标网格渐显与离开淡出、刷新及返回重开;截图已实际查看,未出现页面异常。使用现有 admin 登录验证。

画布入口与新建恢复

  • 已复现新建画布尚未保存到服务端就进入编辑器,导致 presence/comments/history/collaboration/events 等初始化接口 404;列表与编辑器新建、卡片重试统一走原远端保存屏障,补充等待反馈和失败提示。失败保留草稿,同一卡片可重试;连续点击不重复创建,离页后不被迟到响应拉回,Skill/Agent 参数保留。
  • 17 项持久化单测/31 个断言、源码类型检查、Docker 构建、OCR 独立复审通过。隔离 PostgreSQL/Redis 中 10 项浏览器回归通过,包括新建→返回→重开→重命名→刷新、桌面/手机失败恢复、自动创建失败 query 保留、编辑器节点保留及新建空画布、导航与工作台草稿;双击门禁另行通过。
  • 用户提到的“无限画布 2”全新会话及旧页面跨版本点击均可进入,原窗口卡住条件尚未复现,不把已确认的新建竞态认定为唯一根因。实际卡片验收、代码与测试记录见 artifacts/canvas-entry-recovery/。
  • 13000 仅更新 Web 为 ic-canvans2-web:canvas-entry-53a5b9e9f901,web/src 快照 53a5b9e9f901d37ece47508ba9f6475c0bb70f0c009524df3d8ef306708f1aeb;环境、镜像、端口、健康、Redis DNS 校验通过,其他开发容器未重建。本轮没有数据库迁移或用户画布修改;回滚说明见上述证据目录。
  • 13000 桌面/手机实际点击“无限画布 2”的标题和卡片空白区、编辑器菜单返回及卡片操作隔离 2 项验收通过,主导航 3 项回归通过;不包含实际删除用户画布。
  • 已补充 AGENTS 与前端 Skill 的真实入口验收规则;TODO 已检查,无对应完成项需要迁移,全部画布节点/供应商执行仍保留原待办。待用户确认原窗口点击体验。

页面跳转性能

  • 公共导航提前加载四个常用目标的路由与代码;更多菜单仅在入口可见后预取。补充用户路由加载边界和导航等待反馈,加载期间可继续选择其他页面,沿用原角色过滤与鉴权。
  • 同主机、登录后模拟 100ms 延迟及 10Mbps 下载,三轮串行对照:常用页面再次切换中位数从 257.5ms 降至 144ms(约减少 44%);首次进入生图 934→653ms、视频 854→121ms。Skill 首次显示为 414→474ms,未改善,不宣称所有首访都加速。初始静态资源提前下载约 239KiB,展开更多菜单后额外预取约 494KiB;未触发生成或上传。
  • 隔离候选通过导航单测 2 项/13 个断言、源码类型检查、构建及 OCR 独立审查。浏览器功能回归 9 项通过,包含桌面/手机连续切换、前进后退、慢请求中断、草稿普通/硬刷新,以及 23 个桌面页面与手机页面巡检。具体条件和样本见 artifacts/navigation-performance/。
  • 13000 Web 更新为 ic-canvans2-web:nav-perf-d15dbeedafd2,快照 d15dbeedafd27d8b9d30e6dfbbb11401f819c5318a847324c9dd9ae1715dc0bf;运行镜像、完整环境、网络/端口、健康与 Redis DNS 检查通过,其余开发容器未重建。本轮没有数据库改动。
  • 13000 最终 5 项导航/草稿/性能回归通过,回访实测 107–170ms;临时验证 Web 已清理。
  • 回滚镜像 ic-canvans2-web:rollback-before-nav-perf-d15dbeedafd2;重新标记为 ic-canvans2-web:reference-capability-lora 后仅执行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web。
  • TODO 已检查,没有对应待办需要迁移;待用户在实际浏览器转发地址与日常网络环境确认切换体验。

全站创作界面统一(当前增量)

  • 当前范围已从画布列表扩展至首页、生图/视频工作台、Skill 广场、素材、角色、模型、学院、提示词、账户、组织、剧情、数据及管理页;登录页也使用共享语义色。下方“仅画布列表”的说明属于前阶段范围。
  • 统一薄荷蓝背景、透明玻璃导航、中文正文与衬线标题、胶囊操作按钮、输入框、卡片、弹窗和选中状态。默认画布编辑主题同步中性薄荷灰配色,保留编辑器几何布局及原有可选画布主题。
  • 生图/视频工作台保留原面板、参数、素材入口、提交门禁、持久化与历史逻辑;工作区表面不透明、控件保持紧凑,不新增面板位移动效、持续动画或模糊。深色输入提示文字提高对比度。
  • 源码验证:49 项相关测试(494 个断言)、完整源码 TypeScript 检查、Docker 构建及 OCR 独立审查通过。23 个桌面页面巡检通过;工作台输入、模型搜索、记录收展、手机参数抽屉、深色、减少动效、三种历史品牌偏好、素材类型筛选、文件选择器及配置弹窗通过浏览器验证。普通/硬刷新与批次历史 4 项回归通过,历史提交使用拦截,不调用供应商。
  • 真实验收发现开发数据库缺少直播间、组织及其他当前代码所需结构,画布直达页因此服务端渲染失败。先完整备份并在隔离 PostgreSQL/Redis 验证,独立审查 32 份现有结构迁移后,在单事务中补齐;37 张原业务表的原列数据摘要在持锁事务内全部保持一致。未运行 bootstrap、价格变更或凭据更新,回填只作用新建空表。
  • 13000 最终 9 项浏览器测试全部通过,包含 23 个桌面页面、10 个手机页面、真实画布素材菜单和控件尺寸/字体检查;Web 健康、完整环境、源码标签与 Redis DNS 通过,其他开发服务没有重建。截图与可复用测试证据位于 artifacts/creator-ui-design/。
  • 临时 Web/PostgreSQL/Redis 及其匿名卷已清理,主机进程检查无浏览器自动化遗留;新增只读 Schema 预检通过正常结构与缺表/缺列/缺触发器的负向检查。
  • 该阶段 13000 镜像 ic-canvans2-web:creator-ui-c96fc22fea94,快照 c96fc22fea94ca6c1293b40f3404486172db8db4e1b67de51e913fb10cb065b5。Web 回滚镜像 ic-canvans2-web:rollback-before-creator-ui-c96fc22fea94,重标为 ic-canvans2-web:reference-capability-lora 后仅执行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web;回滚 Web 时保留兼容新增结构和新数据,不直接删表。
  • 待用户确认整体观感与长时间操作效率;真实上传落盘、每个供应商生成及全部画布节点/批处理不以本轮页面巡检代替,相关完整功能验收保留在 TODO。

AI 主播平台定位与滚动视差

  • 画布列表标题改为“AI 主播 Studio.”,说明主播形象、视频内容与直播间编排的创作链路;能力标签展示主播形象、角色设定、口播视频、场景搭建和直播编排。
  • 新增轻量“主播形象 → 内容制作 → 直播编排”入口,分别进入现有角色页、视频工作台及创建直播间弹窗;保留原画布列表与全部操作,创建入口沿用加载门禁。
  • 玻璃背景及左右波浪按不同速度随页面滚动:前 600px 滚动分别补偿 240/120/180px 位移;正文与导航保持原滚动方式。使用 CSS 滚动时间轴,兼容手机背景旋转,开启减少动态效果或浏览器不支持时静态展示,不接管滚轮或触摸滚动。
  • 验证:6 项导航/画布样式单测、源码 tsc --noEmit、Docker 构建及 OCR 独立复审通过。parallax-navigation.spec.ts 在隔离端口和 13000 各通过一次,覆盖真实创作入口、向导打开/关闭、四主导航、320/390/768px、深浅色、减少动态效果,以及桌面/手机真实滚轮驱动的各层位移差。实际查看截图,证据位于 artifacts/canvas-host-parallax/。
  • 已更新 13000 Web:快照 4ae6d32932c914743b9be7b272c20a529af8025341b2b06b944e3cbe8bb501d0,镜像 ic-canvans2-web:host-parallax-4ae6d32932c9;运行镜像/源码标签、健康状态、完整环境对比及 Redis DNS 通过,其他 ic2-dev 容器未重建,临时验证容器已清理。回滚镜像 ic-canvans2-web:rollback-before-host-parallax-4ae6d32932c9,重新标记为 ic-canvans2-web:reference-capability-lora 后运行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web。
  • TODO 已检查,无对应待办需要迁移;待用户确认平台定位与视差观感。

导航选中勾选标记

  • 勾选外观进一步对齐参考:透明空心框、轻微倾斜、不对称圆角与细线勾,去掉主导航及更多菜单当前项的实心选中底色;保持原菜单布局和页面背景。

  • 本轮 CSS 构建、git diff --check、OCR 复审通过;outline-navigation.spec.ts 在隔离端口及 13000 各通过一次,检查实际透明背景、次级选中样式覆盖、320/390/768px、深色与减少动效,截图已查看并保存于 artifacts/canvas-nav-outline-design/。TODO 检查无需迁移。

  • 空心样式最终快照 27f0d55501adccc8b1fa77f78698882a680367153d77a985ca430223ff1b09ba,13000 镜像 ic-canvans2-web:nav-outline-27f0d55501ad;健康检查、镜像/源码标签、完整环境一致性与 Redis DNS 通过,其他开发容器未变化。回滚镜像 ic-canvans2-web:rollback-before-nav-outline-27f0d55501ad,重新标记为 ic-canvans2-web:reference-capability-lora 后执行下述仅 Web 更新命令即可。

  • 四个主要菜单的当前页面名称前增加空心细边框勾选标记,使用轻微倾斜、不对称圆角和细笔画描绘动效,减少动态效果偏好关闭动画。勾选框和菜单选中项均不使用实心填色。

  • 进入次级页面后,省略号右上角显示小勾,展开菜单时当前项右侧同时显示勾选;功能语义图标、路由选中状态、菜单文案与权限保持原样。

  • 验证:隔离源码的 6 项导航/画布样式单测、tsc --noEmit 与 Docker 构建通过;检查 TODO,没有对应待办需要迁移。待用户确认勾选视觉效果。

  • check-navigation.spec.ts 在隔离端口及 13000 均通过:320/390/768px 逐个切换四个主要页面无溢出、仅当前项出现勾选、次级菜单保留功能图标、深色及减少动态效果;截图已实际查看,保存于 artifacts/canvas-nav-check-design/。OCR 独立审查通过。

  • 已将快照 d5dba2d8114526433ae61b4785e5a2b7d0c4faf49d9867e989189100afc13416 的镜像 ic-canvans2-web:nav-check-d5dba2d81145 更新到 13000;运行镜像/快照匹配,健康检查、完整环境一致性和 Redis DNS 通过,其他 ic2-dev 容器未变化。回滚镜像 ic-canvans2-web:rollback-before-nav-check-d5dba2d81145 保留,重新标记为 ic-canvans2-web:reference-capability-lora 后执行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web 即可。

导航与玻璃波浪背景融合

  • /canvas 顶部导航透明覆盖首屏,背景从视口顶部连续延伸到内容区域,移除导航外围白色横带;原四个主要入口、更多菜单、账户和画布功能保持有效。
  • 使用 design/canvas-design-prompt.md 指定的原始青蓝折射背景,本地资源为 web/public/images/canvas/library-prismatic.webp,1280×724 WebP。两侧各 20 条曲线改为细透明高光、折射渐变和内外光晕,保留 5 秒错峰呼吸;手机旋转背景并显示顶部波纹,深色模式使用同一资源的主题适配。
  • 固定导航下方按桌面/手机补偿内容间距,并给滚动容器增加顶部滚动留白,避免键盘返回上方控件时被导航遮挡。已把原始背景核对及导航连续性验收要求写入 AGENTS.md。
  • ecs110 隔离快照执行 6 项导航/画布样式单测、干净 tsc --noEmit、Docker 生产构建,均通过。浏览器用例 glass-navigation.spec.ts 检查原图解码、顶部背景连续性、四入口/更多菜单、手机配置、320/390/768px 无溢出、深浅色和减少动态效果;实际查看桌面、手机和深色截图。独立 OCR 审查及滚动留白复审通过。
  • 最终快照 59c0e7a4380c79f9204d7326ab32dbd96ea02512f6f1c78aff9b7ddcbe160c47 构建为 ic-canvans2-web:glass-nav-59c0e7a4380c,仅更新 13000 Web。运行镜像 sha256:d08e8dee10ea0bea24612753ebe9852a0601772b3e0d672e79cce3278c76ebdf 与候选一致,健康检查、完整环境对比及 Redis DNS 通过;最终用例在隔离端口和 13000 各通过一次,包含 390×600 滚动后焦点复验。ic2-dev 其余容器未重建,临时验证容器已清理。证据位于 artifacts/canvas-glass-design/。
  • 回滚镜像为 ic-canvans2-web:rollback-before-glass-nav-59c0e7a4380c,重新标记为 ic-canvans2-web:reference-capability-lora 后执行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web。
  • TODO 已检查,没有需要迁移的对应事项;待用户确认本轮玻璃质感与背景融合效果。

顶部悬浮导航与更多菜单

  • 按 design/截屏2026-09-11 11.13.23.png 调整为居中悬浮半透明导航:左侧品牌,中间固定“我的画布 / 生图工作台 / 视频工作台 / Skill 广场”,右侧账户。其余功能放入点击省略号展开的菜单,保留管理员权限过滤、当前页面选中状态及手机端创作配置入口。
  • 保留当前薄荷青至雾蓝配色、画布曲线与标签动效;导航沿用主题变量,支持深色与减少动态效果偏好。手机端使用两行布局,320px 至桌面宽度均保留四个入口及省略号;画布编辑器布局不变。
  • 隔离验证:bun test src/components/layout/app-top-nav.test.ts 'src/app/(user)/canvas/studio.test.ts' 共 6 项通过;干净候选快照 tsc --noEmit 和 Docker 生产构建通过。E2E_BASE_URL=http://127.0.0.1:14310 bunx playwright test compact-navigation.spec.ts 通过,覆盖四入口跳转、更多菜单键盘打开/Esc 关闭、次级页面选中状态、768/390/320px 无横向溢出、手机配置打开/关闭及深色模式;截图已实际查看。OCR 独立复审无新的高置信度问题。
  • 已更新 13000 开发站:候选快照 bf42c2cfa0083fd0c496e7fcc41e6c3c598f592f9eb0878d06582a473f3d5b89,镜像 ic-canvans2-web:compact-nav-bf42c2cfa008;仅重建 Web。运行镜像 SHA 与候选一致,健康检查、完整环境一致性、Redis DNS 及 13000 浏览器复测通过,ic2-dev 其他容器 ID 未变化。截图保存在 artifacts/canvas-navigation-design/。回滚镜像 ic-canvans2-web:rollback-before-compact-nav-bf42c2cfa008 已保留,重新标记为 ic-canvans2-web:reference-capability-lora 后执行 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web 即可回滚。
  • 已检查 TODO,没有需要迁移的对应待办。待用户确认导航视觉与交互。

画布列表页薄荷青与雾蓝设计

  • 按设计 prompt 和参考截图调整 /canvas:白色留白、Inter 与 Source Serif 4 斜体标题、两侧薄荷青至雾蓝渐变、20 条错峰呼吸曲线、滚动能力标签、胶囊按钮及悬停反馈。手机端改为顶部曲线和单列卡片,减少动态效果偏好关闭装饰动画。
  • 列表页导航使用上述悬浮菜单,保留账户、配置与各功能入口;搜索、归属标签、直播间筛选、备份、导入、创建、选择、重命名、导出和删除事件沿用现有实现。样式与 Ant Design 配置只作用于该路由,画布编辑器布局和其他页面主题不变。
  • 在 ecs110 的 /tmp/canvas-library-design-qa 源码快照启动独立 localhost:14310 验收。bun test 'src/app/(user)/canvas/studio.test.ts' 'src/app/(user)/canvas/stores/canvas-persistence.test.ts':21 项通过;E2E_BASE_URL=http://127.0.0.1:14310 bunx playwright test canvas-library-design.spec.ts:1 项通过,覆盖 1440px/390px、深浅色、搜索与空结果、共享标签、选择、取消重命名、删除弹窗取消、直播间筛选、菜单与 Esc、减少动态效果及离开该页后的导航恢复。使用中性项目 fixture 并拦截画布读写,没有修改真实画布或执行媒体生成。
  • 截图已实际查看,待用户确认视觉效果。源码类型检查通过;Next 开发服务生成的全量路由校验发现既有 api/account/api-keys DELETE 参数类型不匹配,不属于本次修改。顶部导航已改用轻量入口分组单测并通过,交互另由上述浏览器验收覆盖。OCR 独立审查发现的旧 ThreeUI 样式覆盖已修复。
  • 已检查 TODO:没有本次需要迁移的待办,原 ThreeUI 编辑器验收仍保留。随后按用户要求完成 13000 开发站发布:隔离源码快照 bec3afac713bde12c343a99df7fd3f5f4a61b288254c54946bbefae8f88d04be 构建镜像 ic-canvans2-web:canvas-library-bec3afac713b,仅 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web 更新 Web;运行镜像 sha256:dada1f00a773b0d97962aba9d53403322ff60d4d273ac37fa58fb4f33b4f56d8 健康,环境变量完整一致,Redis DNS 通过。相同浏览器用例在临时端口与 13000 各通过一次;其他容器未重建,生产服务未更新。
  • 回滚镜像 ic-canvans2-web:rollback-before-canvas-library-bec3afac713b 已保留;回滚时将其重新标记为 Compose 使用的 ic-canvans2-web:reference-capability-lora,再执行上述仅 Web 更新命令。无需数据库迁移。

工作台生成记录按批展示与收起

  • 生图每次点击“开始生成”创建独立批次标识,多张结果在历史中合并为一格,显示批次张数及成功/失败数量;点击整批展示全部已返回结果,进行中及失败项保留状态,勾选或删除按整批处理。任务仍独立持久化、轮询与取消,不改变供应商请求数量和计费。没有显式批次标识的旧记录不猜测合并。
  • 生图历史预览不再覆盖当前会话结果,视频沿用一次任务提交一条记录的契约;两页再次点击桌面“生成记录”或手机“记录”会收回历史预览,恢复当前会话结果,迟到的历史加载响应不得重新展开。普通刷新及页面返回保留选中的预览,硬刷新仍按既有规则重置。单图手动重试使用新任务及单独批次,不把已结束的记录写回运行中。
  • 验证:工作台历史、控件、路由、模型选择、Skill 注册、硬刷新、配置仓库七组 bun test 共 74 项通过;E2E_BASE_URL=http://127.0.0.1:13000 bunx playwright test workbench-history-batches.spec.ts workbench-reload.spec.ts 4 项通过,覆盖桌面/390px 手机整批展开收回、普通刷新和页面往返预览保留、连续两次三张提交分两批、重试保留原终态及硬刷新重置。浏览器使用中性媒体 fixture、拦截生成和历史写入,不调用收费供应商或修改服务端历史;真实生成质量与跨设备返回仍待用户确认。
  • Docker Web 构建通过,只更新 localhost:13000 的 ic2-dev Web;回滚镜像 ic-canvans2-web:rollback-before-history-batches 已保留。类型检查仅剩既存 proxyAsUser 路由导出错误。OCR 三个业务源码文件全部复核,测试与 Skill 参考文档另行检查;TODO 无对应待办需要迁移。Playwright 拦截禁用缓存导致普通刷新被误判的验收注意事项已补入 frontend-design 的工作台检查清单。

Rebase 后 localhost:13000 验收

  • 候选 a0a302e7c621feec71cd63d28f0e557befd547a2 已构建并仅更新 ic2-dev 的 Web;运行镜像 sha256:3ad64969490561219da49eec9f4965442bb10c32c37401e0f49df223bb78cfb3,容器健康。未推送 GitHub、未更新生产站点或其他服务。
  • 首轮登录页面失败定位为上游新增 users.avatar_storage_key 未迁移;先回滚 Web 恢复服务,再对独立 infinite_canvas 数据库事务执行已有 web/migrations/20260910_user_avatar.sql(psql -v ON_ERROR_STOP=1 --single-transaction,锁等待 5 秒、语句 30 秒),退出 0;可空字段已存在、用户数量不变。up --no-deps web 不会执行迁移,容器健康不能替代登录页面验收。回滚镜像保留为 ic-canvans2-web:rollback-before-rebase-a0a302e7;回退 Web 时保留兼容的可空字段,无需删除数据。
  • docker compose -f docker-compose.dev.yml build web 成功;工作台控件、模型路由、模型选择、Skill 注册、硬刷新识别、配置仓库六组 bun test 共 64 项通过。E2E_BASE_URL=http://127.0.0.1:13000 bunx playwright test workbench-reload.spec.ts 1 项通过,覆盖两页导航/普通刷新保留、硬刷新清空与张数重置。Skill 广场真实浏览器复测六个分类、旧筛选文字移除、搜索空状态,以及 1440px 桌面、390px 手机和深浅色截图;无页面异常,测试浏览器已关闭。未提交真实媒体生成,结果素材的完整保留仍按原待验收项确认。TODO 与版本功能范围未变化,无需修改。

直播间进度透明悬浮与收起

  • 顶部采用 24px 大圆角毛玻璃卡片、主题色半透明背景、轻边框与柔和阴影;展开后鼠标移开或失焦保持展开,仅收起按钮、Esc、外部点击收起,保留顶部细线。修复焦点驻留导致持续展开。隔离生产构建通过、素材与导航 11 项测试通过、独立审查通过;待真实画布确认深浅主题、悬浮、触屏与键盘交互。

视频换人工具选择保持

  • Skill 广场进入或在视频创作台点击「视频换人 / 视频换脸 / SCAIL-2 原始换人」后,缺少源视频或人物图时保留选中的工作流,不再自动回退到 LTX 等空输入模型。
  • 保留输入校验及缺素材提示;MiniMax H3 原有首尾帧拓扑切换不变。
  • 待验收:真实素材上传后的生成与效果。本轮入口验收不提交付费生成。

Qwen Image 3.0 Pro 关闭提示词扩写

  • 后端统一设置 prompt_extend=false,覆盖生图工作台与画布的纯文生图、参考图编辑路径;原提示词、参考图顺序、数量与尺寸参数不变。
  • 仅修改 Qwen Image 3.0 Pro,不改变其他模型、账号路由或供应商审核配置。「公测」仍是客户端模型分层标签,不代表审核开关。
  • 待用户验收:真实生成效果是否更贴近原提示词。请求载荷测试不代表供应商审核状态或最终画面质量。

网页 Agent 直播角色生产规范接入

  • 聊天和工具两条路径统一接入固定版本的公共直播角色规范,覆盖首帧盘点、角色差异、五类默认状态、首尾帧模型语义、三帧质检和五项交付;不自动扩展私人房或批量付费生成。
  • 新增只读 canvas_load_live_room_contract,工具历史记录规范来源和版本;状态为 instructions_loaded,不冒充素材生成或审核完成。
  • 窄栏也显示「只聊天 / 可操作画布」,聊天模式遇到执行要求提示显式开启工具,不暗中改动画布。
  • 网络异常返回机器可读错误码和诊断编号,提示先核对历史;不自动重试提交,不暴露原始传输错误。
  • 待验收:真实模型是否按角色差异准备流程、已有首帧复用、FL2VA 参数完整映射、工具执行结果与实际候选/QC/绑定一致。完整跨阶段持久执行仍属待办;截图历史请求失败尚未定位,不能以新错误文案当作恢复证据。

画布一键整理

  • 底部工具栏新增「一键整理」:按连线从左到右排列;框选时整理相关节点,分组和批次家族整体移动,保留内部相对位置。
  • 只更改位置,保留尺寸、内容、素材、连线;局部整理避开未选节点,结束后适配视口。
  • 每次最多 200 个位置修改,作为独立协同批次保存,完成同步后单步撤销;同步未完成或协作者编辑相关节点时阻止整理。布局冲突整批撤销,避免拆散分组。
  • 小数坐标统一精度,重复整理不产生多余历史;撤销/重做按最近一次相反历史操作的版本校验,支持重复撤销与重做且保留并发冲突保护。
  • 待验收:多人协同冲突恢复、深浅主题和窄屏。

直播间转场关系图

  • 转场区改为可点击的图片节点与方向连线;同向转场和自循环归组,反向转场独立。
  • 点击连线查看分组触发、绑定视频和状态,并沿用原绑定接口;未就绪边使用虚线。原文字列表折叠为备用视图。
  • 待验收:真实画布图片与视频、方向、自循环选择、公共房/私人房隔离、全屏与窄栏。

直播间制作面板简化

  • 撤掉默认覆盖画布的素材概览,恢复原画布和紧凑进度入口;原节点、连线与审核状态不变。
  • 制作面板主导航收为「素材制作 → 预览与审核 → 发布」;素材步骤直接切换对应内容与视频播放器。
  • AI 对话和问题诊断归入「AI 创作助手」;角色设定、训练、模式与玩法进入高级设置,保留原功能。
  • 转场状态图与素材绑定详情默认折叠;公共房 Preview 与私人房素材继续分开。
  • 待验收:窄屏/全屏、主题、步骤切换、真实视频播放、审核与发布原链路。

直播间生产经验与复杂动作 Skill

  • 公共房进度新增独立 Preview 行;绑定有效 Preview 视频后直接静音循环预览,私人房清单保持原有状态范围。
  • buildLiveRoomPrompt 实际调用 live-room-production,复杂 Action 铺设实际调用 live-room-complex-action;两者统一锁定 xcam_making_experience@091a66f,不再只写 metadata 声明。
  • 创建直播间生成的角色设定节点同步 xcam_making_experience@091a66f 三阶段规范:角色与锚点、状态提示词、视频生成和三帧 QC。
  • 公共房准备进度的已绑定视频在分类行直接静音循环预览,展开后仍可查看完整素材。
  • 复杂 Action 使用 live-room-complex-action,节点记录经验版本;3–8 段按铺垫、递进、高潮、收势生成并逐段审核,最终 AI Film 视频绑定到 ready 转场后才计为就绪。
  • 待验收:创建新直播间的设定节点、公共房视频预览、复杂动作节点 Skill/版本标识、最终视频绑定后的 6/6 就绪状态。

生成记录预览提速

  • 生成结果图片按可见区域懒加载 512px OSS WebP 缩略图,展开后使用 1024px 预览,不再逐行下载原始图片。
  • 视频默认不自动下载,点击后加载元数据;图片与视频预览增加 12 秒超时和单项重试。
  • 待验收:生成记录首屏缩略图出现速度、向下滚动懒加载、展开清晰度及视频点击加载。

Skill 广场筛选精简

  • 移除“来源”“使用场景”两层筛选及其过滤状态,仅保留全部能力、创作生成、角色与明星、媒体处理、助手与工作流、NSFW,去掉前方“能力类型”文字。搜索与能力分类同时作用于个人及内置 Skill;旧链接的 surface 参数不再隐藏卡片,卡片默认前往注册的首选入口。
  • 分类按钮使用语义图标、44px 最小点击高度、独立选中底色与键盘焦点;桌面横向排列,窄屏自动分为两列,所有分类直接可见。
  • 验证:bun test src/lib/skill-registry.test.ts 'src/app/(user)/workbench-controls.test.ts' 27 项通过;真实浏览器验证六个分类入口、旧场景参数不再过滤、分类切换与搜索空状态,检查 1440px 桌面、390px 手机及深浅色截图,修正主题覆盖造成的选中项文字不可读。Docker 构建通过,已更新 localhost:13000。npm run typecheck 仅有既存 proxyAsUser 路由导出错误。OCR 共列出 9 个源码文件,本轮审查 skills/page.tsx,其余 8 个为前序改动跳过;当前改动覆盖率 100%,无新增高置信度问题。TODO 无对应待办变更。
  • 待验收:分类与搜索结果正确,按钮在深浅色和窄屏均清晰可选。

生图与视频工作台状态持久保留

  • 生图工作台按当前账号保存提示词、提示词/工具模式、已选工具和姿势、参考图及当前结果卡片;视频工作台保存提示词、模式、五类参考素材、自动尾帧、清理/拼接草稿及当前结果视图。页面跳转、返回和普通刷新后恢复;浏览器“清空缓存并硬性重新加载”会重置两类工作台草稿与页面参数,但保留服务端生成记录和媒体,显式“新建会话”仍可清空当前会话。
  • 模型、尺寸、时长、帧率等生成配置继续由现有全局配置仓库持久化;移除视频页每次挂载时强制改回默认模型的逻辑。持久草稿按账号隔离,媒体使用 storageKey 恢复,不保存 API Key、渠道配置或失效的临时 Blob URL。
  • 验证:bun test src/lib/workbench-hard-reload.test.ts src/proxy-partner.test.ts 'src/app/(user)/workbench-controls.test.ts' src/stores/use-config-store.test.ts src/lib/workbench-model-routing.test.ts 33 项通过;E2E_BASE_URL=http://127.0.0.1:13000 bunx playwright test workbench-reload.spec.ts 通过,真实登录浏览器验证两页提示词普通刷新与导航保留、禁用缓存的普通访问不清空、CDP 清空 HTTP 缓存并硬刷新后两页草稿清空,生成张数从自选 3 张重置为默认 1 张。重复初始化共用重置 Promise,避免读回旧草稿。Docker 构建通过并已更新 localhost:13000,容器健康。TypeScript 检查仅剩既有 Next.js 代理路由导出 proxyAsUser 类型错误。Open Code Review 本轮复核 6 个相关源码文件,另 2 个姿势预览文件属于前序改动跳过,本轮覆盖率 100%,修正后无新增高置信度问题。待验收:加入参考素材并生成结果后切换页面与普通刷新,确认完整状态保留,再硬刷新确认工作台重置且生成记录仍可在历史中访问。

Skill 广场能力分类修正

  • 4 个角色设定图生成 Skill(完整全身定妆照、面部特写与全身三视图、九宫格表情与全身三视图、三行角色设定表)由“角色”类改归“图像”类:它们是从文字/参考图生成角色设定表的图像创作工作流,点击“创作生成”时显示。
  • “角色与明星”筛选现在显示明星身份模型(及个人 Skill 中自建的角色/明星类);不再出现角色设定图生成卡片。
  • 验证:bun test src/lib/skill-registry.test.ts 16 项、相关工作台与画布测试 35 项通过;tsc --noEmit 仅剩既有代理路由类型错误。
  • 待验收:Skill 广场点击“角色与明星”只出现明星(及个人角色类)Skill;点击“创作生成”包含 4 个角色设定图生成 Skill;卡片右上角分类标签同步显示“图像”。

生图 Krea2 Spicy 姿势并入编辑 LoRA 模块

  • 生图工作台点击“Krea 2 spicy 姿势”工具卡只选中 Krea2 Turbo v2.5 工作流;原姿势清单进入图片工具箱与参考图之间的“Krea2 Turbo v2.5 编辑 LoRA”模块。第一层角色id保留下拉选择,第二层 NSFW 姿势改为小弹窗:每行固定 3 个由 pose-change/skill-plaza-pose-gif-links.md 恢复的铺满式 GIF 卡片,点击卡片或 Choose 直接选择对应姿势 Skill。
  • 两层去掉强度滑杆;选择/清除姿势时同步写入或清空 krea2Pose,请求仍按 明星身份→姿势 顺序发送有效 LoRA,姿势经专用 Toolsbox 工作流执行。
  • 验证:bun test 'src/app/(user)/workbench-controls.test.ts' 'src/app/(user)/image/image-krea2-pose.test.ts' 'src/lib/workbench-model-routing.test.ts' 'src/lib/skill-plaza-pose-gifs.test.ts' 25 项通过;tsc --noEmit --incremental false 仅剩既有代理路由导出 proxyAsUser 类型错误。
  • 待验收:选中工具卡后展开 LoRA 模块,点击第二层出现三列 GIF 小弹窗且图片四周无空白;点击卡片或 Choose 后弹窗关闭、选中姿势回填并由专用 Toolsbox 工作流提交;清空恢复未选状态,两层都留空时提交普通单图编辑。

视频工作台参考素材区并入参考图

  • 视频工作台删除提示词模式下独立的“参考素材”区块(标题、素材库/粘贴/上传按钮行、“素材要求”折叠说明与“点击上传 / 拖入素材”虚线框)。
  • “素材库”与“粘贴”按钮移入“参考图”框标题行,位于“上传参考图”按钮左侧;行为不变(素材库默认视频页签、粘贴仍按参考图上限校验)。
  • 拖入文件与粘贴文件的事件处理移到“参考图”框容器上,拖拽上传能力保留;参考视频/参考音频/参考文档各自的分区上传入口与能力显隐逻辑不变。
  • 验证:bun test 'src/app/(user)/workbench-controls.test.ts' 'src/lib/workbench-model-routing.test.ts' 'src/services/api/video.test.ts' 87 项通过;tsc --noEmit 仅剩既有代理路由类型错误,与本次改动无关。
  • 待验收:视频工作台提示词模式不再出现“参考素材”区块;参考图框头部依次为素材库、粘贴、上传参考图;拖入图片文件仍可添加参考图;各分区上传入口不受影响。

视频参考区域按模型能力显隐

  • 视频提示词模式下,尾帧参考图、参考视频、参考音频、参考文档、参考网页五个区域改为按当前模型能力显隐:模型支持对应能力即显示对应入口(如 Seedance 显示参考视频与参考音频);Wan3 在全部模式下始终保留五个区域(为空或当前模式不支持时显示能力提示);MiniMax H3 等不支持视频/音频/文档/网页输入的模型为空且不支持时隐藏对应区域,只保留参考图,与用户提供的界面预期一致。
  • 已有不兼容素材时仍显示“不兼容…(请移除)”提示;上传视频/音频/文档后仍按注册能力自动匹配模型并恢复对应区域,上传入口容量与提交校验逻辑不变。
  • 已同步更新 AGENTS.md 工作台保留规则与 frontend-design Skill 的验收矩阵;bun test 'src/app/(user)/workbench-controls.test.ts' 'src/lib/workbench-model-routing.test.ts' 19 项通过,工作台范围类型检查无新增错误。
  • 待验收:MiniMax H3 提示词模式只显示参考图;Wan3 提示词模式五类区域齐全;Seedance 等支持视频/音频的模型显示对应参考入口;切换模型、添加/移除素材时区域与自动路由行为正确。

直播间工作区全屏切换

  • 直播间素材编排默认保留 640px 侧边栏,并在标题栏新增“全屏 / 退出全屏”切换;切换时沿用当前房间、Tab、草稿和候选状态,不跳转页面。
  • 待验收:侧栏与全屏往返后当前编辑状态不丢失,刷新和关闭入口仍可正常使用。

生图与视频工作台前置区域对齐

  • 普通进入视频工作台时默认选用 MiniMax H3,覆盖旧的非 H3 页面默认选择;按注册能力匹配文生、单帧、首尾帧或多图参考,删除图片后重新匹配。已有 H3 手动模式、专用工具入口和当前页面内的手动选择继续保留。36 项测试、范围类型检查、隔离构建和 Open Code Review 通过;浏览器验证添加/移除图片的自动路由及手动首尾帧保留,已更新 localhost:13000 并实际登录确认默认 H3。已检查 TODO,无对应待办迁移。

  • 视频工作台精简重复小字,格式、大小与自动尾帧计费说明集中在默认收起的“素材要求”;空状态只保留简短提示,Wan3 裁剪提醒仅在已有超时长视频时显示。上传、参考区域、首尾帧操作、模型参数和错误提示全部保留。10 项工作台检查、范围类型检查、隔离构建及 Open Code Review 通过;11 项隔离页面交互检查通过,已查看桌面和移动截图。localhost:13000 已更新并实际验证素材要求展开/收起与参考入口。已检查 TODO,无对应待办需要迁移。

  • 视频工作台移除提示词下方的“Skill 广场”和“视频拼接”入口;10 项工作台检查、隔离构建和 Open Code Review 通过,已更新 localhost:13000 并实际登录确认入口移除、参考区域保留。已检查 TODO,无对应待办需要迁移。

  • 视频页标题统一为“视频工作台”,参考素材操作条和虚线上传区对齐生图工作台;提示词的主操作移到标题右侧,合并重复说明小字。提示词模式始终展示尾帧参考图、参考视频、参考音频、参考文档和参考网页五个区域;当前模型不支持某项能力时显示兼容性说明而不隐藏入口,同时保留首尾帧、自动尾帧、H3 指南、OpenCode Spicy 及全部模型专属功能和输入约束。

  • 生图提示词标题右侧新增“AI 优化”,通过 qwen3.7-plus 优化纯文本提示词,也可读取当前参考图并保留图片编号关系;结果只回填输入框,不自动提交生成。

  • 普通 Krea2 能力在模型选择器中合并为单一“Krea2”入口,展开后可手动选择具体模式,选项及选中值保留模型原名;点击模型列表不再自动弹出配置与用户偏好。生图参考图数量变化时自动匹配文生图、Turbo v2.5 单图参考或 v2.1 多图参考,手动切换后不会被无条件改回。

  • 全部明星身份模型由现有明星注册表动态汇总到单一“Star”入口,不在模型选择器重复硬编码人物;选中身份后,零参考图与单参考图分别自动走该身份的生成/编辑请求。当前 Star 接口只支持单张参考图,超量输入保留身份并提示限制,不切换到普通多图模型。

  • 普通生图参考图数量匹配包含尚未配置的已知模型能力:1 张选择 Krea2 Turbo v2.5,2–4 张选择 Krea2 v2.1 多图参考;未配置模式保留原因提示。视频参考图、音频、文档分别提供上传按钮,首尾帧模式等待输入补齐时不自动切走,H3 图片标签区分首帧、尾帧和普通参考图。

  • 已验证:ecs110 隔离快照执行 bun test 'src/app/(user)/workbench-controls.test.ts' 'src/lib/workbench-model-routing.test.ts' 'src/components/model-picker.test.ts',36 项通过;工作台范围 tsc -p /tmp/workbench-restore-review/tsconfig.json --pretty false 通过。Playwright 对同一源码快照完成 10 项交互验收,覆盖无配置时只打开模型列表、H3 上传文档后自动切到支持文档的模型、原模型名称、五类视频参考区域、首尾帧切换、音频上传入口、移动端、素材库默认分类及再次打开、生图实际选择文件后的模型匹配、Star 身份和深色主题;无页面运行异常;深色检查仅确认状态及素材保留,截图中部分既有控件文字对比度仍需核对,不作为完整深色视觉验收通过。接口使用隔离桩,未执行真实 OSS 上传、模型推理或生产发布;Open Code Review 完成 5 个源码文件审查,无待处理的高置信度问题。已检查 TODO,本轮没有需要迁移的对应待办。

  • 生图“素材库”打开完整素材库并默认定位“图片”页签,视频“素材库”默认定位“视频”页签,仍可手动切换其他素材类型;视频提示词模式允许先添加参考素材,再按实际类型与数量匹配兼容模型,支持未配置目录;保留兼容的手动选择、未补齐的首尾帧模式与已有素材,提交仍按最终模型限制校验。工具模式保留专用输入约束。

  • 已更新 localhost:13000 开发 Web,容器健康,实际登录后验证模型列表不弹偏好配置、素材库默认图片、视频五类参考区域和音频/文档上传入口可用;隔离 Docker 构建通过,旧镜像 ic-canvans2-web:reference-restore 保留供回退。此次未更新生产 3000。

  • 真实上传排障:localhost:13000 实测文件选择器正常,上传票据返回 200,开发 Proxy OSS 直传返回 503;开发栈 OSS 凭据、Bucket 和 Endpoint 为空,存储配置补齐前不能将上传标记为通过。

  • 待验收:桌面与移动端检查两个工作台的标题、创作方式、参考素材、提示词操作区布局;确认 Krea2 与 Star 各自仅有一个顶层入口且可展开手动切换;选中任一 Star 身份后分别以零/一张参考图生成,确认身份选择不丢失;生图分别上传 1/2 张普通参考图验证自动路由,再手动切换模型确认选择保持;视频按首尾帧和多模态模式分别核对上传类型与数量限制;用纯提示词和带参考图提示词执行生图 AI 优化,确认加载态、成功回填与失败提示。

Skill 广场 28 姿势 GIF 完整覆盖与 Mathew 分支审计

  • Skill 广场 28 个 Krea2 Spicy 姿势均绑定 GIF;原有 25 个使用动作源视频,缺少源视频的 3 个根据姿势封面生成 4 秒轻动效 GIF。
  • GIF 生成/恢复脚本由固定 25+3 空项改为强制 28 项完整清单;任一链接缺失即失败。
  • 复核 Mathew 分支 8 个提交:28 姿势、统一网格、工作台、Skill 广场、短链、文档与 GIF 脚本均已在主线;补入遗漏的视频工作台 Drawer size 兼容修复。无素材姿势旧逻辑不回迁,保留当前固定 Krea2 Turbo v2.5 且必须 1 张人物参考图的产品决定。

公共房清单去重

  • 进度面板仅展示当前分区六类素材,不重复展示私人房汇总项。私人房 Tab、素材和就绪计算保留。

视频节点真实比例

  • 视频加载后按真实宽高比调整节点,保留最长边、位置、原始视频和模型标签。
  • 显式自由缩放节点保持原尺寸;待用户确认现有 FL2VA 竖屏节点显示。

Cut 可选 Basic Speech Recognition

  • 字幕面板保留原浏览器识别默认项,新增 Basic Speech Recognition,服务端调用北京区 fun-asr。
  • 识别原时间线混音,结果写入原有可编辑字幕轨道;默认不翻译、不烧录。
  • 任务按账户隔离;重试按项目、场景和音轨指纹恢复,成功写入后清除恢复标记。
  • 音轨上限 40MB,任务保留 24 小时;临时音频在结果读取后清理,过期文件在后续提交时清理。
  • 待用户验收:实际项目语音准确率、字幕编辑及导出;画布凭据过期需重新从画布进入。

品牌主题切换即时预览

  • 平台设置点击卡片立即切换当前浏览器主题,不再只改变勾选框。
  • 卡片下方显示全站已保存主题与明确的「保存为全站默认」按钮;预览不自动修改其他用户默认。
  • 当前浏览器选择沿用账户菜单的个人覆盖,刷新后保留;初始化请求晚返回时不覆盖刚选择的主题。
  • 待验收:三种主题点击即时变化、刷新保留、明确保存及失败提示;个人选择不被全站默认覆盖。

私人房独立素材分区

  • 工作台和画布进度面板支持公共房 / 私人房切换;共用角色设定,关键帧、Loop 和互动视频独立绑定、分类与预览。
  • 私人房生成节点保留 roomScreen;按私人关键帧的服装与场景生成,复杂动作各段同样保留约束。默认仍为 MiniMax H3。
  • 已审核私人关键帧是视频生成前置;同帧 / 多帧 Loop 沿用首尾帧绑定和闭环审核。
  • 关键帧分区持久化,服务端禁止跨分区首尾帧 / 回退帧;快照与回滚保留分区。发布前分别校验两个已有分区。
  • 已验证:51 项单测通过;隔离 PostgreSQL 验证旧数据归属、同分区自环、跨分区拒绝以及降级保护。生产与实际 GPU 视觉验收需按发布记录确认,不将单测算作生成质量通过。
  • 人工测试:切换两房、各自绑定图片、生成视频、采用候选、模拟触发、刷新后数据仍正确、公共房素材不会令私人房显示绿色就绪。

图片工具箱固定执行引擎与 Spicy 姿势路由修复

  • 图片工具箱选中具体工具后不再提供通用模型切换,改为展示只读的固定执行引擎。
  • Krea2 Spicy 姿势固定使用 krea2-turbo-v25-edit 和专用 Toolsbox 姿势工作流,不再自动切换到 krea2-v21-edit。
  • 画布姿势强度现在会经 Proxy 传入 Scheduler,并同时控制姿势 LoRA 的模型与 CLIP 权重;Scheduler 会按已知 LoRA 自动补齐缺失的 trigger,避免任务成功但目标姿势没有体现。
  • 画布工具箱会按所选姿势写入 nsfw-toolsbox-pose Skill 的完整图片/视频提示词,不再把通用占位句提交给姿势接口;图片提示词由 Skill 权威文件机械同步并接受一致性检查。
  • 该工具要求 1 张人物参考图;用户只需选择参考图与 28 个姿势之一。

我的素材图片 MD5 去重

  • 图片保存统一收口到素材 Store:手动保存与 ZIP 导入、提示词/图片/视频工作台、视频清理、直播角色、Drama 角色、画布节点和 OSS 导入入口都会在素材进入状态前完成 MD5 校验,并在 PostgreSQL 确认写入后更新本地缓存;批量导入只提交一次完整素材状态。
  • 新增或替换图片缺少有效摘要时服务端返回 ASSET_IMAGE_MD5_REQUIRED,未更换媒体内容的历史素材继续兼容。需人工验证改名后的同一图片、远程图片、刷新及跨标签页同步。

管理员生成记录用户输入

  • 管理员生成记录将“提示词”列升级为“用户输入”,展开后分别显示完整用户提示词、输入素材摘要和生成参数。
  • 新生成任务会记录最多 20 个输入文件的字段名、文件名、MIME 和字节大小;只保存审计摘要,不保存输入文件内容、Data URL、API Key、Cookie 或签名参数。历史任务没有保存过的素材信息显示为“未记录”。
  • 待验收:分别提交生图、图片编辑、视频和组合工具箱任务,确认提示词与素材摘要可检索、可展开查看,且数据库审计详情不包含素材字节及凭据。

画布图片与视频工具箱 Pose 链路

  • 图片工具箱新增“图片姿势”,选择 1 张人物图和姿势后固定使用 krea2-turbo-v25-edit,浏览器自动提交 toolsbox_pose_lora,由 Proxy 路由到内部 toolsbox-pose-edit。
  • 视频工具箱“视频姿势”已修正为必须选择姿势并提交 video-pose,不再错误地让“视频换脸”选择姿势;“视频换人”从旧入口切换至组合能力 video-person-swap,输入为 1–2 张人物图和 1 条源视频。
  • 待验收:从画布选中真实素材分别创建图片姿势、视频换脸、视频脱衣、视频换人和视频姿势流程,确认模型、姿势、输入引用和生成结果回写正确。

画布生成配置节点触控板滚动

  • 生成配置节点现在标记为画布滚轮交互区域,Mac 触控板在节点内纵向滑动时滚动节点内容,不再触发画布缩放。
  • 节点滚动增加边界约束,滑到顶部或底部时不会把手势继续传递给无限画布。
  • 待确认:Mac 桌面端 Chrome/Safari 的双指滑动、滚动边界和画布缩放互不干扰。

图片节点下一关键帧 AI 引导

  • 图片节点新增“推荐下一关键帧”,使用 Qwen 3.8 Max 视觉直连且关闭思考模式;支持结合当前图片与用户想法完善 1 个提示词,或推荐 3 个分别侧重连续微动、行为推进和镜头构图的完整图片编辑提示词,确认后只填入、不自动生图。
  • 图片节点首次进入参考图编辑态时默认切换到 krea2-turbo-v25-edit;用户手动选择其他图像编辑模型后不再强制覆盖。当前图片会作为第一参考,连接图片按既有引用顺序追加,最多分析 4 张。
  • 图片节点主操作明确显示“生成”和预计积分;提示词、积分报价或输入校验未满足时,按钮提示具体原因,不再只显示积分符号和箭头。
  • 积分报价加载或临时查询失败不再锁死图片生成按钮;此时显示“核算中”,允许提交并由服务端在预扣前执行最终价格与余额校验。
  • 待验收:登录态桌面/移动端弹窗、当前图片与连接图片读取、积分报价、取消/超时、三方案选择、提示词回填,以及 Krea2 Turbo v2.5 的真实 GPU 下一关键帧成片质量。

XCamShow Partner 姿势图片编辑

  • 新增候选 POST /api/partner/v1/toolsbox-pose-edit/,与 videos 共用 XCAMSHOW_PARTNER_API_KEY Bearer 校验和 XCAMSHOW_PARTNER_USER_ID 账号绑定,不要求登录 Cookie。沿用图片编辑表单、Idempotency-Key、模型权限、租户归属与计费;model 可省略,提供时仅接受 image-pose。查询、下载和取消继续使用 /api/partner/v1/images/{task_id} 系列入口,待隔离环境与部署后验证。
  • 新增候选 POST /api/partner/v1/images/edits 及任务查询、内容下载、取消接口,公开模型固定为 toolsbox-pose-edit;服务端校验 Bearer、Idempotency-Key、单张 30MB 内真实图片、非空提示词、seed 和 krea2/sex/*.safetensors LoRA,再复用 krea2-turbo-v25-edit 的租户归属与计费链路。
  • Proxy 用内部工作流标记把该任务送到 Scheduler 的 /v1/toolsbox-pose-edit/,不会改变普通 Krea2 编辑的多 LoRA 接口。Scheduler 候选基于远端最新 main 的独立 Joseph 分支,已替换为用户提供的 9:16 工作流并把输入、提示词、seed、LoRA 和最终输出分别绑定至既定节点。
  • 待验收:在 ecs110 隔离窗口做 Scheduler 非推理校验、Proxy/Web 回归和真实 GPU 单任务,记录耗时、排队、GPU 执行、逐卡显存峰值,并人工检查身份、脸型、肤色、头身比例、手脚、服装、背景、重影和撕裂;通过前不发布生产。

Wan3.0 视频模型入口收敛

  • 百炼 Wan3.0 新任务只暴露 wan3.0-video,固定路由 Justin Workspace 凭据;旧 -1/-2 选择值自动迁移到新名称,旧任务仍可按原 provider 查询和取消。
  • ML 渠道默认展示 wan3.0-video-spicy(底层 ID 保持 w3.0-video-spicy),其他现有变体收进“wan3.0-video 其他模式”二级入口。
  • 待验收:生产模型探测只返回一个百炼 Wan3.0 入口,ML 默认项可直接选择,展开后可切换现有三个高级变体,历史任务查询不受影响。

直播间新手素材生产(整合候选)

  • 多人联合锚点(PRD §27):关键帧新增 multi_anchor JSONB 声明(槽位/角色顺序/遮挡对/同步锚点);表单仅 multi_anchor 层级显示编辑器(槽位多选联动顺序,遮挡按「前>后」文本),服务端对照房间参与者校验(未知/重复/非法遮挡拒绝),已用真实 PG 验证合法创建、幽灵参与者拒绝、普通层级免声明;卡片显示参与成员与同步锚点。
  • 定向礼物(PRD §24):礼物档位新增目标参与者(空=全房间);模拟预览按目标记录触发日志,目标已离房时拒绝并说明原因。
  • 组合动作(PRD §24):动作按钮新增参与 AI 多选(空=单人);模拟预览触发时校验全员在房(缺员整组拒绝不降级),每个成员独立走导演仲裁,日志显示组合成员(小晚 + 小熙)。
  • 新手首次引导(PRD §8.1):新手模式画布首次进入弹层介绍「一张画布一个直播间」、隐藏配置的新手视图与查看专业流程入口、创作路径(设定→关键帧→素材→模拟预览→发布),主按钮直达工作台;localStorage 记忆已读不再打扰。
  • 素材预估(PRD §8.1/§21 生成前预估):素材清单头部显示待生产段数、单段时长与当前标准模型;积分按实际生成计费并指向任务中心,不做虚假报价。
  • 剧情进度模拟:模拟预览新增剧情进度面板(当前章节/下一章解锁条件/进入下一章按钮);到达下一章奖励关键帧时自动推进并写事件日志,剧情章节接入播放闭环。
  • 画布库筛选排序(PRD §16.9):全部画布/直播间分段筛选(带直播间计数),直播间视图按更新时间/六维完整度/状态排序;空态提示如何进入直播间视图。
  • 克隆为直播间草稿(PRD §3.2):绑定直播间的画布卡片新增克隆按钮(assets-linked,标题自动加「直播间草稿」后缀)直达新画布;克隆服务补齐 multi_anchor 声明、参与者与玩法配置复制,已用真实 PG 验证(状态回退 draft、定向礼物与章节结构完整复制)。
  • 关键帧状态图全景(PRD §13 转场图):关键帧页转场列表下方渲染状态图全景——关键帧节点(当前预览帧加粗)+ 每条边「A —触发→ B」(非 ready 状态打标),发布前一眼看完整状态机。
  • 液态玻璃主题(PRD §32 首个增量):新增第三档平台主题 liquid-glass——完整 CSS token(--glass-bg/-strong/-subtle、--glass-border、--glass-shadow、--glass-blur)、半透明明暗两套表面、voxora-panel 玻璃化(backdrop blur + saturate 高光)、antd 调色板、登录页变量与画布主题 token;prefers-reduced-transparency 把全部半透明表面拍平为实色等价(保层级与可读性);管理后台设置页可预览选择。
  • 用户级主题覆盖(PRD §32 用户选择跨页面持久化):账户菜单新增「品牌主题」选择器(Voxora/无限画布/液态玻璃 + 跟随平台默认),个人选择存 platform_theme_override,在 SSR init 脚本、水合与 fetch 后三处优先于运营默认;管理员设置仍为全站默认。
  • 画布库按六维标签筛选(PRD §16.9):live-rooms 摘要接口返回 contentTags;直播间视图按维度显示多选筛选(仅展示实际使用中的标签、规范中文名),维度内任一命中、跨维度 AND。
  • 角色分享(PRD §25.3 仅链接首期):live_rooms.share_token 迁移 + 发布页「生成分享链接」(幂等复用 token)/复制/打开/取消(链接立即失效);公开只读页 /live/[token] 服务端渲染角色卡、六维摘要、关键帧与状态图,刻意不含媒体与画布数据;真实 PG 验证 token 生命周期(启用幂等、公开可读、取消即 404)。租户内/全平台公开为后续档位。
  • 多人房参与者(PRD §24/§27 运行时第一步):live_room_participants 表(逻辑 participant_id 与编排 id 统一,房间内唯一)+ /live-room/participants CRUD API + 工作台玩法页参与者管理(AI/真人标签、移除确认);4 参与/2 AI 上限在插入事务内经 validateParticipants 裁决(行锁防并发超限),已用真实 PG 验证超限、重复 ID、删除后再加边界。
  • 模拟预览导演仲裁:房间有 AI 参与者时,玩法动作按钮先经 arbitrateActions(最多 2 并发 AI 动作、动作资源互斥),拒绝原因写入事件日志;进行中动作 8 秒后过期释放(PRD §27 导演编排器)。
  • 直播间工作台新增「素材」标签页:按六维「行为」勾选列出六类状态素材(入场/待机/打字/礼物/动作/复杂动作),每行显示对应转场、绑定媒体缩略图与就绪状态,支持把画布视频/图片节点直接绑定到转场 mediaNodeId,缺转场时一键预填转场草稿;就绪判定在 live-room-model.materialStateStatus(含节点删除后的重绑判定)并有单元测试。
  • 素材行「生成素材」:弹出业务问答(PRD §21 单一业务问题),buildMaterialPrompt 按六维组装一致性提示词(角色/场景/服装/体型/氛围),确认后在画布铺设「描述文本 → 视频配置 → 空视频输出」工作流并把角色主锚点媒体连为首帧参考,走既有 agent-op 管线;生成完成后回素材页绑定。
  • 六维内容标签体系数据模型(PRD §16):live-room-tags 提供规范 canonical 标签注册表(截图原语言作别名、简体规范名)、按维度解析与去重、跨维度混用拒绝、每维多选上限与 TAXONOMY_VERSION;尚未接入向导 UI 与生成留痕。
  • 多人房首期编排数据模型(PRD §24/§27):live-room-orchestration 提供 4 参与者/2 AI 上限校验、单主说话者优先级仲裁、2 并发 AI 动作与共享场景资源冲突锁、运行时转场降级、多人联合锚点声明校验;尚未接入服务端运行时。
  • 素材「比较候选(N)」支持并排比较并将采用结果绑定状态转场;缺转场时以主锚点自环创建并标记 ready。
  • 模拟预览触发已就绪转场时优先播放转场绑定的画布媒体,播放结束后落回目标关键帧。
  • 六维内容标签已接入向导标签多选并保存 canonical_tag_id 与 taxonomyVersion,向导简介及素材提示词保留标签摘要。
  • 候选清单增加待采用状态与汇总,生成完成候选进入采用漏斗。
  • 新手模式隐藏但保留生成配置节点与连线,可通过「查看专业流程」展开;切换直播间模式后即时重读。
  • 直播间「设定」标签页支持创建后编辑角色、主题、服装、体型、行为、玩法和六维标签,不重置已生成素材。
  • 采用候选时探测视频 metadata 并回写真实时长(失败时使用 3 秒兜底),缩略图可打开候选比较。
  • 素材生成完成后即时提示进入素材页采用,重新打开不重复提示既有候选。
  • 发布前状态图门禁校验主锚点、媒体、转场、触发死路、降级与孤立关键帧,错误会阻止发布。
  • 画布库批量读取并展示直播间模式、状态、完整度和发布版本摘要。
  • 审核中心聚合待审核、被拒绝和待重新验证项目,支持通过、拒绝、重新提交与标记验证。
  • 剧情关键帧可一键展开为玩法章节草稿,并显示所属章节。
  • 新增模型中心页面与导航入口,按媒体类型展示实时可用性和不可用原因并支持重新探测。

工作台紧凑创作面板

  • 图片工作台 12 个工具入口和视频工作台 6 个工具入口统一为两列、72px 高度的卡片,名称与输入要求各一行;详细说明可点击查看,不可用项保留原因入口。图片单阶段/双阶段换人及视频原始/组合工作流仍独立保留。
  • 工作台工具卡不再复用统一闪光图标,头像裁切、换脸/换头/换人、脱衣、姿势、超分、去水印和去字幕均显示对应功能图标,选中勾选作为独立状态;Skill 广场也按具体 Skill 能力显示功能图标。源码审计确认生图工作台、视频工作台、共享工具卡、直接子控件和 Skill 广场均不再引用通用闪光图标,TypeScript 检查及相关 23 项测试通过。
  • 去掉编号式步骤标题;工具模式使用各工具封装的完整内部指令,不显示提示词输入及其辅助操作,提示词编辑只在提示词模式出现。从 Skill 广场应用工具会直接进入工具模式,新建会话或查看历史则回到提示词模式。素材库/粘贴/上传集中在素材区,支持拖入及粘贴文件;视频统一上传根据当前模型保留图片、视频、音频和文档校验,网页、尾帧与续拍等入口继续保留。
  • 两页所有屏幕尺寸直接显示模型和参数;仅工作台压缩参数控件,图片自定义尺寸可原地展开,尺寸错误保持可见,画布参数面板默认展示不变。生成栏底部吸附,“我的资产”改为“生成记录”。
  • 生图与视频参数中的宽高比/尺寸选项统一为 76px 高卡片和 28×28 图形槽位,自动尺寸也保留等大的虚线图形;标签与像素尺寸限制在卡片内单行省略,移动端参数区使用单列布局,避免图标大小跳动、文字互相挤压或横向溢出。
  • 当前源码通过 cd web && npm run typecheck -- --incremental false、git diff --check;工作台组件、素材导入、图片请求/姿势与视频参数共 50 项测试通过。用户明确授权直接更新本机开发实例后,执行 docker compose -f docker-compose.dev.yml build web 与 docker compose -f docker-compose.dev.yml up -d --no-deps --no-build web,13000 已运行新镜像且健康检查通过;原镜像保留为 infinite-canvas-dev-web:before-compact-tools,未更新生产站点。
  • 已在实际 13000 实例运行 E2E_BASE_URL=http://127.0.0.1:13000 playwright test e2e/08-navigation-assets-and-canvas-controls.spec.ts --grep 紧凑工具 --workers=1:2 项通过,覆盖卡片数量/尺寸、工具选中、说明开关、工具模式隐藏提示词、切换提示词模式后可编辑、生成记录折叠、底部生成栏、390px 无横向溢出及上传选择器。真实截图复核了桌面、手机和参数区域,并修正主题下选中卡片的文字对比度;独立审查无高置信度问题。待用户确认实际素材导入/顺序和完整模型生成效果;本轮未调用付费生成接口,未提交或推送 Git。

工作台与 Skill 广场 UI 修复

  • 生图/视频工作台和 Skill 广场排版与文案修复:生成张数改为 1–4 快捷项 + 带"自定义"标注的输入框(单行对齐,上限提示);参考图需求 Tag 空间不足时截断并保留悬浮全文,不再挤出容器;步骤说明与提示区说明文字精简(含提示词辅助按钮改为整齐 3 列);生成结果空状态去掉双重图标叠印;时长格式化支持小时(如"1小时12分05秒",修复"4321分25秒"式显示)。Skill 广场修复图片链路:移除 12 个指向不存在图片文件的 nsfw-lora showcase 条目、把不存在的 input-couple.webp 引用改为 input-pair.webp、中间件放行 /skill-showcases/ 静态资源(此前被会话校验 307 到登录页导致全部裂图显示 alt 文字)、卡片 showcase 图加载失败时自动退回无图卡片。skill-registry 测试新增 showcase 文件存在性校验,proxy 测试新增 showcase 放行断言。本地 dev 栈(127.0.0.1:13000,uitester01 / UiTest-2026-ok)已用真实浏览器登录验证三页面 200 且截图视觉正常。

v0.19.0 生产发布人工确认

  • v0.19.0(候选 3cb72c9b,标签 v0.19.0,manifest 31497a4b)已窄部署生产:platform-migrate(34 条迁移)、proxy、agent-image-worker、web 全部运行 3cb72c9b 镜像,生产运行验收脚本退出 0,隔离验证 13 节全过(含 fresh 库全量迁移、生产 dump 旧数据升级、ACK tick 只读探测)。此前标注“未部署”的 Agent 准入/审批/报价/预留/派发/观察/结算/ACK 条目随本版本进入生产;media-worker 后续加固(回执绑定/输入哈希/完整解码)未随发,仍按原条目待验。剩余人工项:在真实画布中执行首个 Agent 计划(含审批与积分预扣),确认图片生成落画布、积分结算一次、agent_billing_ack_outbox 出现记录并投递成功、余额精确一致;确认前不得清理供应商终态记录。

视频任务恢复提示

  • 视频轮询因其他会话租约等待时显示“等待任务恢复”及无需重新生成提示,取得租约后清除;不改租约时长、抢占或提交策略。真实原任务已验证自然过期后恢复,新提示已在隔离叠加镜像完成1680/390浏览器回归;完整统一候选和生产仍待验证。

持久步骤尝试数据库基础

  • 文本生图 worker 已接入 pending_validation 自动就绪:只选择已保存的独立文本输入,复核审批、输入摘要、Skill 与活跃用户后提交 ready,下一 tick 才派发。校验失败回滚就绪写入并记录待核对事件,保留 held 且不自动重试;依赖/媒体步骤仍留给对应执行路径。ecs110 fresh PG+HTTP 的正常、输入改变/用户停用、响应丢失三组运行及 TypeScript 退出 0;正常链直接从真实 admission 的 pending 状态推进至画布结果/结算,不再由测试预先 prepare/claim。失败分支确认零 HTTP、待核对可见及无自动重试;测试显式恢复隔离 fixture 后才继续独立成功分支。日志 /tmp/ic-auto-ready-valid.log、/tmp/ic-auto-ready-invalid.log、/tmp/ic-auto-ready-lost.log、/tmp/ic-auto-ready-tsc.log。仍未做真实 GPU/OSS/浏览器和生产部署验收。

  • 增加独立文本生图后台 worker tick 与显式启用的 CLI:只领取已 ready 的文本生图请求,提交前沿用持久占用防重;已提交任务定期观察并串联图片保存/画布/结算,30 秒轮询延迟保存在数据库,未知结果保持预扣并记待对账,不自动重发或退款。初期用 PostgreSQL 会话锁保证单活动执行器,多个进程不会同时领取;无数据库事务跨供应商 IO。fresh PG+HTTP worker 回归覆盖竞争者 busy、一次派发、轮询延迟、未知结果保持 held、最终画布/结算和终态不再领取;响应丢失保持 unknown 且无二次提交。CLI 的 --once 与空闲 SIGTERM 退出通过,TypeScript 和独立审查通过。远程日志 /tmp/ic-image-worker-reviewed-0.log、/tmp/ic-image-worker-reviewed-1.log、/tmp/ic-image-worker-tsc-reviewed.log;子进程与临时容器已清理。仅候选文本生图执行器,已补独立文本输入的 pending_validation 自动就绪;媒体/依赖步骤、多机并行吞吐、可信失败退款、ACK 与真实 OSS/GPU/浏览器验收仍待完成;未部署。

  • Agent 图片成功终态内部协调入口已串联逐张解码/保存、登记复核、结果节点/协作历史/媒体引用、成功事件与积分结算;最终写入同事务,晚结算错误整体回滚,已完成请求重放不再进行 HTTP 或重复扣费。通用账本终结入口与后台对账排除 Agent 预留,避免供应商先返回成功便抢先结算。fresh PG+HTTP fixture 完成从已提交任务到画布结果/结算,覆盖晚失败、一次 usage、重放零 IO 和旧对账隔离。日志位于 ecs110 /tmp/ic-image-complete-guard.log(IC_AGENT_COMPLETE_SUCCESS=1 的 fresh PG 准备链)、/tmp/ic-image-complete-legacy.log(既有账本真实 PG 33 断言)、/tmp/ic-image-complete-tsc-final.log,均退出 0;独立审查通过。该证据不是浏览器、真实 OSS/GPU 或视觉验收;已接候选文本生图 worker,完整角色生产与部署仍待完成,供应商账本 ACK 恢复仍待串联,未部署。

  • 画布协同追加操作已抽出调用方事务入口,原浏览器入口继续自行提交;文档、版本、媒体引用、撤销历史和 pg_notify 可与后续 Agent 终态/账本共用一个事务,不再要求另开事务写画布。项目锁后再判重,避免相同操作并发重放重复落库。ecs110 独立 PostgreSQL 使用实际协同/历史迁移,IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas bun scripts/test-canvas-transaction.ts 退出 0;覆盖晚失败整体回滚、提交后通知、保留已有节点、并发重放一次及 viewer 拒绝,TypeScript 退出 0。日志 /tmp/ic-canvas-tx-pg.log、/tmp/ic-canvas-tx-tsc.log。当前已由图片成功完成器复用,真实浏览器验收仍待完成,未部署。

  • Agent 新增内部图片持久化入口:绑定任务接收/验签后,复用直传不可变对象预留和上传回执,外部 IO 前后分别核对 submitted/held 任务、活跃用户及画布成员权限;媒体登记与预留提交同事务,重复保存相同内容不重新上传,冲突拒绝覆盖。ecs110 fresh PG+HTTP 准备链 success/lost 两种运行和 TypeScript 检查退出 0,覆盖错摘要、上传期间降为 viewer、登记后更新预留失败的原子回滚、正常登记、重复请求和账本仍 held;直传既有 Bun 回归 6 项/57 断言通过,独立审查通过。日志 /tmp/ic-image-store-final-0.log、/tmp/ic-image-store-final-1.log、/tmp/ic-image-store-direct-tests.log;上传服务为 HTTP fixture,并非真实 OSS/GPU 验收。该存储入口自身不回写画布、不结算,由图片成功完成器统一承担;常驻执行器仍待串联,未部署。

  • 图片 content 接口为实际解码成功的单帧图片增加 HMAC 回执,绑定任务、下标、原始字节摘要、大小、MIME 与尺寸;Agent 新增接收并校验入口,核对同一 Buffer 后返回技术解码证据。旧接收入口仍为 decoded=false;缺少凭据、动画或超过回执限制不签发,缺失/伪造/错任务/错字节回执不通过新入口。此项不持久化、不结算、不回写画布,不代表视觉质量通过,未部署。ecs110 PYTHONPATH="$PWD/proxy:$PWD" /tmp/ic-ci-venv/bin/python -m unittest proxy.test_image_validation_receipt proxy.test_image_task_parallel proxy.test_video_task_persistence proxy.test_comfy_routing proxy.test_girlslike_krea2 95 项通过;IC_IMAGE_RECEIPT_FIXTURE=/tmp/ic-image-receipt-fixture.json /root/.bun/bin/bun test src/lib/server/agent-image-validation.test.ts 2 项/19 断言通过(包含真实 Python 路由/Pillow 生成回执);fresh PG 准备链 success/lost 两次与 bun x tsc --noEmit 均退出 0,独立审查 8/8 通过。日志在 ecs110 /tmp/ic-image-attest-python.log、/tmp/ic-image-attest-pg-final-{0,1}.log;未调用 GPU。

  • 已从完整候选 c08103f1fe13e3e17271f732b46d082f211d9015 导出全新 ecs110 源码快照,重新通过 92 项 Proxy 回归、TypeScript 检查和正常接单/响应丢失两套 fresh PG+HTTP 准备链;不再仅依赖增量同步目录的证据。具体命令与日志见 docs/plans/v3.1-delivery-status.md。本轮未增加产品功能,todo 保持原有未完成边界;未进行 GPU、浏览器或生产验收。

  • 内部图片结果接收已从 submitted/held/image 任务绑定读取同源 content 接口;按预留 output 数校验结果下标,限制单次最多 64MiB 和 60 秒,拒绝部分响应/不支持的 MIME/压缩声明/超限及空体,保留原始 Buffer、字节数与 SHA-256。接收本身不解码、不登记存储、不结算、不回写画布,返回 decoded=false。ecs110 fresh PG+HTTP 准备链的 success/lost 两种运行及 TypeScript 退出 0;覆盖字节/摘要、MIME/206、声明与 chunked 超限、停滞取消、越界与无绑定不下载,账本未变,独立审查通过。后续须对同一字节完成校验和持久化,未部署。

  • 图片任务内容接口改用 Pillow 实际解码格式确定 Content-Type,修复 JPEG 上游为 octet-stream 时被标成 PNG 的问题;原始字节保持不变,编辑图退化检查继续执行。ecs110 Python 图片任务/持久化/Comfy 路由/GirlsLike 回归共 92 项通过,覆盖 JPEG/PNG/WebP 错误声明及空体/JSON 伪图片拒绝。此项是内容接口校验修正,不代表 Agent 已完成存储、画布回写或视觉验收,未部署。

  • 已增加内部图片任务只读观察:仅从 submitted/held/image 的账本绑定读取任务 ID,查询固定 Proxy 端点并核对响应 ID,限制 12 秒/64KiB;pending 返回运行中,completed 且结果列表合法仅返回待媒体验证和数量,不泄露供应商 URL、不结算。failed、未知标记、404、错误任务 ID 和无绑定均待对账。ecs110 真实 PG+HTTP 六种观察场景及完整提交 success/lost 回归通过,TypeScript 退出 0;尚未接常驻轮询、真实 GPU 结果解码和画布回写,未部署。

  • Proxy 图片任务重启中断及未捕获执行异常新增可持久化 outcome_unknown:true,保留旧 failed 展示状态但重启提示改为待核对、勿重复提交。浏览器轮询计费策略与后台对账均在该标记下保留预扣,不自动退款/结算。ecs110 python -m unittest proxy.test_video_task_persistence proxy.test_image_task_parallel 23 项、计费 policy/reconciliation 的 Bun 22 项/217 断言及 BFF 路由集成 38 项/191 断言通过,TypeScript 退出 0;覆盖两次磁盘恢复、未知异常、image/video 轮询不触发计费终结及旧明确失败行为。仅覆盖这两类明确的不确定情况,供应商 HTTP 错误分类仍需逐项核验;历史已终结账本不追改,未部署。

  • 已增加失败终态内部事务入口:要求已绑定任务 ID、submitted/held 或同一失败重放,失败事件、outbox 与积分释放同事务;超时/404/未验证响应不得调用此入口。既有账本终态逻辑抽出调用方事务版,原有独立事务及提交后 ACK 行为保留。另修正媒体接单的视频能力映射为项目实际 video,并补映射回滚测试。ecs110 两套 fresh PG 的准备链与 HTTP success/lost 回归退出 0,失败终态覆盖晚 SQL 错误整体回滚、提交前不可见及重复退款一次;原 billing-terminal-postgres.test.ts 每套 33 断言通过,TypeScript 通过。首次 fixture 将重复事件 created=false 误判为失败,现已纠正并用 AggregateError 保留原始/清理双异常。尚未接可信供应商失败轮询、成功产物校验/结算,未部署。

  • 独立文本生图已增加内部串联执行入口:复核当前批准、活动账户、Skill及输入摘要,提交账本占用后进行单次 HTTP,下发成功原子保存事件/outbox与账本任务绑定;响应丢失保留 unknown 并写待对账,稳定回执事件 ID 重复调用不重发。ecs110 以两套 fresh PostgreSQL 分别运行 IC_AGENT_HTTP_LOST=0/1 的 scripts/test-plan-preparation.ts,成功/断线两种 HTTP fixture 均通过:停用与输入变更零 POST、HTTP 时占用已提交、重复调用总计一次 POST、账本与接单状态一致;TypeScript 和独立审查通过,测试容器已清理。尚未连接常驻调度循环、浏览器执行入口、真实供应商、终态结算和画布产物,未部署。

  • 已实现独立文本生图的内部 HTTP 传输:核对请求摘要/身份/标量字段,服务端固定代理地址,签名用户归属并保留计费标记;拒绝重定向,限制响应体 64KiB 与总超时 20 秒,不明确响应一律 unknown。Bun fetch 响应丢失实测出现额外 POST,已换成单次 Node ClientRequest;ecs110 Bun 8 测试/31 断言(含实际响应体停滞 20 秒超时)、TypeScript、Node 实际 HTTP 成功及断线无重发通过。此函数要求调用方先完成批准/输入验证并提交占用事务,现已接内部文本生图入口,尚未接常驻调度循环;未调用真实供应商,未部署。

  • Agent 媒体接单入口已将供应商任务 ID、submitted 事件/outbox 与积分预留绑定放入调用方同一事务;任务命名空间从预留能力推导,拒绝未占用的账本和带边界空白的任务 ID。ecs110 IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas /root/.bun/bin/bun scripts/test-plan-preparation.ts 与 /root/.bun/bin/bun x tsc --noEmit 退出 0;真实 PG 覆盖账本拒绝后事件/outbox整体回滚、提交前不可见、显式回滚与提交后任务 ID 一致。供应商调用为零,尚未接真实供应商 HTTP、终态结算或画布产物,未部署。

  • Agent 下发前账本占用已复用 claimReservationSubmissionWithClient:按 attempt/outbox/reservation 锁顺序校验租约与固定请求,以实际计费账户将预留转 unknown;重复调用不再次领取。ecs110 独立 PG 的 IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas /root/.bun/bin/bun scripts/test-plan-preparation.ts 和 /root/.bun/bin/bun x tsc --noEmit 退出 0,覆盖错 token、实际计费账户、未提交不可见、回滚恢复与提交后三并发重试拒绝;独立审查通过,测试容器已清理。调用方必须先提交事务再进行外部 IO;此内部函数不是执行授权,尚未接 HTTP、终态与画布回写,未部署。

  • 图片生成/编辑异步接口增加幂等键拒绝保护:持久去重尚未实现时,携带 Idempotency-Key 返回 501 / image_idempotency_not_supported,在读取素材和创建任务之前结束,避免静默重复生成;未携带键的旧请求保持原行为。ecs110 隔离运行 VIDEO_TASK_STATE_PATH= PYTHONPATH=$PWD:$PWD/proxy /tmp/ic-ci-venv/bin/python -m unittest proxy.test_image_idempotency_gate proxy.test_image_task_parallel:10 tests / OK / exit 0,独立审查 4/4 文件无高置信度问题。此项不是持久幂等实现,Agent 自动重试仍不开放,未部署。

  • 首个就绪路径已实现:独立文本输入步骤在调用方事务内复查有效批准、held预留、当前输入摘要和Skill契约,原子写queued事件与ready;依赖步骤及媒体输入不走此路径,仍需产物/解码证据。ecs110真实PG准备链正向、同eventId幂等、事务回滚后事件与ready为空及TypeScript通过。当前仅文本路径的内部就绪转换,未连接供应商HTTP、未缩减角色/媒体完整范围,未部署。

  • 内部接单恢复读取已按operation与稳定eventId查询submitted事件,校验externalTaskId并返回序列号;不存在表示未知,不允许据此重发。ecs110实际PG提交前其他连接不可见、提交后新连接恢复、错误标识隐藏及重复读一致、TypeScript通过。仅数据库提交恢复,不是供应商HTTP响应丢失或进程崩溃端到端验收,未部署。

  • 派发接单记录原语已实现:先按attempt/outbox锁顺序检查有效租约,转submitted并清租约,与含externalTaskId的submitted事件同事务保存。ecs110真实PG事件写入失败回滚、显式回滚、错token拒绝和提交后事件/状态一致及TypeScript通过。调用方必须管理事务;尚未接供应商实际HTTP,也未处理已提交响应丢失的只读恢复,不能将此记为已生成,未部署。

  • 租约持有者内部请求读取已连接批准材料引用与固定请求/输入摘要:匹配owner/token、leased有效期、成员角色和held预留,复核请求SHA及步骤身份后返回内部序列化内容,executionAllowed=false。ecs110实际PG准备链与TypeScript通过,覆盖未领取、错token/worker、同事务降权和过期拒绝。首轮过期fixture误更新其他待验证行已限定operation并复跑;不代表并发撤权最终授权或供应商实际提交,未部署。

  • 内部派发租约新增有效owner/token续期与过期隔离:续期先锁行再检查当前到期时间;过期批次SKIP LOCKED转待对账、清除租约,不回ready、不退款。ecs110最终PG错身份/有效续期/过期拒绝/隔离回滚/四并发仅一次/不自动重领及TypeScript通过,独立审查通过。调用方负责事务,尚未接实际Worker心跳和供应商对账,未部署。

  • ready领取原语已实现:单条SKIP LOCKED领取、随机token和5–300秒租约,未来可用时间/未就绪/过期leased不领取;事务由调用方管理。ecs110真实PG锁跳过、回滚重领、过期不重发及TypeScript通过,独立审查通过。尚无就绪验证、续租、供应商下发/对账,领取不等于执行授权;完整交付状态见docs/plans/v3.1-delivery-status.md,未部署。

  • 准入服务现将pending_validation意图与积分预留、attempt和准入关联同事务保存;重放要求所有步骤意图存在,缺失时拒绝,不自动补任务。ecs110实际PG准备链和TypeScript通过:2待验证意图、缺记录重放拒绝、回滚后空、四并发及新连接重放仅2意图;真实outbox迁移/down参与联验。仍未转ready或下发,不代表验证通过,未部署。

  • 持久待下发意图表已实现并注册迁移:关联准入operation,默认待验证,租约字段/领取次数约束、身份不可改、ready及expired索引;非空down拒绝。ecs110最小准入父表的真实PG重复迁移/FK/默认状态/租约/身份/事务回滚/down验证及TypeScript通过。尚无写入生产者、领取器和执行授权,未部署。

  • 步骤事件写入已提取appendPlanStepEventWithClient调用方事务原语,原入口继续自行管理事务;状态转换/幂等语义保持不变,为与准入/outbox原子组合提供入口。ecs110实际PG事件套件与TypeScript通过:未提交跨连接不可见、同事件重放、后续SQL故障及显式回滚后attempt/event均无残留;旧并发/状态机/权限回归通过。仅事件事务基础,尚未实现outbox下发或开放执行API,未部署。

  • Media Worker整任务PG联验已覆盖输入下载核验→真实FFmpeg转码/解码→上传回执核验→任务与父任务状态/媒体登记:成功发布摘要一致,坏输入零上传,坏回执失败且删除尝试对象、无媒体发布。ecs110最终数据库8项通过(1.081秒);首轮fixture复用唯一OSS路径已修为随机路径并全量复跑,独立审查通过,隔离PG已删除。HTTP存储为替身,不等于此链路真实OSS删除验收;未部署。

  • Media Worker上传回执已与实际发送内容绑定:流式计算发送长度/SHA256,回执限制64KiB,严格校验整数字节数、摘要及非空对象键才进入发布;HTTPResponse使用上下文关闭。ecs110最终四套23项通过(7.382秒,无首轮socket警告),覆盖错长度/bool字节数/错摘要/空key/超长回执及取消上传。未改生产、未发布;该校验不替代远端对象读回或视觉验收。

  • Media Worker输入下载现核对登记bytes与SHA256:读取前限制有效摘要及512MB上限,写盘前拒绝超过登记大小,EOF拒绝截短/摘要不符,避免错误文件进入加工;重复输入保持只下载一次。ecs110系统FFmpeg的runtime、输出解码、命令及集成共22项通过(6.853秒),覆盖大小短长、错摘要、缺摘要和零长度。旧登记数据不修改,缺有效摘要明确失败并提示重传;尚未发布,不代表Agent解码证据持久化已完成。

  • 候选Agent整步真实OSS联验通过:隔离PG实际输入迁移与媒体登记→verifyPreparedPlanMedia→既有Proxy→内网OSS随机PNG;重复引用合并,真实字节摘要一致。ecs110最终脚本与TypeScript通过,prepared_step_real_oss=passed及cleanup=passed;独立审查通过。canary持有最多60秒等待消费者,完成后精确删除并确认不存在,临时PG已删除,不写生产数据库/不改服务。该步骤仍返回decoded=false/execution=false,尚待Agent解码证据与正式准入下发,未部署候选代码。

  • 真实OSS原始读取canary通过:ecs110现有Proxy进程的本地接口,从内网OSS读取随机单对象69字节PNG,核对完整字节、SHA256及解码像素;finally精确删除并确认不存在,database_writes=0,不改服务。脚本proxy/scripts/test_media_read_oss.py可重复运行,显式开关、禁止公网OSS与HTTP跳转,独立审查无高置信度问题。当前Proxy镜像源码4ba4b186220ca2ece019512dc9f4a8dd1978b855;该证据仅覆盖既有存储接口,尚未证明候选Agent整步实际OSS链路或GPU生成,未部署候选代码。

  • 整步媒体校验已完成真实PG/HTTP组合联验:实际resolved_inputs迁移配合最小计划父表,重复媒体仅一次HTTP读取;其他用户/画布和总预算不足在请求前拒绝,HTTP期间降权导致整步拒绝,旧RR连接仍见原权限作为对照。ecs110脚本与TypeScript通过,输出prepared_step_media_pg_http=passed;临时PG已清理。HTTP为中性字节fixture,不是OSS或可解码图像,尚待真实OSS/解码及持久证据,未部署。

  • 已准备步骤输入现可直接驱动内部媒体字节校验:仅读取持久快照中的媒体,重复storageKey去重并拒绝不一致声明,读取前检查总字节预算;逐项校验后重新检查步骤成员权限,文本输入也检查。ecs110新旧媒体测试8项43断言及TypeScript通过,覆盖去重、冲突/预算超限零fetch和文本步骤撤权。首轮BigInt字面量编译问题已修正;新增步骤组合仍为替身测试,尚待整步真实PG/OSS联验、解码证据持久化与执行准入,decoded/executionAllowed=false,未部署。

  • 准入幂等重放现沿用批准材料的固定步骤顺序,不再依赖数据库collation;首次与恢复响应保持同序。ecs110真实准备/审批/预留PG链及TypeScript通过,混合大小写步骤Z-later/write覆盖首次顺序、同事务重放、四并发提交及新连接重放。仍不授予执行许可,未部署。

  • Media Worker 的实际输出发布链已加入上传前解码门禁:检查媒体流类型、尺寸与时长,再通过FFmpeg严格错误模式完整解码到空输出;沿用任务取消、租约控制与处理超时,失败不上传、不标记成功。ecs110使用系统FFmpeg运行输出解码/runtime/命令及既有FFmpeg集成共21项通过(6.467秒);首轮默认/usr/local FFmpeg缺VP9导致扩展用例准备失败,切换已有/usr/bin后全量复跑通过。独立审查无高置信度问题,涵盖真实PNG/MP4/WAV、JSON错误文档、损坏IDAT和失败路径不发布。仅技术可解码门禁,不代替视觉质量审查;尚未发布,也尚未作为Agent批准输入的解码服务。

  • 原始媒体读取校验已连接内部Proxy路径与批准媒体位置:禁止重定向、Range/预览替代,检查200、MIME、编码、声明长度并流式核对摘要;网络读取带60秒取消上限,读取后使用独立新快照复查成员和登记。ecs110最终5项32断言、TypeScript及真实HTTP/PG联验通过,覆盖读取中撤权且旧RR连接仍见原权限时拒绝;首轮测试类型错误已修正。当前HTTP使用隔离fixture,不是生产OSS或解码验收;返回decoded/executionAllowed=false,尚未接准入执行,未部署。

  • 媒体内部位置查询已增加当前owner/editor及画布媒体引用限定,并匹配批准的storageKey、SHA256、长度和媒体类型;缺失/歧义返回空,不使用节点临时URL。ecs110单测1项24断言、隔离PG权限/跨画布/缺引用/元数据错配矩阵及TypeScript通过;独立审查无高置信度问题,临时PG已删除。仅返回内部OSS登记位置,contentVerified=false;实际读取、解码和持久准入证据仍待接入,未部署。

  • 媒体字节完整性流式原语已实现:按任务上限与声明长度逐块计算SHA256,超长/截短/摘要不一致拒绝,取消中断停滞读取并释放锁;不积累整份媒体内存。不等待可能悬挂的source.cancel清理,避免错误结果永久挂起。ecs1104项13断言及TypeScript通过,覆盖多块一致、长度/摘要错误、超限、abort及永不结束的cancel。尚未连接鉴权OSS读取、解码或准入持久证据,仅字节校验原语,未部署。

  • 新建准入预留前现重新解析当前画布输入与固定Skill版本契约,核对输入种类及摘要与已批准请求一致;变化/未解析不建立该步骤预留。已有完整准入组仅幂等返回原记录。ecs110准备链及TypeScript通过,文本在审批后变化时拒绝且预留/attempt均0,原两步骤、四事务并发和回滚矩阵通过;输出 plan_admission_input_gate_pg=passed; changed_input_rejected=true; no_reservation=true; no_attempt=true。仍未验证媒体实际字节/解码及外部执行,不是完整媒体准入,未部署。

  • 内部准入服务完成四独立RR事务并发提交验证:调用方对40001/23505完整回滚后有界重试,四调用及新连接提交后重试均返回同组operationID;准入/attempt/Skill引用/预留/账本事件各2条,余额80、持有20,仅预留一次。ecs110准备链与TypeScript通过,输出 plan_admission_concurrency_pg=passed; four_transactions=true; committed_replay_same_ids=true; reservations_two=true; held_once_20=true。仅隔离PG内并发与重放,不是浏览器断网或进程重启验收;fixture及容器已清理,未部署。

  • 正式内部事务原语reserveApprovedPlanWithClient已实现:计划级事务锁、有效批准材料检查、按固定请求/Skill建立attempt并按批准价格预留、保存准入关联;已有完整同材料组返回operationID,其他/部分记录拒绝。调用方负责事务、schema就绪与序列化重试,函数不提交、不下发。ecs110准备链PG及TypeScript通过,两步骤实际预留与关联、同事务再次调用同ID且仅2预留、外部回滚后准入0;输出 plan_admission_service_pg=passed; two_steps=true; same_transaction_idempotent=true; rollback=true; dispatch=false。尚待跨事务并发/重启验证、媒体准入和outbox,未暴露执行API,未部署。

  • 准入PG联验已替换最小attempt表为真实attempt、Skill引用触发器及准备输入FK迁移;Skill引用DDL复用既有迁移,users/skills父表仍为fixture。ecs110最终准备链及TypeScript通过:两步骤绑定两条v1 Skill执行引用,坏输入摘要23503拒绝,事务失败后attempt与Skill引用均0;输出 plan_admission_attempt_chain_pg=passed; real_attempt_migrations=true; skill_revision_refs=true; input_fk=true; rollback_zero_refs=true。独立审查通过,临时PG删除;尚待全平台迁移及正式准入服务,不代表已入队/生成,未部署。

  • 持久准入绑定表agent_plan_admissions已实现并注册迁移:关联步骤operation、批准材料及唯一预留,插入核对同计划步骤/输入摘要/请求、计费人、模型价格和held状态,禁止UPDATE;down拒绝非空表。ecs110最终PG准备链及TypeScript通过,验证两条真实账本预留绑定、金额错配拒绝、不可更新、非空/空回滚及事务失败零残留;输出 plan_admission_storage_pg=passed; bound_approval_attempt_reservation=true; nonempty_rollback_guard=true; empty_rollback=true。attempt仍使用最小父表,尚待完整迁移/attempt引用及原子准入服务验收;独立审查通过,临时PG删除,未部署。

  • 审批准入与真实账本原语完成同事务PG联验:准备链测试替换简化报价/账户表为ensureBillingSchema;读取已批准有效材料,以固定报价预留两步合计20积分,核对事务内80可用/20持有;后续SQL除零故障、显式回滚及变价拒绝后,恢复100可用/0持有且预留/事件0。ecs110最终准备链及TypeScript通过,输出 approved_reservation_chain_pg=passed; real_billing_schema=true; held_20=true; price_change_rejected=true; late_failure_full_rollback=true。首个改价用例遗漏真实通配价格,已按capability修正并复跑;临时PG删除。仅集成验证,尚未提供原子准入提交/步骤出队服务,未部署。

  • 执行准入审批前置已提取调用方事务原语:共享锁保护成员/画布/批准决定,锁后读取材料并核对当前作用域和有效期;未决/拒绝或过期不通过,仍返回executionAllowed=false,调用方须继续原子预留与入队。ecs110最终隔离PG准备链及TypeScript通过,输出 plan_admission_approval_pg=passed; pending_rejected=true; approved_valid=true; expired_rejected=true; owner_role_checked=true; execution=false。独立审查发现最初过期用例被拒绝决定提前拦截,已补有效期内批准且准入读取通过、真实到期后明确过期拒绝并复跑。临时PG删除。尚无执行入口,不代表整体准入完成,未部署。

  • 打开计划修订详情现自动只读定位并核对已保存内容,成功后恢复快照及审批历史;定位期间禁用手动保存,保存期间取消/暂停定位,避免旧null查询覆盖保存成功。ecs110修正后TypeScript与最终构建/E2E19通过(1项/25.2秒),覆盖整页reload、重新连接/打开计划后自动恢复拒绝记录,并断言期间快照POST为0。镜像 ic-auto-restore-qa SHA c3890d11ad0042fef0a5d500cd1e4b31dca51ec9af1b7a74457742a28ecb84e6,最终日志 /tmp/ic-auto-restore-final.log;本地与远程组件SHA一致。首轮错误放置effect的类型/浏览器失败已修正,/tmp/ic-auto-restore.log 不作为通过证据;独立审查P2保存/折叠竞态已修复并复审,QA停止。仍需更多竞态故障注入、原子预算准入与实际执行,未部署。

  • 快照定位客户端已实现只读查询与精确内容比对:绑定计划ID/修订及双层非执行标记,使用fast-deep-equal比较实际JSON保存形态,忽略对象键序但拒绝内容或额外字段不同;impact/estimate不进入保存内容。既有锁定的3.1.3库改为直接依赖。ecs110 frozen-lockfile安装、客户端7项57断言及TypeScript通过,覆盖null、反向键序、改内容/额外字段/修订/执行标记拒绝。UI自动恢复尚未接通,未部署。

  • 精确快照定位GET /plan-snapshots/lookup 已实现:严格planId/revision查询、拒绝重复/额外参数及非正安全整数,不存在返回snapshot=null。ecs110 TypeScript、镜像构建与真实Web/PG E2E20通过(1项/6.3秒),覆盖内容/修订定位、缺修订、401及撤权404;日志 /tmp/ic-plan-lookup.log,镜像 ic-plan-lookup-qa SHA 29c786fb8a28d33794aa3f27fb54779a227efa2b5f3fdc75a4ed7dca6a6e691b。独立审查通过,QA停止。客户端内容匹配及整页恢复仍待完成,未部署。

  • 计划快照精确定位内部服务已实现:按当前用户/画布/计划ID/修订查既有快照,同RR只读事务复用权限读取,不创建快照。ecs110隔离PG准备链与TypeScript通过,验证指定修订、缺修订null、同画布其他成员的快照隔离和非法参数;输出 plan_snapshot_discovery_pg=passed; exact_revision=true; other_owner_hidden=true; missing_null=true; read_only=true。临时PG删除。定位HTTP、内容匹配及整页自动恢复UI尚待接通,未部署。

  • 已保存计划新增服务器审批记录面板:自动查询最近材料摘要/决定,可手动刷新;重新幂等保存同修订后重新读取,不依赖组件旧状态。显示“最近查询”与非执行/非有效报价限定,历史查询不自动跟随新提交,需刷新。最新发现客户端校验快照、null及双层执行标记。ecs110客户端7项115断言、TypeScript、构建与Agent/Web E2E19双端通过(1项/24.1秒),覆盖批准/拒绝后刷新及组件重建读取,移动布局截图已检查。镜像 ic-approval-history-ui-qa SHA c773efc1c8f4a960fff53a6fd56e937d95c8f767e1bc2be71ba606f5cf4225f1,日志 /tmp/ic-approval-history-ui.log;独立审查通过,QA停止。整页刷新仍需重新打开计划并幂等保存,尚未自动定位服务器快照;原子准入/执行待接通,未部署。

  • 最新材料发现HTTP入口已接入审批GET的显式 latest=1 模式,与sha256严格互斥。ecs110 TypeScript、镜像构建、真实Web/PG E2E20通过(1项/6.9秒),覆盖无材料null、未决/已决、混合/重复参数400与viewer403/撤权404;日志 /tmp/ic-decision-latest.log,镜像 ic-decision-latest-qa。独立审查通过,QA已停止;未部署,客户端及刷新恢复UI继续待接入。

  • 刷新恢复所需的最新审批材料发现内部服务已实现:同一只读RR事务核对当前权限、本人计划并按创建时间/摘要确定最新材料,再共用完整性/作用域/决定校验;无材料返回null,最新未决不会回退旧批准。ecs110隔离PG完整准备链及TypeScript通过,新增输出 plan_decision_discovery_pg=passed; missing_null=true; newest_pending_not_old_approved=true; scoped=true; execution=false,覆盖无材料、既有批准、新材料未决、跨画布、owner改变与viewer拒绝,临时PG已删除。最新发现HTTP/UI接入及原子准入仍待完成,未部署。

  • 审批提交异常后已接只读决定恢复:服务端已有决定则展示真实批准/拒绝,不再写入;查询失败或未决保持原选择等待显式重试,卸载取消阻止陈旧回写。ecs110 TypeScript、构建及真实Agent/Web E2E19双端通过(1项/23.3秒):桌面真实POST写入成功后向浏览器注入503,断言仅1次POST及1次GET并恢复批准,移动正常拒绝回归通过。镜像 ic-decision-recovery-ui-qa SHA dfb4a8e32216908d923f64481520c9b9abdeabdce08b7f058fdd7f3f5656ae04,日志 /tmp/ic-decision-recovery-ui.log;独立审查通过,QA停止。整页刷新后的材料发现/恢复、原子预留及执行继续待完成,未部署。

  • 历史审批决定GET与只读客户端已接通:严格snapshotId/sha256及重复/额外查询拒绝,返回null/approved/rejected并固定不执行;客户端校验摘要和决定枚举,支持超时/取消,不触发写请求。ecs110 API构建与E2E20通过(1项/6.2秒),验证未决到已决、错摘要、viewer403及撤权404;日志 /tmp/ic-decision-get.log、镜像 ic-decision-get-qa。客户端另行6项83断言及TypeScript通过;客户端是在API镜像构建后独立验证,尚待包含全部改动的固定候选整体验证。独立审查通过,QA停止。UI恢复与原子准入尚未接通,未部署。

  • 审批决定历史读取内部服务已实现:按当前成员、本人快照、材料摘要及计费账户复核,未决返回null,已过期材料仍可读取既有决定但不授予执行。完整性验证与当前有效期读取分开,原审批写入/材料读取仍拒绝过期。ecs110单测5项38断言、隔离PG准备链和TypeScript通过;输出 plan_decision_read_pg=passed; historical_expired=true; pending_null=true; scope_enforced=true; execution=false,验证历史拒绝、未决、已批准、跨画布、owner改变与viewer拒绝。临时PG删除。HTTP读取和UI断线/刷新恢复尚未接通,未部署。

  • 计划材料面板已接入明确批准/拒绝按钮及结果反馈;材料摘要变化重置组件,失败只重试原决定,过期禁用首次选择,服务端继续负责有效期门禁。ecs110 TypeScript、构建与真实Agent/Web E2E19双端1680/390最终通过(1项/24.2秒),分别验证批准/拒绝成功并移除首次选择按钮。截图已检查,批准后报价说明矛盾已修正并复跑;最终日志 /tmp/ic-decision-ui-final.log,镜像 ic-decision-ui-qa,截图 /tmp/ic-approval-decision-ui-1680.png 与 /tmp/ic-approval-decision-ui-390.png。独立复审通过,QA已停止。尚待响应丢失/过期交互、重新加载决定恢复、原子预留与真实执行,未部署。

  • 前端审批决定客户端已实现:只发送快照/材料摘要和明确批准或拒绝,核对回执摘要、同一决定及 executionAllowed=false;支持30秒超时和取消,不自动重试或显示服务端私有错误。ecs110隔离客户端测试5项46断言与TypeScript通过;首次类型检查发现测试断言unknown类型,已修正并复跑。尚未接入确认按钮、扣费或执行,未部署。

  • 审批决定 POST 接口已接入严格参数、当前成员权限和内部幂等服务,返回 executionAllowed=false。ecs110 隔离 TypeScript、镜像构建及真实 Web/PG E2E20 通过(1项/6.2秒),覆盖同意重放、相反决定409、额外审批人/非法决定400、viewer403、撤权404,以及决定仅1条、账户与预留数不变。镜像 ic-decision-api-qa SHA de16c42b1afa52981f70655090e66f7750c75ef249dc2f41db02f68693ea8b0d,日志 /tmp/ic-decision-api.log,QA服务已停止。UI确认、原子预留和入队继续待接入,未部署。

  • 审批决定内部写服务已实现:锁定当前成员/画布并核对材料作用域和有效期,首次批准重新读取服务器价格与预算/余额;同决定重复返回既有记录,相反决定拒绝,仍返回executionAllowed=false。RR等待锁可能持有旧快照,针对40001/23505在完整回滚后最多重试3次。ecs110隔离PG test-plan-preparation.ts 与TypeScript退出0:变价拒绝、4并发同意只保存1记录且结果相同、再次重用及相反决定拒绝,原输入/请求/材料/引用矩阵通过;输出 plan_decision_service_pg=passed; price_change_rejected=true; approved_persisted=true; concurrent_idempotent=true; idempotent=true; conflicting_decision_rejected=true; execution=false。临时PG删除。审批HTTP/UI、原子预算预留与入队仍待实现,未部署。

  • 审批决定存储迁移已实现并注册:每材料一次批准/拒绝,绑定审批人、禁止UPDATE、引用限制删除;数据库时间拒绝过期/未生效批准。ecs110隔离Postgres17 test-plan-approval-storage.ts 最终复跑退出0,验证有效批准、过期批准拒绝、错审批人、重复决定、更新拒绝、材料保留及非空/空表回滚,输出 plan_approval_decision_pg=passed; approved=true; expired_rejected=true; actor_bound=true; immutable=true; material_retained=true; rollback_guard=true;TypeScript通过,临时PG删除。最小父表验证不是鉴权审批服务/全迁移/预留入队验收,未部署。

  • 计划面板已接入审批材料准备与展示:仅在累计报价完整且预算/余额满足时出现入口,显示合计、逐项模型价格和有效期;刷新报价或重备输入清除旧材料,到期提示重新准备,始终显示未批准/未扣费/未生成。ecs110 TypeScript、构建与真实Agent/Web E2E19双viewport1680/390通过(1项/23.3秒),覆盖预算不足隐藏、成功材料展示、重备清空;材料截图已目视检查。展开执行诊断曾挤出输入区,已限制回执高度并内部滚动,双端 toBeInViewport({ratio:1}) 验证输入组完整可见。镜像 ic-material-ui-qa SHA 023c6619f522d57f6a7d2593385dcee9a13636e4811221cd7f9eae4b4db4ac97,日志 /tmp/ic-material-ui-final-pass.log,截图 /tmp/ic-approval-material-ui-1680.png、/tmp/ic-approval-material-ui-390.png。复审发现测试未重新展开计划提案,修复顺序后重跑;失败日志 /tmp/ic-material-ui-collapsed-failed.log 保留,不作为通过证据。独立复审通过、QA停止;正式审批决策/预留/入队仍未接通,未部署。

  • 画布审批材料API客户端已实现POST准备后GET复核:固定保存摘要、画布/快照、金额和有效期,核对所选步骤请求摘要、无重复、数量乘单价、BigInt合计与预算;POST失败不继续读取,支持取消/超时/no-store。ecs110客户端4项32断言与TypeScript退出0,覆盖合法往返、错摘要/执行标识/总价/期限/画布/预算/单价/请求及失败中止。该客户端尚未接入UI,不代表确认或执行已完成,未部署。

  • 审批确认材料GET入口已实现,严格snapshotId/sha256、拒绝重复/额外参数并限制查询串;按当前权限和有效期读取固定价格材料,不重新报价或延长期限。ecs110 TypeScript、镜像构建及真实Web/PG E2E20通过(1项/5.8秒),覆盖写后读身份/价格、无私有正文、400/409、viewer403/撤权404及原POST和账本回归。镜像 ic-material-read-api-qa SHA ae9c1cce7429183a8cf7195da846a79d1613be11555f21eb232602acaaff6fd4,日志 /tmp/ic-material-read-api.log;独立审查通过,QA服务停止。UI确认、持久决策和入队仍待接入,GET不授予执行权限,未部署。

  • 审批材料服务端读取已接入当前权限与不可变计划:同一只读事务核对成员、快照所有者、材料SHA/作用域/有效期及计划预算。ecs110隔离PG test-plan-preparation.ts 和TypeScript退出0,验证正常读取20积分、跨画布/错摘要、计费账户改变、viewer及过期材料拒绝,原请求/报价/引用/回滚矩阵通过;输出新增 scoped_read=true; expired_read_rejected=true; owner_change_rejected=true。临时PG删除。仍无GET/UI读取入口或审批决策,不授予执行权限,未部署。

  • 审批确认材料HTTP入口已接入 POST plan-snapshots/approval-material:严格非空去重选择,禁止客户端改价,256KiB限制与统一权限/冲突错误,不返回私有输入。ecs110 TypeScript、镜像构建和真实Web/PG E2E20通过(最终复跑1项/6.1秒),验证材料持久引用、400/413/409、viewer403/撤权404及账户和预留计数不变。镜像 ic-approval-material-api-qa SHA 253759b96d1f971afe8ed32437335747ef1ad00c6a0d9d04c05b8d3b29b01d88,日志 /tmp/ic-approval-material-api-final.log;独立审查通过,QA服务停止。UI确认、持久审批决策、预算预留和任务入队仍待接入;返回明确 executionAllowed=false,未部署。

  • 服务端审批材料准备已接入:同一REPEATABLE READ事务中复核成员权限并共享锁定成员/画布、读取本人计划与持久请求、重新按服务器价格累计,拒绝缺步、超预算、余额不足及未解决问题,再保存15分钟确认材料与请求引用。累计报价提取caller-owned事务读取原语,原只读API包装保留。ecs110隔离PG test-plan-preparation.ts 与TypeScript退出0:部分步骤/余额不足/viewer拒绝、20积分材料和2引用持久化、原输入/请求/报价/回滚矩阵通过,输出 plan_approval_material_pg=passed; server_priced=true; partial_rejected=true; balance_rejected=true; viewer_rejected=true; persisted_refs=true; execution=false;临时PG删除。尚无HTTP/UI确认、持久审批决策、预留或入队;材料准备不是批准,未部署。

  • 审批材料引用链已接入真实输入准备/请求保存/服务端报价的PG测试:两个步骤的实际持久请求构造材料并建立两个引用,删除准备输入引发级联时被审批引用阻止,两个输入均保留,直接删除请求同样拒绝。ecs110隔离Postgres17 test-plan-preparation.ts 与TypeScript退出0,输出 plan_approval_chain_pg=passed; real_prepared_requests=true; server_quote_bound=true; two_request_refs=true; input_cascade_blocked=true,原余额、价格、权限、回滚矩阵全部通过。使用真实输入/请求/审批迁移,其他父表仍为fixture,不代表全平台迁移;临时PG删除,审批服务/API和入队未接入,未部署。

  • 审批材料存储迁移已实现并注册:不可更新快照、原始SHA校验、计划外键及自动生成的请求引用;缺失请求导致整笔插入失败,被引用请求/计划限制删除。ecs110隔离Postgres17使用最小父表运行 test-plan-approval-storage.ts 与TypeScript退出0,验证重跑迁移、不可修改、引用保护、缺请求原子拒绝、错误摘要、非空回滚拒绝及空表回滚;输出 plan_approval_storage_pg=passed; immutable=true; request_refs=true; missing_request_atomic_rejection=true; digest_checked=true; nonempty_rollback_guard=true; empty_rollback=true。临时PG删除。尚待完整表迁移链、鉴权审批写入/决策及入队集成,存储材料不授予执行权限,未部署。

  • 审批快照读取新增完整性、作用域和有效期校验:核对原始字节SHA与规范化内容,绑定快照/画布/审批人/计费账户/步骤集合,生效区间为 [createdAt, expiresAt)。ecs110审批单测4项32断言与TypeScript退出0,覆盖篡改、错摘要、跨画布/账户/快照、缺步、未来生效和到期边界。仍只返回 executionAllowed=false;这不是持久审批决策或实际入队证明,数据库和API接入待完成,未部署。

  • 审批快照规范化构造器已实现:绑定不可变计划快照、画布、审批人/计费账户、全部步骤请求摘要及价格、创建时间与最长15分钟有效期;稳定排序后序列化并计算SHA-256,拒绝缺步/重复/计划外步骤、金额与数量不符和超预算。ecs110 bun test src/lib/server/agent-plan-approval.test.ts 3项19断言、TypeScript退出0,验证顺序不影响摘要、账户/请求/期限改变摘要、调用输入不被修改和大整数总额拒绝。首次Zod UUID写法与Web版本不兼容,已改用当前Web写法并重跑通过。构造器尚未接入审批API/数据库;调用方仍须验证身份、从服务器加载权威计划和报价、收集确认并原子持久化,构造本身不授予执行权限,未部署。

  • 积分事务补充故障注入:预留成功后实际SQL唯一键冲突23505,外层回滚后预留/事件均为0、余额15和冻结0恢复;4个并发相同operation仅一个created、一个预留ID和一条事件,余额只减少10。ecs110隔离Postgres17 test-plan-reserve-transaction.ts 及TypeScript退出0,输出 late_sql_failure_rollback=true; concurrent_same_operation=true,原价格/预算并发矩阵继续通过,临时PG删除。这是调用方事务故障证明,不是实际审批或任务队列验收;业务接入仍待完成,未部署。

  • 事务内积分预留新增预期报价校验:调用方可绑定确认的计费单位、数量、单价和总价,新预留写入前逐项核对;已存在的幂等预留按原价核对,不随最新价格重新扣留。ecs110隔离Postgres17运行 test-plan-reserve-transaction.ts 退出0,验证价格10变11拒绝新预留、旧10报价仍可幂等读取、旧预留拒绝不同预期、单位/数量/总额不匹配拒绝,并重跑原子回滚与并发不透支;输出增加 expected_quote_checked=true; changed_price_rejected=true; idempotent_price_retained=true。TypeScript通过,临时PG删除。此为内部账本能力;持久审批记录和计划入队尚待接入,未部署。

  • 账本预留已提取 reserveCreditsWithClient:调用方可将预留、审批/入队记录放在同一事务,原 reserveCredits 保留建表与事务包装;操作锁、账户行锁和幂等冲突规则不变。ecs110隔离Postgres17运行 IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas bun scripts/test-plan-reserve-transaction.ts 退出0:两项预留第二项余额不足后全事务回滚,预留/事件为0且余额15未变;提交后重用不重复扣留、参数冲突拒绝、并发两项仅一项成功。输出 plan_reserve_transaction_pg=passed; atomic_rollback=true; ledger_rollback=true; idempotent=true; legacy_wrapper=true; conflicting_reuse_rejected=true; concurrent_no_overspend=true。TypeScript、计费单测18项226断言和独立审查通过,临时PG删除。仍需将不可变审批、报价校验、预算占用与任务记录实际接入同事务;没有新执行入口,未部署。

  • 累计报价新增画布账户余额与已知合计可支付状态:服务端同一只读事务读取画布owner账户,BigInt比较后以十进制字符串返回;客户端核对各项余额与累计状态,UI仍明确缺失步骤及未审批。ecs110隔离PG验证两项各10积分、余额15时单项均可付但合计不可付,余额保持15且原权限/价格/回滚测试通过(aggregate_balance=true);client3项20断言、TypeScript和构建通过。真实Agent/Web E2E19桌面1680/移动390px通过(1项/22.1秒),移动截图已目视检查换行及操作区。镜像 ic-batch-balance-ui-qa SHA 1f504e092985880f68e97d28e9c754f3717ef55e64f7dd41688a21af27955265,日志 /tmp/ic-batch-balance-ui.log,截图 /tmp/ic-batch-balance-ui-1680.png、/tmp/ic-batch-balance-ui-390.png;独立审查通过,临时PG删除、QA服务停止。只读余额预览并非余额锁定、审批或预扣,未部署。

  • 计划累计报价已接入画布:仅汇总当前修订已保存且报价确认的请求,重新准备输入会撤销旧选择与旧合计;缺失步骤明确列出,不将部分小计视作全价。客户端校验快照、请求摘要、完整性与BigInt合计。ecs110客户端3项18断言、TypeScript及构建通过;真实Agent/Web E2E19在1680/390px核对空选择、全部报价、超预算、重新准备清空与进度回归(1项/22.4秒)。首轮发现长计划按钮超出视口,已为计划区增加40dvh上限和内部滚动;复验按钮及消息输入区均在视口,截图已目视确认。镜像 ic-plan-batch-ui-qa SHA 021ab0c950d990fd7957baaf407e6af18954292ba1dbebe034153c6b5ccef745,日志 /tmp/ic-plan-batch-ui.log,失败日志 /tmp/ic-plan-batch-ui-overflow-failed.log,截图 /tmp/ic-plan-batch-ui-1680.png、/tmp/ic-plan-batch-ui-390.png。独立审查及滚动修复复审通过,QA服务停止;仍无审批、预算占用或真实生成,未部署。

  • 累计报价API已接通 POST requests/quote-batch,严格接收选中步骤/请求摘要,拒绝重复步骤、计划外步骤及客户端总价;空选择明确缺失步骤、不宣称完整报价。ecs110 TypeScript、镜像构建及真实Web/完整PG E2E20通过(1项/5.6秒):完整/空选择、400/413/409、降权撤权和账户/预留未变。镜像 ic-plan-batch-api-qa SHA c7b98c8aec3369424e75146b2452a8053d22a1ea5deedbe0d035a655b410b1b5,日志 /tmp/ic-plan-batch-api-ui.log;独立审查通过,QA服务停止。累计报价UI验收见本节最新记录;尚待审批和预算占用,未部署。

  • 同计划累计报价内部服务已实现:显式选择每步骤的一个请求,在同一REPEATABLE READ只读事务累计;遗漏步骤单独列出,空选择不会被当成完整报价。总积分使用BigInt计算并返回十进制字符串,避免多步骤相加溢出。ecs110隔离Postgres17运行 test-plan-preparation.ts 及TypeScript通过:两个请求10+10=20、部分步骤/空选择、重复与错误步骤拒绝、权限、总额18014398509481982精确保持;输出 plan_batch_quote_pg=passed; totals=true; multi_step=true; bigint_exact=true; missing_steps=true; duplicate_rejected=true; wrong_step_rejected=true; scoped=true。临时容器已删除;累计报价API/UI验收见本节后续记录;尚无审批或预算占用,不授予执行权限,未部署。

  • 请求报价已区分账户余额与计划预算:服务端在同一事务读取不可变计划上限,返回单请求是否超限,客户端校验比较结果;画布超限时引导修改计划,未超限仍提示核对全计划累计费用。ecs110 PG plan_budget_checked=true、client2项7断言、TypeScript/构建通过;真实Agent/Web E2E19双viewport验证余额足够但预算1低于报价10的提醒(1项/22.8秒),截图已目视检查换行正常。镜像 ic-plan-budget-ui-qa SHA cc733aed6c08be5a34f6d727dbbfde70457aaa5d015f5684ba092449e8d41dc1,日志 /tmp/ic-plan-budget-ui.log,截图 /tmp/ic-plan-budget-ui-1680.png、/tmp/ic-plan-budget-ui-390.png。独立审查通过,QA服务停止;仍非累计预算审批或预扣,未部署。

  • 画布计划面板已接“保存生成请求并报价”:准备输入成功且提案声明generationRequest后可用,缺请求时引导经Agent补齐并保存新修订。显示模型、报价、画布余额及未审批/未扣费/未生成提示;切修订或重新准备会清除旧报价,卸载取消请求。ecs110 client2项6断言/TSC及Web构建通过;真实Agent/Web/PG E2E19在1680/390px保存与报价HTTP200、进度原回归通过(1项/22秒),两尺寸截图已目视检查换行正常。Web镜像 ic-plan-quote-ui-qa SHA e73223ba6528546e7042b1e5ed4fbe8ed2cf0654d932ea2ccc7c59fb77e9eee1,Agent来自当前5f8711d9完整归档构建。日志 /tmp/ic-plan-quote-ui-fixed-agent.log,截图 /tmp/ic-plan-quote-ui-1680.png、/tmp/ic-plan-quote-ui-390.png;独立审查通过,进程/QA服务已停止。首轮旧增量Agent在中断门禁返回200而非409,未进入报价验收;保留失败日志 /tmp/ic-plan-quote-ui.log,不算通过。审批、预算与实际生成仍待接通,未部署。

  • Agent→Web请求提案契约已打通:步骤可携带generationRequest,服务器结构检查与浏览器读取不丢字段;Agent提示补充已核实模型/输入绑定,缺参数保留问题,不授权执行。请求变更纳入修订下游影响;已声明请求的保存修订拒绝编译摘要不同的参数。ecs110 Web14项67断言/TSC、Agent10项40断言及build、PG request_revision_pinned=true 通过;Web与独立Agent请求schema字节一致测试通过。初次Agent测试目录缺依赖,复用已验证隔离依赖后重跑通过,无生产改动。仍待真实模型提案、浏览器请求保存/报价交互及执行闭环,未部署。

  • 请求保存新增历史 Skill 输出类型门禁:在同一事务核对计划指定版本及步骤声明,图像/视频类型错配在INSERT前拒绝;后续Skill版本变化不替代旧版本。ecs110 PG验证 output_kind_checked=true; historical_skill_pinned=true、TypeScript与镜像构建通过,真实Web/完整PG E2E20错配422且记录数不变、原保存报价链路通过(1项/5.3秒)。镜像 ic-plan-output-contract-qa SHA 03f1869bd5e575257f5fcada9aff7cdb796e431f1b2e19ecfb618bd12abb02fe,日志 /tmp/ic-plan-output-contract-ui.log;独立审查通过,QA服务停止。仍待输出数量/产物映射、媒体内容、审批及执行,不把类型一致当作产物通过,未部署。

  • 已保存请求报价API已接通:仅接受快照/步骤/请求摘要,拒绝客户端改价字段;返回只读价格余额与 executionAllowed=false。ecs110 TypeScript、根镜像构建及真实Web/完整PG E2E20通过(1项/5.3秒):重复报价一致、账户与预留记录不变、正文不外泄、400/413/409、viewer403和撤权404。镜像 ic-plan-quote-api-qa SHA 20a68829c7367b157dbd2537836e826742b7851133c64f7ccd7fbdcc70cb8951,日志 /tmp/ic-plan-quote-api-ui.log;独立审查通过,QA服务停止。报价不是审批、锁价或下发,尚待UI及预算执行闭环,未部署。

  • 已保存请求的内部报价服务已接通:核验当前成员、计划归属、请求摘要和身份,从持久字段派生计费参数,在同一 REPEATABLE READ 只读事务使用画布所有者账户读取价格/余额。ecs110 新建Postgres17执行 bun scripts/test-plan-preparation.ts(隔离测试环境变量)及 bun x tsc --noEmit 退出0,输出 plan_request_quote_pg=passed; persisted_parameters=true; canvas_owner_balance=true; price_changes_visible=true; no_charge=true; scoped=true;请求者余额1、画布所有者100时读取100,价格10→20后新报价更新,账户未扣费,错误摘要/画布及viewer/撤权拒绝。容器已清理;尚无报价API、持久审批或锁价,不代表执行获准,未部署。

  • 候选请求保存API已接通:POST plan-snapshots/requests 使用有界严格参数,仅从服务器读取解析输入,返回请求摘要而非正文。ecs110 TypeScript、编译器单测及根镜像构建通过;真实Web/完整表PG E2E20验证保存、重复幂等、400/413/409/422、viewer403及撤权404(1项/5.5秒)。镜像 ic-plan-request-api-qa SHA 4a35be79c6f27551aa14cf3212c98c6fdf32031e0312539f7afb70f9594e0b86,日志 /tmp/ic-plan-request-api-ui.log,独立审查通过,隔离服务停止。尚无UI入口、请求报价/审批或实际下发;完整Skill输出契约和媒体校验仍是执行前置门禁,未部署。

  • 生成请求不可变存储已接入内部准备服务及平台迁移:按当前成员权限读取精确输入,编译后绑定输入外键、内容摘要并幂等保存,不返回正文。ecs110 新建 Postgres17 执行 IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas bun scripts/test-plan-preparation.ts 与 bun x tsc --noEmit 退出0;重复迁移/幂等、正文保持、禁止UPDATE、错误输入摘要及viewer/撤权拒绝、非空回滚保护、级联清理和空表回滚通过,输出 plan_request_store_pg=passed。临时容器已删除;使用最小父表,完整平台迁移与真实API仍待验证,未部署,也未授予执行权限。

  • 计划实际请求编译基础已实现:异步图片生成/编辑及视频端点可显式绑定模型参数、已准备文本与媒体内容描述符;共享计费策略规范化模型/数量/时长,摘要覆盖快照、步骤、输入摘要、端点及最终字段。拒绝重复字段、越界端点、伪造 owner 字段、缺失输入与无效计费参数。ecs110 相关23项251断言及 TypeScript 通过;媒体仍是待验证描述符,未下载、未提交,executionAllowed=false。尚待接入历史 Skill/输出契约、请求持久化、报价审批、完整媒体参数适配与实际执行,不视为完整 Harness。

  • 共享生成计费请求已修复数量类型与图片张数回写:图片 JSON/multipart 都发送报价对应的规范化整数 n,显式 null/布尔值/数组/对象数量拒绝,不再视为默认值。ecs110 基线新测试复现2项失败,修改后计费策略/实际请求重建/owner隔离23项248断言与 tsc --noEmit 通过(命令在隔离目录执行:bun test src/lib/server/billing-policy.test.ts src/lib/server/canonical-billing-request.test.ts src/lib/server/scheduler-owner.test.ts)。仅验证共享请求策略,尚未发布或进行供应商生成验收;计划执行绑定/报价审批仍待完成。

  • 同步骤多次尝试绑定联验已通过:真实 PostgreSQL 创建 attempt 1/2 后,快照 API 只返回 attempt 2;新操作无事件保持 unreported,旧操作仍能读取自己的 queued 事件。ecs110 E2E20 1项/5.3秒,日志 /tmp/ic-plan-latest-attempt-ui.log;独立审查通过,两个操作及其 Skill 引用清理、隔离服务停止。仅验证读取与事件隔离,没有启动生成或授权重试,未部署。

  • 成功终态停轮询专项已通过:E2E19等待真实进度HTTP200及成功展示后监听6.5秒(超过5秒间隔),该operation新增进度请求为0;同一 ic-progress-poll-qa 镜像,1项/21.2秒,日志 /tmp/ic-progress-terminal-stop-ui.log。独立审查通过,监听/fixture/QA服务清理完成。证据限该窗口,隐藏标签页及实际执行器仍待验证,未部署。

  • 用户首次查询后的非终态进度已改为请求完成后每5秒串行自动刷新;终态/无尝试/错误停止,隐藏标签页跳过网络,切修订/关闭时取消请求与定时器。ecs110 TypeScript、构建和真实E2E19 submitted→running无点击自动更新通过(1项/15.5秒),独立审查通过。镜像 ic-progress-poll-qa 摘要 778b98bd4559bc76d104681969757de921cf3f84acf8889018158b186ddebfbb,日志 /tmp/ic-progress-poll-ui.log,QA服务停止。首次查询仍由按钮触发,隐藏/终态停轮询专项与实际执行器待验收,未部署。

  • E2E19已补完整表attempt及六状态事件fixture→真实进度API→UI的1680/390px联验:queued/submitted/running/interrupted/reconciliation_required/succeeded均正确展示,成功仍提示待核验产物且不授权重跑。同一 ic-plan-progress-panel-qa 镜像通过(1项/10.3秒),日志 /tmp/ic-plan-progress-states-ui.log;独立审查通过,attempt/refs清理及Skill归档、QA服务停止。此为持久记录展示验证,没有模型/GPU调用,自动刷新与执行器仍待完成,未部署。

  • 已保存计划逐步骤新增“刷新执行进度”:先查当前快照attempt,再读对应进度;无尝试明确未创建任务。修订切换重挂载、刷新/卸载取消旧请求,失败不伪造终态。ecs110 TypeScript、client3单测/15断言、真实Agent/Web E2E19桌面1680/390px无尝试分支通过(1项/7.7秒);独立审查通过。镜像 ic-plan-progress-panel-qa 摘要 a8a86c785a5cf41820d548cbefc8d4d2135af0ea631495ef8bd6db10bf31aabd,日志 /tmp/ic-plan-progress-panel-ui.log,QA服务停止;有尝试各状态UI、自动刷新与真实执行器仍待完成,未部署。

  • 快照GET新增可选attempts=1,在同一鉴权只读事务按步骤返回最大attempt及operation ID;无尝试为空,未传参数保持原响应。ecs110 TypeScript、构建及E2E20空列表/完整表尝试定位联验通过(1项/5.2秒),独立审查通过。镜像 ic-plan-attempt-list-qa 摘要 95b346f1d343d5567c3ee1a32fe0acb8b0259d58271cfbb53e433ac3042e683a,日志 /tmp/ic-plan-attempt-list-ui.log,QA服务停止;多尝试选择专项及UI仍待验收,未部署。

  • 新增画布进度client调用与协议校验:校验operation ID、状态、非执行标记;序号保留字符串,无事件保持unreported;不回传外部任务字段,支持15秒超时及调用方取消。ecs110单测2项/11断言、TypeScript通过;测试fetch替身已适配Bun扩展类型,独立审查通过。尚未接UI,不是实际执行器验收,未部署。

  • 最新执行进度已接鉴权GET,200/unreported与queued区分,404隐藏不可见尝试,400拒绝参数,固定不授予执行且不返回externalTaskId。ecs110 TypeScript、构建及真实Web/PG E2E20通过(1项/4.7秒),完整表fixture验证准备输入→attempt引用触发器→事件→进度读取,尝试/事件/执行refs清理完成;不是实际执行器下发。镜像 ic-step-progress-api-qa 摘要 ab9f01b5d3722cc4c7ed534acdd7a913a13f4b8c9ede224149a2369d0721534a,日志 /tmp/ic-step-progress-api-ui.log,独立审查通过,QA服务停止。未部署,待界面及真实任务接线。

  • 持久进度内部读取已实现:单SQL按用户/画布/尝试与当前成员筛选最新事件,允许viewer查看自己的计划,无事件返回unreported;返回状态/序号及受限code/progress,不回传外部任务ID。ecs110 TypeScript与真实PG最小父表最新终态、跨用户/画布拒绝、viewer、撤权、无事件矩阵通过,输出 step_progress_read_pg=passed; latest_state=true; viewer=true; scoped=true; revoked=true; no_event_unreported=true,原事件写入及迁移矩阵亦通过,独立审查通过;临时容器销毁。尚待API/实际执行器接线,序号不是全局恢复游标,未部署。

  • 内部事件写入已实现尝试行锁、event_id内容幂等和状态转换约束;终态拒绝重新打开,中断先进入待核对。ecs110 TypeScript与真实PG脚本通过:并发同事件仅写1行、内容冲突/非法转换拒绝、终态不重开,输出 step_event_writer_pg=passed; concurrent_idempotent=true; conflicting_event_rejected=true; transitions_checked=true; terminal_not_reopened=true,原事件迁移/回滚矩阵亦通过。独立审查通过,临时容器销毁;仅受信任内部服务,无公开写入口、实际执行器或外部任务核对接线,未部署。

  • 新增执行事件表及平台迁移注册:关联真实attempt operation ID,唯一event ID、有限状态种类、16KiB对象detail、拒绝UPDATE和非空回滚保护。ecs110 TypeScript、真实PG最小父表迁移/重复/外键/重复事件/非法状态/更新拒绝/父级清理/回滚通过,输出 step_events_pg=passed; repeat_migration=true; attempt_fk=true; event_unique=true; immutable=true; rollback_guard=true; parent_cascade=true; empty_rollback=true。四文件独立审查通过,临时容器销毁;尚待全量迁移、事务写入与状态转换/进度接口,sequence不保证提交顺序,未部署。

  • 平台迁移入口已注册快照→尝试→引用触发器三条迁移,排在 Skill 依赖之后;修复此前只有 SQL 文件而默认入口未执行的缺口。清单存在性/唯一性/依赖顺序/排除 down 检查及 ecs110 TypeScript 检查通过,独立审查通过。候选 9b778323 已由 Git archive 提取迁移入口、SQL 与登录依赖,在 ecs110 /tmp/ic-migrations-9b778323 使用全新 PostgreSQL 17 临时容器执行两次 /root/.bun/bin/bun scripts/migrate-platform.ts,均退出0;两张 Agent 表、三个保护触发器存在。日志 first.log、repeat.log、schema.log 留存在该远程目录,输出 full_platform_migration=passed_repeat_passed,清理复查 isolated_container_cleaned=true。新库重复迁移证据,不等同生产旧数据升级或执行器验收;未部署。

  • 步骤尝试引用触发器通过 ecs110 隔离 PG 最小父表测试:合法步骤登记一个执行引用、未知步骤与 viewer 写入拒绝、失败不残留引用、空表回滚。输出 attempt_reference_binding=passed; missing_step_rejected=true; viewer_rejected=true; empty_rollback=true;修复 UUID 大小写比较后专项输出 uppercase_skill_uuid=passed。独立复审无新增高置信度问题;临时 schema 与 PG 服务已清理。完整归档触发器/并发、历史回填、非空引用回滚分支仍待专项验证,未接执行器、未部署。

  • 不可变尝试标识迁移已通过隔离PG验证:重复迁移、更新拒绝、operation唯一、缺失Skill历史版本拒绝、非空回滚保护及空表回滚。输出 step_attempt_migration=passed; immutable=true; operation_unique=true; version_fk=true; rollback=true。独立审查通过,测试schema/PG服务已清理;最小父表验证,非完整执行链路,未部署。

服务端计划快照迁移基础

  • 内部执行读取新增 readPreparedPlanInput:按快照所有者、画布、步骤、摘要及当前owner/editor筛选,重新解析固定输入schema并复算摘要;不作为浏览器响应,不授予执行。ecs110 TypeScript和真实PG最小父表准备/读取联验通过,输出 prepared_input_read_pg=passed; scoped=true; wrong_digest_rejected=true; viewer_revoked_rejected=true,原准备矩阵亦通过,临时容器销毁,双文件独立审查通过。仍待完整准入调用与内容验证,未部署。

  • 累积候选 3309b86de78bcaea36ab3513cfaab417bdd8e02d 已通过固定源码联合验收:Git archive至ecs110 /tmp/ic-exact-3309b86d,按 git ls-tree -r 对1487个blob逐一校验。初次校验早于传输完成而拒绝,确认传输退出0后重新校验全部通过,未跳过差异。TypeScript及7文件36单测/293断言通过;同目录Docker镜像 ic-exact-3309b86d-qa(cb35e501abd6b5ffa967d8fa8cd850a6cc5dde35b29aa6a52b33d2b6380f4db8)E2E19+20串行联验2项/11.2秒通过,日志 /tmp/ic-exact-3309b86d-build.log、/tmp/ic-exact-3309b86d-ui.log。Agent复用69443e1d已验证构建,已确认该基线至候选canvas-agent源码diff为空。QA服务停止;此为计划准备/计费规范化的固定候选证据,不覆盖真正模型/GPU、执行准入、审批或生产发布,未推送部署。

  • Proxy真实请求规范化函数已原行为提取到 canonical-billing-request.ts,实际Proxy仍调用同一实现,供后续执行快照复用。ecs110 JSON/multipart、计费policy、身份边界单测21项/218断言及TypeScript通过;验证模型/时长与计费解析一致、媒体字节保留、伪造归属字段剥离及JSON输入不改写。三文件独立审查无高置信度问题。不等同真实供应商生成、请求快照持久化或上线验收;未部署。

  • Skill创建/更新也已采用512KiB有界JSON解析,坏JSON400、超限413,不再误报500;原规范化不变。ecs110 TypeScript、构建和E2E19请求错误及原准备成功链路通过(1项/8.1秒),独立审查通过。镜像 ic-skill-bounded-input-qa 摘要 0826ea483b6cdb304fc089136c85d5b75250e810b0e88467181724f8c7938da0,日志 /tmp/ic-skill-bounded-ui.log,QA服务停止,未部署。

  • 既有计费报价逻辑已提取 quoteCreditsWithClient,可复用调用方事务而不建表/账户或预扣;原quoteCredits接口保留初始化行为。ecs110 TypeScript与隔离PostgreSQL脚本 web/scripts/test-plan-quote-transaction.ts 通过,输出 plan_quote_transaction_pg=passed; repeatable_price_balance=true; fresh_changes_visible=true; no_account_write=true; missing_units_rejected=true,临时容器已销毁,独立审查通过。此为准入事务报价依赖,尚未绑定Skill执行参数/审批记录,不是锁价或执行授权;未部署。

  • 修复真实联验发现的Skill归档参数错误误报500:DELETE改为有界4KiB JSON读取和严格正整数修订,异常请求400/413且不修改Skill;现有数值revision客户端兼容。ecs110 TypeScript、镜像构建及E2E19缺body/null/bool/0/超限、随后可读及正常归档联验通过(1项/8.1秒);独立审查通过。镜像 ic-skill-archive-input-qa 摘要 5df24d3b3b8a28cb72a04aa113b5e9eb3a776dac0c42acd3ac368b6541fda8ac,日志 /tmp/ic-skill-archive-input-ui.log,隔离服务停止;未部署。

  • 成功输入准备UI已通过真实Skill创建→真实Agent计划→Web快照保存→准备API的桌面1680/390px联验(E2E19,1项/7.7秒),同一 ic-plan-preparation-panel-qa 镜像,日志 /tmp/ic-plan-preparation-success-ui-final.log。使用中性文本默认值,不调用模型/GPU;界面明确未生成未扣费。首轮fixture分类/触发词不合契约、次轮清理DELETE遗漏expectedRevision,修正后通过;Skill清理是API归档保留历史,非物理删除。审查发现清理异常跳过page.close已修复并复审通过,QA服务已停止。全流程生成仍待验收,未部署。

  • 计划详情已提供逐步骤“准备步骤输入”:仅绑定当前已保存修订;修订切换重置旧结果,返回缺文本/素材/Skill/上游及类型声明提示,不启动生成。ecs110 TypeScript及独立审查通过;真实 Agent/Web E2E19 桌面1680和390px缺失Skill拒绝反馈通过(1项/5.9秒),日志 /tmp/ic-plan-preparation-panel-ui-rerun.log。Web镜像 ic-plan-preparation-panel-qa 摘要 d32c20bb8db42ff710defa5b8c505638353e2c9d81dccd03511958aeefd9f58e;Agent复用明确基线 /tmp/ic-exact-69443e1d/canvas-agent/dist/index.js(本轮未改Agent),首轮错误指向无构建增量目录,修正后同镜像复跑通过。QA服务停止。成功准备UI、完整候选及真正生成仍待验收;未部署。

  • 画布 API client 已提供输入准备调用:仅发送快照/步骤ID,验证200与422的业务状态、步骤身份、摘要及非执行标记;正文/原始服务异常不进入返回数据。ecs110 client 单测6项/35断言与 TypeScript 通过,双文件独立审查通过。尚未接按钮/UI,继续任务执行面板接线,未部署。

  • 输入准备已接入鉴权 POST /api/canvas/projects/{id}/plan-snapshots/prepare,严格只接受快照与步骤ID,4KiB限额,不接受客户端正文;准备通过200,未满足条件422,始终不允许执行。ecs110 TypeScript、Web镜像构建及真实 Web/PG E2E20 通过(1项/4.8秒),覆盖精确正文持久化但不回传、重复幂等、正文变更、无效引用422、viewer403及撤权404,尝试仍为0。镜像 ic-plan-preparation-api-qa 摘要 3f81c1450990987f71dfe2c3c430dd95cdc2d8008766103619a0c63f42e91e50,日志 /tmp/ic-plan-preparation-api-ui-rerun.log;首轮漏传隔离容器标识被保护拒绝,补齐运行脚本后重跑同镜像通过,QA服务已停止。独立审查无高置信度问题。未部署,仍待完整执行准入与报价/媒体校验。

  • 新增内部输入准备事务:当前 editor/owner 权限与成员共享锁、画布共享锁、一致性读取后保存服务端解析正文/媒体登记摘要;重复输入幂等,变更保留新摘要。不接公开入口,不创建尝试/扣费/下发,媒体字节验证仍待接入。ecs110 隔离目录 ic-v0186-29d393d0 TypeScript 与最小父表真实PG测试 bun scripts/test-plan-preparation.ts 通过,输出 plan_preparation_pg=passed; exact_payload=true; repeat_idempotent=true; changed_input_retained=true; viewer_revoked_rejected=true; invalid_not_written=true; response_redacted=true; execution=false,临时容器已清理,三文件独立审查无高置信度问题。完整表并发/API联验及最终发布候选复验仍待完成,未部署。

  • 尝试表已新增精确输入快照复合外键,迁移注册在输入表之后;真实PG最小表复验通过:缺payload拒绝、被引用输入删除拒绝、非空引用回滚保护,输出 resolved_input_refs_pg=passed; missing_payload_rejected=true; referenced_delete_rejected=true; rollback_guard=true;原输入表矩阵亦通过,临时容器销毁。旧数据缺payload迁移失败矩阵已通过,确认23503后回滚不残留FK(historical_orphan_upgrade_rejected=true)。候选 9d2cd077 由git archive在 ecs110 /tmp/ic-migrations-9d2cd077 运行完整平台迁移及重复执行,均退出0,确认引用约束convalidated=true和输入不可变触发器启用;日志first.log/repeat.log/schema.log,输出 full_input_migration=passed_repeat_passed,临时容器清理。实际全量父表级联与服务写入仍待联验,未部署。

  • 新增不可变解析输入快照表并接平台迁移入口。真实PG最小父表脚本通过重复迁移、合法多字节正文摘要、分别错误摘要/身份拒绝、更新拒绝、非空回滚保护、级联后空表回滚;输出 resolved_inputs_pg=passed; repeat_migration=true; digest_checked=true; immutable=true; rollback_guard=true; empty_rollback=true,独立审查通过,临时容器清理。尚未全量迁移复验或接执行尝试/写入服务,未部署。

  • 快照检查改为单个 REPEATABLE READ READ ONLY 事务,计划/成员/历史Skill/媒体/文本查询共用client,语句与事务空闲超时15秒。真实PG并发更新测试输出 repeatable_text_read=passed; concurrent_update_visible_only_to_new_read=true,原文本/媒体矩阵、TypeScript与8文件独立审查通过;外层临时容器已清理。新API事务入口已通过真实 Web/PG/E2E20(1项4.2秒),覆盖幂等冲突、历史Skill、上下游类型、媒体/文本当前引用、正文摘要变化及顺序撤权。ecs110 /tmp/ic-plan-repeatable-read-ui.log,镜像 ic-plan-repeatable-read-qa SHA256 1d3abc0d405d23ebee3b3c854a3d201f9ea1fc369b419832e975e61e7ef547a0;构建通过,QA项目容器全部停止。HTTP测试没有受控并发改写屏障;一致性由此前真实PG并发脚本验证,不保证检查结束后权限仍有效,不是持久执行锁,未部署。

  • 新增服务端输入快照构建模块,以固定schema字段顺序与输入名称排序计算SHA256,绑定保存快照ID/步骤、正文或媒体storageKey/类型/登记摘要/大小;拒绝重复输入、裸URL描述及超过2MiB的序列化结果。ecs110 2项/10断言及 TypeScript 通过。已接单步骤实际解析的文本/媒体登记值与文本默认值;上游未生成产物、媒体默认值保持未解析及null摘要。真实 Web/PG/E2E20 通过(1项4.5秒),验证正文变化导致有效摘要变化、未解析上游不冒充完整输入;修复审查指出的null摘要假通过断言并复审通过。ecs110 /tmp/ic-plan-input-fingerprint-ui.log,镜像 ic-plan-input-fingerprint-qa SHA256 77d7a98a5f8eee9cee952f5d91440871a56aa6f8f60348e3e0e9da795220159e;QA已停止。本次只是检查时读取,不是事务化内容锁,未接尝试持久化或审批,摘要不证明媒体内容,未部署。

  • 文本输入已从当前成员可见画布唯一 text 节点读取,按 content→prompt 取值;拒绝空白、类型不符和超过1MiB内容,内部计算UTF-8大小/摘要,API不返回正文。真实PG脚本输出 plan_text_reference_pg=passed; fallback=true; duplicate_rejected=true; empty_rejected=true; revoked=true,媒体矩阵复验及 TypeScript、独立审查通过;临时容器清理确认。文本API新分支已通过真实 Web/PG/E2E20(1项4.1秒):当前文本输入匹配、响应不额外包含正文、删除节点后返回PLAN_TEXT_REFERENCE_INVALID。ecs110 /tmp/ic-plan-text-inspection-ui.log,镜像 ic-plan-text-inspection-qa SHA256 e3517740f10f7863ceeddacef4218d42d2b1f70b504df9e78bcef0152e3d1929;TypeScript与构建通过,fixture清理且QA服务停止。大文本边界与执行时内容锁仍待验证,未部署。

  • 单步骤媒体输入开始读取当前成员可见画布的节点 storageKey、画布媒体引用及 media_objects,核对登记 MIME、大小和摘要;不走临时 URL,不宣称解码。文本输入保持未知。ecs110 parser 1项/6断言与 TypeScript 通过,独立审查通过;真实 PostgreSQL 最小表联验已通过 web/scripts/test-plan-media-reference.ts:有效登记、重复节点(含无效storageKey)、撤权、缺引用及MIME不符。修复重复ID需在媒体JOIN之前计数,输出 plan_media_reference_pg=passed; duplicate_node_rejected=true; revoked=true; missing_ref=true; mime_mismatch=true;TypeScript与独立审查通过,临时容器销毁复查通过。完整QA表与API媒体分支已通过E2E20(1项4.1秒):登记fixture+当前节点匹配后通过,删除节点后旧计划返回PLAN_MEDIA_REFERENCE_INVALID。ecs110 /tmp/ic-plan-media-inspection-ui.log,镜像 ic-plan-media-inspection-qa SHA256 f902655fe102272e8e65abb1b04713597094b681384f559df900a7695ca9359a;TypeScript、构建、独立审查通过,fixture按范围删除且QA服务停止。仅登记fixture,无实际OSS文件、下载或解码;mediaAccessVerified仍为false,未部署。

  • 单步骤 API 已接绑定类型检查:按绑定的直接上游步骤读取当前用户历史 Skill 输出类型,重复上游去重;素材输入只读取计划声明类型。返回 inputKindsMatched/unknownInputs,同时明确 mediaAccessVerified:false。ecs110 TypeScript 与契约4项17断言通过,独立审查通过;新上游解析已通过真实 Web/PG/E2E20 两步骤联验(1项3.8秒):rev1图片输出→rev2图片输入通过;下游改用rev3视频输入后拒绝,保持零attempt与撤权保护。ecs110 /tmp/ic-plan-binding-types-ui.log,镜像 ic-plan-binding-types-qa SHA256 1038561a52d618b95d146d2dd0b41f07c4cf30ccde8eaedfb956caf8ec14a655;TypeScript、构建、独立审查通过,fixture按范围清理且QA服务停止。仍不代表媒体授权或执行准入完成,未部署。

  • Skill 输入新增可选媒体 kind,旧声明缺失不推断;新增显式绑定输入类型检查,明确不匹配拒绝,缺类型标记未知。ecs110 11项/46断言与 TypeScript 通过,独立审查通过;首次测试枚举类型推断错误已修正重测。此检查只覆盖显式绑定,不覆盖未绑定默认值的媒体有效性;来源类型解析、实际媒体权限与 API 接入仍待完成,未部署。

  • 快照 GET 新增 inspectStep 单步骤声明检查,接入当前用户的真实历史 Skill 读取;不采用客户端 Skill 内容,不返回默认值,基础设施错误不吞成契约错误。ecs110 TypeScript 与结构/契约6项26断言通过,独立审查通过;新增服务编排已通过真实 Web/PG/E2E20(1项3.8秒):Skill当前版本改为video后,原计划仍读取rev1的image声明;缺步骤、空参数、撤权与零attempt检查通过。本次Skill/快照/画布按fixture范围清理,QA服务停止。ecs110 /tmp/ic-plan-step-inspection-ui.log,镜像 ic-plan-step-inspection-qa SHA256 8d002d533348d830104b9c331f6b1c3eb3e627bd7587a52acd048228b991d080;TypeScript及独立审查通过。不代表素材权限、跨用户Skill隔离专项或完整执行准入,未部署。

  • 新增历史 Skill 输入/输出声明匹配函数:先核对版本与输入,再核对请求输出名称及声明类型;缺契约、未知名称和重复名称拒绝。ecs110 3项/13断言及 TypeScript 通过。声明匹配与实际产物验证分别表示,执行仍为 false;尚未接鉴权读取编排、跨步骤类型匹配及实际产物验证,未部署。

  • Skill manifest 增加可选 outputs:[{name,kind}],kind 为 image/video/audio/text;旧版缺失保持缺失,空数组保留,重复/未知类型/超过100项拒绝。沿用现有 JSONB 与版本修订,无数据库字段变更。ecs110 8项/30断言及 TypeScript 通过;尚未接输出契约匹配、UI编辑与实际产物验证,未部署。

  • 快照 GET 新增可选 inspect=1,在既有鉴权读取之后返回结构评估和待完成门禁,保持不可执行;普通读取不变。ecs110 结构检查3项/13断言及 TypeScript 通过;E2E20 已通过真实 Web/PG/浏览器联验(1项,3.7秒):旧结构拒绝、新结构通过但不授权、普通读取无额外字段、检查前后零尝试、撤权检查404。ecs110 日志 /tmp/ic-plan-inspection-ui.log,镜像 ic-plan-inspection-qa(SHA256 3fe10293dcd96a1911069e5be15da7f913495ac35093c76f9874d2d276a84c6c);独立审查通过,QA服务全部停止。增量候选镜像,不是最终全量发布验收,未部署。

  • 新增计划/Skill历史修订输入匹配模块,拒绝版本错配、未知/重复绑定与缺必填输入,未绑定项只读取该修订默认值。ecs110 2项/7断言及 TypeScript 通过。调用方仍需使用鉴权历史读取并接入准入事务;现有 Skill manifest 没有输出类型契约,明确返回未验证输出/未授权执行,不作为完整 Skill 契约验收,未部署。

  • 新增服务端执行计划结构检查:严格 v1 协议、快照计划ID/修订对应、DAG/预算与输入输出引用校验,返回不授权执行。ecs110 2项/10断言及 TypeScript 通过;首次使用 Agent 的 Zod4 UUID API 在 Web Zod3 失败,已适配并重测。当前是待接准入服务的校验模块,不改变快照存储 API,不代表素材授权、Skill 契约、权威报价或任务下发已完成。

  • 修复 Web 计划详情解析丢弃 schemaVersion:版本1保留并随快照保存,未知版本拒绝;旧版缺失保持缺失,不伪造升级或授予执行。ecs110 API client 单测5项/27断言与 TypeScript 检查通过,双文件独立审查通过。既有缺版本快照不回填,执行准入需拒绝未验证协议;本轮是 client 契约验证,未重新执行浏览器/PG联验,未部署。

  • 画布计划详情新增保存当前修订到服务器入口,剔除派生影响/估算并核对返回修订;超时提示结果未确认,可按相同修订幂等核对。5项/23断言、TypeScript及独立审查通过;按钮到真实Agent/Web/PG的E2E19联验通过(1项,5.8秒,ecs110 /tmp/ic-plan-snapshot-button-ui.log);移动视口点击后回读修订2和上游绑定,剔除派生字段,切修订1撤销旧保存提示。镜像 ic-plan-snapshot-button-qa 构建及独立审查通过;服务已停止,快照样本仅留隔离QA库,不授予执行权限,未部署。

  • E2E20已在固定隔离URL/PG容器验证角色降viewer后写403/读200、成员删除后读写404,并清理本次快照和新画布、断言快照0残留。最终1项通过(3.5秒,ecs110 /tmp/ic-plan-snapshot-permissions-final.log),独立复审通过。属于顺序权限变化,不是受控事务并发撤权;QA服务已停止。

  • E2E20新增真实HTTP并发样本:已有同修订6次并发返回同一ID;全新修订两种内容竞争得到200/409,读回为胜者内容。测试通过(ecs110 /tmp/ic-plan-snapshot-concurrency-ui.log),独立审查通过,QA服务停止。仅为请求并发样本,未覆盖受控数据库锁交错、并发撤权或完整执行准入。

  • 新增本人画布快照POST/GET,编辑权限及事务成员行锁保护保存,同修订同JSONB内容重试返回原ID,异内容409。真实隔离Web/PG的E2E20通过;第一次page.request因Secure Cookie未携带401,改用项目pageFetch并等待成员持久化后通过。尚未验证并发撤权/跨账号矩阵,不授权执行,未部署。

  • 新增不可变计划快照及空表回滚迁移;真实隔离PG独立schema验证重复迁移、更新拒绝、同修订唯一、非空回滚拒绝并保留数据、用户级联后空表回滚。输出 snapshot_migration=passed; immutable=true; unique=true; nonempty_rollback_rejected=true; empty_rollback=true,独立审查通过,测试schema与PG服务已清理。

  • 本轮只验证数据库基础,测试users为最小关联表;尚未接入现有用户/成员全流程、写入API及逐步骤尝试,未部署。

固定候选联合验证补验

  • 同一69443e1d快照已构建Web镜像 ic-exact-69443e1d-web,SHA256 55c3fd25d4b98dd454b47d11313ec6a6c1d89d9f9ce0e9828901d60cec10a12d;与同快照Agent联合运行E2E10/16/19,6项通过(17.1秒)。覆盖桌面/移动H3路由、真实PG账本/权限、Agent绑定/估算/历史/故障展示。日志 ecs110 /tmp/ic-exact-69443e1d-web-build.log、/tmp/ic-exact-69443e1d-ui.log。QA服务与临时Agent进程已清理;媒体调用仍为fixture,非GPU生成/真实结算/生产部署验收。

  • 固定源码 69443e1da2607a0325c0c79a614d494c44bd288f 通过Git archive建立 ecs110 /tmp/ic-exact-69443e1d,1456个Git blob逐一校验无差异,报告 source-verification.json。Agent package/shrinkwrap与复用依赖源一致,Web package/bun.lock亦一致。

  • 同一快照Agent全量测试、构建、提案HTTP/MCP和队列崩溃恢复脚本通过;Web报价/提案9项29断言及TypeScript通过。日志 /tmp/ic-exact-69443e1d-tests.log 以 exact_candidate_tests=passed 收尾。该测试未调用真实模型或GPU,尚非最终Web镜像、全产品验收或生产发布。

报价换算保留服务端判定

  • 多请求报价换算不再将服务端 canAfford=false 改为true;乘积超安全整数范围时保持禁止提交。5项/9断言与TypeScript检查通过,独立审查通过。未修改服务端预扣/结算,也不把报价加载中null当余额不足;未部署。

Agent 计划估算输出

  • 提案读写响应新增派生 estimate:已知合计、未知步骤、完整性与可空总额;明确零成本与未知成本区分,quoteConfirmed固定false。历史修订按自身步骤重算,不修改存储格式。161项/689断言、构建、HTTP/MCP回归及独立审查通过(ecs110 /tmp/ic-plan-estimate.log)。前端已接入已知合计、待补齐总额和未知步骤,API按步骤重算并拒绝矛盾汇总;4项/20断言及TypeScript通过,独立审查通过。最终镜像 ic-plan-estimate-ui-qa 重建通过(ecs110 /tmp/ic-plan-estimate-ui-build.log),真实Agent E2E19桌面/移动成本展示及历史切换回归通过(1项,5.8秒,ecs110 /tmp/ic-plan-estimate-ui.log),覆盖已知3+未知video、旧修订0+未知frame与旧值撤销;独立审查通过,QA服务/Agent进程已清理,无模型或GPU调用。不是供应商报价或扣款,未部署。

Agent 计划步骤输入绑定

  • 共享 Agent 指引补齐步骤输入/输出与缺口记录规则;真实 MCP stdio/HTTP fixture 已验证两步数据流、非法素材与输出引用拒绝、最新/历史完整读取。160项/685断言、构建及协议回归通过(ecs110 /tmp/ic-bindings-mcp-test.log),独立审查通过。模型调用0,尚不证明真实模型会正确采集或遵循全部规则。

  • 画布详情已接入素材/上游步骤输出来源、步骤标识和预期输出展示,明确区分提案与已生成产物。API解析保留新增字段并拒绝未知来源类型;隔离4项单测/17断言及TypeScript检查通过。隔离镜像 ic-plan-bindings-ui-qa 构建通过;真实 Agent E2E19 在1680/390视口验证两类绑定、预期输出、切回旧修订撤销新版绑定及无生成入队,1项通过(5.2秒,ecs110 /tmp/ic-plan-bindings-ui.log)。独立审查通过,QA服务与Agent进程已清理;未调用模型或GPU,未部署。

  • 步骤支持可选 outputs 与 inputBindings,绑定仅引用已声明素材或直接依赖步骤的已声明输出;拒绝重复名称与悬空引用。输出、绑定修订纳入受影响步骤传播,旧计划保持兼容。

  • ecs110 隔离 Agent 全量160项/685断言及构建通过(/tmp/ic-plan-bindings.log);真实HTTP重启读取当前/历史版本均完整保留绑定,MCP回归通过,模型调用0。三文件独立审查无高置信度问题。

  • 仍是提案描述,不构成素材访问授权、Skill输入输出锁或执行批准;前端展示与模型采集待接入。候选未部署。

媒体、账本与 Agent 联合回归

  • 在同一隔离栈运行 E2E-010/016/019,共6项通过(17.5秒,ecs110 /tmp/ic-media-agent-joint-ui.log):桌面/移动H3路由与禁止跨族替换、真实PG权限和账本冲突、实际Agent计划及暂停诊断。Web镜像 ic-h3-preserve-family-qa,Agent为 /tmp/ic-lock-package/canvas-agent/dist/index.js;后续QA服务均停止。
  • 与当前候选57a459e3比较:远程Web源码与清单617个Git blob、Agent源码与清单30个Git blob均无差异,报告分别为 /tmp/ic-media-agent-source-audit.json、/tmp/ic-media-agent-agent-source-audit.json。该核对范围不包含全部构建输入、镜像反向证明或生产部署。生成网络仍为fixture,数据库/Agent为真实隔离服务;本轮无新增GPU调用,不扩大先前L2VA单样本结论。

H3 真实推理前置核查

  • L2VA已提交一次真实Scheduler任务 task-idem-b1265d8667ea1403aa9936b3762e6561455b6c67473b3cbe245ca5e1f3786076,幂等键 qa-l2va-e7b2248d-single。固定5秒/480p/9:16/seed20260905,已查看中性成年人物参考图,输入SHA256 c56b08fa77aca4fa12248b7c936698bfc1e7c29a5fdd8072c0148508f1d9aee9;实查RUNNING于vps66:8189,排队5.244秒。请求记录 ecs110:/tmp/ic-l2va-submission.json;vps66 /tmp/ic-l2va-acceptance/telemetry.csv 正在200ms采样(900秒自动停止)。后续已确认SUCCEEDED:GPU67.675秒,全量解码及源图/5帧/实际末帧检查通过;遥测342条,设备基线36570/峰值76565 MiB,非独占模型峰值。输出与详细边界已补GPU API文档;仅直连Scheduler单样本,不等同画布/积分闭环,采样已停止。首次脚本因缺httpx在请求前退出,改用已有aiohttp后成功,未重复提交。

  • 实查 ecs110 Scheduler 镜像为 infinite-canvas-scheduler:51f522830d5373f921694abb99dd390f9c914ae2,health返回task_database=ready,8实例;观测时PENDING/RUNNING/DISPATCHING均0。10个H3能力入口均有8个routed/ok/非stale候选。原始快照保存在 ecs110:/tmp/ic-h3-readiness-51bc7f1a.json。空队列不是GPU资源独占,也不是推理/质量通过;本轮未提交生成。

  • 当前权威GPU文档路径为 docs/content/docs/backend/gpu-api/index.mdx。其既有I2VA/FL2VA/REF2VA输出证据不覆盖L2VA;下一真实输出重点补L2VA,并单独采集逐卡显存与输入/尾帧一致性证据,不能用能力探测代替。

H3 自动路由保留模型族

  • 当前选定H3且没有兼容H3候选时不再退选其他视频工作流;返回空路由由现有UI保留模型及输入提示,用户仍可手动选择其他模型。10项单测/42断言、TypeScript、构建和独立审查通过;桌面1680px/移动390px连续上传删除回归2项通过(6.9秒,ecs110 /tmp/ic-h3-preserve-family-ui.log)。1图I2VA/L2VA/REF2VA、2图FL2VA/REF2VA、3图REF2VA合同不变。跨族禁止已补浏览器专项:1680px/390px选H3 T2VA后上传图,H3保留且置灰、Wan I2V仍可选;合计4项回归通过(10.8秒,ecs110 /tmp/ic-h3-no-fallback-ui.log),独立审查通过,网络与存储使用替身,无GPU调用;QA服务停止,未部署。

生成证据与账本核对

  • E2E-016 已在隔离真实PG/HTTP核对超安全整数相邻金额不匹配、修复金额恢复分类、released但usage仍存在均需核对,不授权复用。首次因QA库缺归档位置表在Skill读取阶段503;补当前迁移后通过,测试新增只读预检。最终1项通过(3.2秒,ecs110 /tmp/ic-ledger-reconcile-final.log),fixture清理断言通过、QA服务停止、独立复审通过。账本为隔离fixture,非供应商真实结算;经验已整理至 .agents/skills/agent-recovery-qa/SKILL.md,未部署。

Agent 执行故障跨进程保持

  • 暂停期间三个引擎turn入口在创建工作区/线程前拒绝,返回HTTP409及固定机器码;enqueue内部继续重检,避免将暂停误报500。159项/676断言、构建、独立审查和真实Agent浏览器联验通过(5.7秒,ecs110 /tmp/ic-paused-submit-ui.log),三端点均409且配置字节不变;QA服务已停止。前置检查不是异步准备阶段的原子锁,不增加恢复授权,未部署。

  • 区分中断待核对与写盘失败:无持久故障标记的 interrupted 状态返回 runner_interrupted_unreconciled,画布显示核对外部任务/产物/费用;已有写盘故障标记保留原诊断。Agent159项/676断言、构建、双故障和连续重启脚本通过,独立审查通过。暂停规则未放宽;该文案已通过真实Agent浏览器专项验收:桌面/390px均显示中断待核对,实际HTTP仍halted且queued为空(E2E-019,5.7秒,ecs110 /tmp/ic-interrupted-reason-ui.log);镜像构建及独立审查通过,QA服务停止,未部署。

  • 固定候选 c1f125f6 在ecs110新目录完成71文件Git blob校验、159测试/675断言、构建和9个真实进程/故障脚本调用;同快照Agent与既有QA Web镜像E2E-019通过(5.5秒)。详细边界见 docs/plans/v31-harness-gap-audit.md;无真实模型/GPU调用,未部署。

  • 真实 SIGKILL 已从队列层扩展到 AgentRunner:首次中性外部写入后挂起执行器,第二项完成入队,再强制终止进程;连续两次全新 Node 进程均保持首项 interrupted/次项 queued,新增提交被拒,执行器调用0,外部fixture仍仅1条。ecs110 python3 scripts/test-queue-crash-recovery.py 退出0,原残尾恢复用例继续通过;独立审查通过,临时进程和目录由脚本清理。此证据不包含真实供应商、GPU、积分账本或断电恢复,未部署。

  • 启动发现任一尚未核对的 interrupted 任务时暂停全队列,包括更早重启遗留项;无中断且入队确认完整时仍自动续跑。双存储同时 EISDIR 测试确认暂停标记真实写入失败、恢复后标记缺失,新 Node 仍暂停且引擎调用0;28项 runner 测试/109断言、构建及独立复审通过。首次全量测试出现高CPU停滞,已终止该测试进程后改用独立标准输入重跑;不将首次结果记为通过。重跑全量159项/675断言通过,单存储及入队故障脚本继续通过。恢复授权尚未实现,不能通过直接重启解除此状态;断电/进程被杀的窗口仍待专项验证,未部署。

  • 执行队列写入失败时,若 journal 仍可写,追加 runner.halted;重启读取该记录后保持队列暂停,不因文件恢复而自动执行后续任务。ecs110 全量158项测试/670断言、构建及真实 Node EISDIR 故障测试通过,新 Node 进程保持暂停、第二项仍 queued、引擎调用0。仅覆盖 journal 可写的故障窗口;双存储失效、断电窗口与人工核对后的恢复授权仍待完成,未部署。

计划输入上下文

  • 计划详情展示新增/删除/变更和下游需重新评估步骤,明确不授权复用旧产物;客户端核对影响修订、上一修订、步骤归属及审批/复用标志,旧 Agent 无影响信息时明确提示。ecs110 单测4项/14断言、TypeScript、镜像构建及真实Agent浏览器E2E-019通过(5.7秒,/tmp/ic-plan-impact-ui.log),独立审查无高置信度问题,QA服务已停止。影响为只读分析,不代表审批或执行;未部署。

  • 详情支持历史上一/下一修订,范围1至当前列表最新修订;切换计划/画布/连接/引擎重置选择并隔离旧响应。修改草稿注明查看版本但仍要求读取最新CAS。TypeScript、构建、独立审查和真实Agent/浏览器E2E-019通过(6.0秒,ecs110 /tmp/ic-plan-history-ui.log):保存两版、默认查看第二版、切回第一版且边界按钮禁用,旧内容不残留。测试服务已停止;尚非并排差异或审批流程,未部署。

  • 详情已展示提案输入依据:摘要、素材ID/类型和约束,明确不是素材权限已核验;旧修订无上下文显示未记录。TypeScript、镜像构建与真实Agent/浏览器E2E-019通过(6.0秒,ecs110 /tmp/ic-plan-context-ui.log),实际HTTP保存的三类字段均可见;独立审查通过,测试服务已停止。只读展示,不增加素材访问或生成权限,未部署。

  • 计划展示真实 Agent 联验通过:E2E-019 启动临时 HOME 的实际 Agent,经鉴权 HTTP 保存当前画布与其他画布提案,浏览器只显示当前提案并读取指定修订,桌面/390px展示待估算和预算;末尾仍断言无 queued 执行任务。1项集成测试通过(5.7秒,ecs110 /tmp/ic-agent-real-plan-ui.log),Agent进程、临时目录及QA服务已清理。提案为中性测试输入,Skill标识不代表已核验版本,没有模型生成或GPU调用;跨画布延迟请求竞态仍待单独验收。

  • 详情新增“修改此计划”入口,只填写带planId/当前修订的对话草稿并切换规划模式;指引读取最新修订/CAS,不自动发送或生成。有未发送文字、运行、确认或历史加载时禁用,点击时重新核对状态。Web TypeScript、镜像构建与7项浏览器回归通过(37.9秒,ecs110 /tmp/ic-agent-plan-edit-ui.log):原草稿保留、点击后规划模式与标识正确、turn提交计数0。隔离服务已停止;这只是用户修改入口,真实模型修改/保存/审批执行仍待验收,未部署。

  • 提案列表新增指定修订只读详情:显示步骤依赖、Skill ID/版本、预算上限、假设和待澄清问题;null成本显示待估算,预算明确非报价/扣款。API校验canvas/agent/planId/revision与不可执行标志,详情与列表共用覆盖正文的取消/超时;4项测试/11次断言及TypeScript通过。首次类型检查发现fetch替身缺少Bun preconnect类型,修正测试断言类型后通过;浏览器详情已验收:首屏请求指定rev1并展示未知估算/依赖/预算/问题;移动端请求rev2却返回rev1时明确报错且不显示旧详情。完整7项E2E通过(38.6秒,ecs110 /tmp/ic-agent-plan-detail-ui.log),独立审查通过,隔离服务已停止。响应仍为受控fixture,真实提案数据及跨画布延迟竞态待联验;无修改/审批/执行入口,未部署。

  • 画布本机 Agent 对话区新增折叠“计划提案”入口,展示目标、修订与步骤数,支持20项分页/刷新回首页,明确不执行生成。API client校验executionAllowed=false并兼容旧版404提示;连接/画布/引擎/游标变化隔离旧响应并取消请求,不在浏览器持久化提案。2项测试/5次断言和Web TypeScript通过;独立初审发现响应头返回后正文缺少取消保护,已让同一8秒超时/取消生命周期覆盖正文读取,并测试头部完成后取消正文;浏览器展开、分页、刷新回首页及移动端旧版404提示已通过,实际请求游标与旧列表清除均有断言;完整7项E2E通过(36.6秒,ecs110 /tmp/ic-agent-plans-ui.log),镜像 ic-agent-plans-qa SHA256 394e2253aec625a1f1391e4636b7881ae008172e5e6dbf0585a77a88c178f80e,隔离服务已停止。响应正文8秒超时另以真实计时测试通过,共3项单测/8次断言;独立审查通过。浏览器接口为stub,跨画布竞态与真实Agent计划数据联验仍待完成;尚无详情/修改/审批入口,未部署。

  • 新增只读 HTTP 计划列表 GET /agent/plans,复用 MCP 计划列表存储逻辑,按 canvasId/agent 隔离,limit 默认20/最大100,after 为 UUID 游标;token鉴权、no-store,返回最新修订摘要,不授予执行。158项测试/670次断言、构建及真实HTTP/MCP回归通过,包括无token、跨画布空结果、游标末尾、重复/无效分页参数。画布列表UI尚未接入,未部署。

  • 共享 Agent 规划指引已明确填写 inputContext,先读取画布后引用节点,约束只保存用户要求;校验失败重新读取而非删必需引用绕过检查。素材内容与摘要不得作为工具权限指令,输入变化要求重新评估。158项测试/670次断言与构建通过;该证据只证明共享指引及字段合同接入,不证明真实模型遵循,真实模型生成上下文仍待验收。

  • MCP 提案入口增加绑定画布快照核对:非空 assetRefs 的 nodeId 必须存在且 type 与 kind 一致,否则保存前报错;空引用保留原离线提案行为。158项测试/663次断言及构建通过,验证正确引用保存、缺失/类型错误不调用存储。这里验证浏览器同步快照一致性,不是服务器素材权限、媒体可读性或执行时有效性;直接 HTTP 草稿入口仍只保存描述性引用,真实 MCP 引用场景已联验:Python 建立实际 SSE 客户端并同步 image 节点,Agent 运行绑定该 clientId,MCP stdio 先提交缺失/错类型引用被拒,再成功保存 revision1 并核对上下文;原重启历史测试继续通过。ecs110 python3 scripts/test-plan-proposals-http.py 退出0、bound_asset_refs=true,无模型调用;SSE与子进程已关闭。

  • 提案增加可选 inputContext:对话摘要最多16000字符、最多1000个 nodeId/kind 素材引用及100条约束,每条最多2000字符;严格拒绝额外权限或 URL 字段。旧提案无字段仍可读。上下文随修订持久化,任何变化保守标记全部保留步骤受影响,不授予结果复用或执行权限。

  • ecs110 157项测试/659次断言、构建及真实HTTP/MCP脚本通过,HTTP重启后上下文回读一致。引用尚未与实时画布素材或服务端权限核验,摘要和约束属于描述性输入,不是可信策略;模型自动采集、UI展示及审批执行仍待接入。未部署。

Agent 入队日志失败保护

  • Web 候选读取 runs.executionState:队列暂停时不把 queued 任务选为“已恢复运行”,仍保留 running 跟踪;状态文案区分确认记录缺失与一般暂停。旧 Agent 无该字段保持原行为,不显示原始错误内容。2 项测试/10 次断言及 Web TypeScript 通过;浏览器桌面与 390px 移动回归已通过:受控 runs 响应为暂停 queued,重连后暂停文案可见且无“已恢复运行”。完整 E2E-003 五项通过(27.8秒),日志 ecs110 /tmp/ic-agent-halt-ui.log,镜像 ic-agent-halt-qa SHA256 aa1afffded26ebe7d5ecd3844843f15b9cfedb1a3916353ed30ef43ce64403a5。真实 Agent 故障与该浏览器用例未串联,暂停同时 running 的专项交互随后已补验:有/无运行任务两种矩阵均展示暂停状态;移动端对话页中,有 running 时模式切换仍禁用并保留两个取消入口,无 running 时模式可选且只保留 queued 取消入口。完整6项测试通过(34.5秒,ecs110 /tmp/ic-agent-halt-matrix-ui.log),隔离服务已停止。取消实际执行与退款不在该矩阵范围;未部署。

  • 暂停诊断已区分:启动缺少确认返回 runner_admission_unconfirmed 与中文核对提示,运行时写盘故障保留 runner_persistence_failed;executionState 增加 unconfirmedRunIds 副本,调用方修改数组不影响内部状态。156 项测试/652 次断言、构建及文件故障/独立进程复验通过。状态经已有 runs 接口返回,尚未新增浏览器专用恢复操作,未上线。

  • 独立进程补验通过:同一故障恢复目录交给全新 Node 子进程,仅传 PATH/临时 HOME,10 秒超时。实际打开 AgentRunner 后仍暂停、原任务 queued、新提交被拒绝、引擎调用为 0;父进程核对退出 0、固定成功标记及 runs.jsonl 字节未变。验证命令仍为 IC_ISOLATED_TEST=1 node scripts/test-admission-persistence-failure.mjs,输出 fresh_process_held=true。这不是运行中强杀/断电测试,也不覆盖终态写失败的完整恢复。

  • 新增启动门禁:逐项核对 queued 任务的 run.enqueued 日志是否匹配 runId/canvasId/agent;任一缺少证明,整个队列暂停且保留原记录,boot 日志记录 unconfirmedQueued,不列为可自动续跑。旧日志缺失也暂停,不自动补造确认。156 项测试/646 次断言及构建通过,涵盖合法记录续跑与缺失/错作用域暂停;真实 EISDIR 后重新打开状态目录仍保持暂停、引擎调用 0。此处是状态重新加载测试,不是独立进程重启测试;完整终态写失败、外部任务核对与显式恢复仍待完成。

  • 真实文件故障复验:ecs110 IC_ISOLATED_TEST=1 node scripts/test-admission-persistence-failure.mjs 退出 0。将临时 journal.jsonl 替换为目录触发实际 EISDIR;runs.jsonl 已保存 queued 记录,但引擎调用为 0、队列暂停、错误指向该任务。恢复原日志后新提交仍被拒绝,两份日志字节保持不变。只验证同一进程,未验证重启恢复;不调用供应商,临时目录已清理。

  • 入队记录写入与 run.enqueued 日志完成之前暂停下一项出队,避免活动任务结束后抢先执行尚未确认入队的任务。入队日志失败立即暂停本实例,错误带失败任务作用域,后续入队被拒绝;已有执行任务允许完成,保留未知任务记录而不自动重试。

  • ecs110 全量 154 项测试/638 次断言及构建通过,覆盖活动任务期间第二项日志等待、失败、第三项拒绝,以及已持久化后的排队通知异常不改变成功接收结果。独立初审发现通知抛错导致失败响应但继续执行的风险,已捕获通知异常并补只执行一次的回归;独立复审通过。首轮测试使用 Bun promise matcher 等待造成测试自身超时,改为立即捕获 Promise 结果后按阶段断言,未放宽业务断言。此保护仍非跨重启恢复门禁,生产未部署。

Codex app-server 策略协议实测

  • 新增 canvas-agent/scripts/test-codex-app-policy.py,仅在显式隔离开关下使用临时 HOME/CODEX_HOME 启动实际固定版本 app-server,不传凭据、不发模型回合。ecs110 执行 IC_ISOLATED_TEST=1 python3 scripts/test-codex-app-policy.py 退出 0:规划线程返回 readOnly 且 networkAccess=false,执行线程返回 workspaceWrite,均为 approvalPolicy=never。未产生回合的新线程恢复明确返回 no rollout found,并作为预期边界断言;测试清理子进程及临时目录。
  • 本项证明启动请求的实际协议映射,不证明持久线程恢复、模型工具执行、Agent 完整调用链或网络隔离实效;已有 CLI 文件只读实测与本项是两项独立证据,生产未更新。

本机 Agent 提交错误诊断

  • turn 提交非2xx响应改为按 HTTP 状态显示固定中文原因,区分参数、连接凭据、权限/来源、接口缺失、冲突、超限、频控/额度及上游故障。504 提醒先核对任务是否创建,避免重复提交;不展示原始响应正文或底层路径秘密,不增加自动重试。单测1项/6次断言、Web TypeScript 与独立审查通过;新增状态映射不等同供应商业务错误码解析。隔离镜像构建与4项浏览器回归通过(25.4秒),包含503新文案与移动端发送;日志ecs110 /tmp/ic-agent-errors-ui.log,镜像sha256:d1253578c34d9d771db82bac310e45b00b0777e42c0b5ab8d4b6459058b47065。Agent响应为fixture,其余状态由单测覆盖,QA服务已停止,未部署。

Agent 完整候选隔离复验

  • 新完整候选 fefaf92f0fdc4cb120841c9a1ae990dbf3b5c520 经 git archive 导出到 ecs110 /tmp/ic-agent-exact-fefaf92f,包含同 SHA 外层 OpenCode 启动器。package.json 与 npm-shrinkwrap.json 字节一致后仅复用 node_modules,重新构建 dist。156 项测试/652 次断言、构建及七个脚本全部通过:真实 MCP/HTTP 提案、确认日志文件故障、Runner 终态文件故障、入队文件故障及全新 Node 进程暂停、OpenCode CLI 解析、Codex CLI 只读沙箱、Codex app-server 启动策略。组合命令退出 0,日志 /tmp/ic-agent-exact-fefaf92f.log。没有真实模型推理或 GPU 调用;沙箱 CLI 与 app-server 策略仍为独立验证,非持久会话模型工具联验。未推送或部署。

  • 对源码 SHA 744ce93f270d163695d2c49277ebf3328fd7327f 使用 git archive 创建 ecs110 /tmp/ic-agent-exact-744ce93f 新目录;同时导出测试依赖的同 SHA opencode-spicy-service/opencode-spicy/opencode-spicy.sh。package.json/npm-shrinkwrap.json 与隔离依赖安装目录逐字节相同后复用 node_modules,不复用源码或 dist。148 项测试/588 次断言、构建、真实 MCP/HTTP 提案读写、确认请求/决定双 EISDIR、Runner 写盘故障及 OpenCode CLI 解析进程测试均通过,最终退出 0。测试日志 /tmp/ic-agent-exact-744ce93f-tests.log;临时测试进程检查无残留。

  • 初次校验误用 package-lock.json 后改查实际 npm-shrinkwrap.json;首次测试缺少仓库外层启动器导致 2 项 ENOENT,补入同 SHA 文件后全量重跑通过。未改测试绕过依赖。当前生产与远端 main 均为 ce109262fa55fe5da9d43da689300ac26c3f7965,候选领先 98 提交、无分叉;仅证明本轮核查时状态。Codex CLI 仍返回 Not logged in/退出 1,OpenCode/DSH 不在该 shell PATH,真实模型未验收。未推送、部署或宣称完整 Web/GPU 验收。

Agent 确认通知异常

  • 决定保存失败、等待超时与取消分别携带 decision_persistence_failed / decision_persistence_timeout / cancelled reason。保存故障另发送固定中文 agent_log,保留 canvas/run/agent 及 code,避免被误认成用户主动拒绝且不泄露底层异常;诊断通知异常仍结束等待。ecs110 148 项测试/598 次断言、构建与真实 EISDIR 复验通过。使用现有 Agent 日志通道,新增文案已在真实浏览器日志面板复验:1440px 桌面与 390px 移动视口均可见保存失败/超时中文信息,完整 E2E-003 四项通过(24.2秒,ecs110 /tmp/ic-confirm-reason-ui.log)。事件由受控 scoped SSE fixture 注入,不是浏览器直连真实故障 Agent 的联合测试;QA Compose 已停止,未部署。

  • 决定保存屏障已接入生产代码路径 AgentRunner.open:先追加 confirm.decision_requested,成功后才向工具等待方返回批准。写入失败、写入等待超时或取消均返回 deny,迟到完成不覆盖;取消也覆盖已接受但仍在写入的决定。ecs110 148 项测试/588 次断言、构建和真实 Node/EISDIR 请求及决定双路径复验通过,独立审查通过。日志记录的是请求决定,不是最终放行或外部执行证明;尚未实现持久最终结算与跨重启审批恢复,未部署。

  • 真实 Node/文件系统复验通过:临时日志路径换成目录触发 EISDIR,确认按 deny 结束且未广播,原日志字节不变;恢复路径后,通知时真实 journal 已有该请求,批准成功且重复批准拒绝;重开 journal 仅含一次成功请求。ecs110 命令 IC_ISOLATED_TEST=1 node scripts/test-confirmation-persistence.mjs 输出 confirmation_persistence=ok、退出 0,独立审查通过,临时目录清理。未使用模型、未模拟写入成功,仍不代表确认结果落盘或跨重启审批恢复。

  • 确认请求增加日志保存屏障:Runner 返回并等待 confirm.request 写入 Promise;成功后才广播并开放 pending 查询/批准,保存失败按 deny 结束。保存期间取消或超时,迟到的写入完成不会重新显示确认。同步监听器仍兼容,已启动异步监听器的拒绝被观察,避免脱离调用链的异常。ecs110 147 项测试/568 次断言和构建通过,覆盖提前批准拒绝、成功后开放、失败及取消后不迟发;确认结果本身仍未持久化,不宣称审批跨重启恢复完成。

  • 修复确认通知发送或新请求监听器抛错时的悬挂:尚未决定的请求立即按 deny 结算并清理计时器/取消监听;已完成决策的结果通知失败不阻断等待方继续收到同一决策,也不重新打开审批。ecs110 基线新增测试实证 11 通过/2 失败(退出 1),修复后全量 145 项测试/556 次断言及构建通过。覆盖请求发送、监听器、批准、超时、AbortSignal 和重复结算;这是进程内故障注入,不代表真实网络断线重连或持久审批完成,未部署。日志 /tmp/ic-confirm-baseline.log、/tmp/ic-confirm-fixed.log 位于 ecs110。

Agent DAG 提案运行链路

  • Codex 规划回合将持久运行 canvasMode 传入会话创建与恢复,均请求 read-only sandbox 与 approvalPolicy=never;已有执行会话恢复为规划时也重新设置策略。默认/执行仍为workspace-write,不改变旧调用。ecs110固定Codex CLI生成的ThreadStartParams/ThreadResumeParams确认枚举支持read-only,152项测试/629次断言及构建通过。已追加真实CLI沙箱文件阻止实测:普通写入对照退出0,:read-only读取退出0/输出original,写入退出1/Errno30且源文件保持original,临时目录清理。实际版本CLI采用 codex sandbox --permission-profile :read-only -- COMMAND,旧linux子命令和缺profile调用失败后按本机help与官方权限说明纠正。此结果只证明CLI内置只读profile,尚未完成app-server的sandbox字段到该权限的运行映射验证;OpenCode/Claude权限约束仍待处理,未部署。

  • 本机 Agent 输入区增加画布规划/画布执行选择,模式进入发送快照与 turn 请求。规划发送前实时核对 health 的 canvasPlanningMode=true,旧版/缺能力/请求失败停止发送,不静默切换执行。服务端显式声明此能力;UI 提示仅约束画布工具而非终端文件。Web TypeScript、Agent151项测试/625次断言及构建通过;桌面/390px移动交互、旧版能力缺失零turn提交、支持能力时单次提交canvasMode=plan及切回执行已通过浏览器回归,完整4项E2E-003通过(25.5秒)。镜像ic-canvas-plan-mode-qa,sha256:5226a373888109ccdd692c16adfd8caaac82c78d0b2f3a732340b8022c9a8d5f;日志ecs110 /tmp/ic-plan-mode-ui-fixed.log。初次测试错误期待503正文,按真实通用错误文案修正并独立复审通过。Agent健康能力与turn响应为fixture,不代表真实引擎规划;QA已停止,未部署。

  • 画布工具规划模式已接入三引擎 HTTP 提交、持久 run 与有效运行绑定;plan 允许读取/计划工具,生成和画布写操作在派发前403拒绝。manifest 条件绑定模式,保留旧无mode记录摘要兼容,篡改模式使解释清单失效。ecs110151项测试/625次断言、构建和真实MCP计划运行通过(真实生成调用被拒绝,计划存取正常);无模型调用。尚无UI开关,也不限制引擎shell/文件或其他MCP,未部署。

  • 共享引擎/MCP 指引接入计划发现→读取→修订提交,要求 CAS 冲突重读、真实 Skill 绑定、未知成本 null,并区分仅规划与执行请求;保留原始用户请求。ecs110 149项测试/616次断言、构建与真实MCP/HTTP回归通过。指引检查不等同真实模型遵循验收,更不是服务端只读权限门禁;独立 planning 模式与策略执行仍待完成,未部署。

  • 新增 MCP canvas_list_plans:当前画布/引擎的计划最新摘要及游标分页,新会话可先发现 planId 再读取详情。默认20项、最多100项,不开放模型传入作用域。ecs110 148项测试/606次断言、构建及真实MCP联验通过;覆盖重启后的最新修订、分页、跨画布/引擎隔离和参数校验,独立审查通过。仍是本地提案,无模型规划或审批执行,未部署。

  • 提案读写响应增加修订影响分析:新增、删除、修改和旧/新依赖图的下游闭包;修改全局目标/假设/问题/预算时标记全部保留步骤。仅重排步骤/依赖不产生误报;即使无内容变化也不继承审批或授权复用。ecs110 143 项测试/540 次断言、构建及真实 MCP/HTTP 联验通过,重启历史响应也验证影响字段;磁盘格式不变,未执行任务失效或审批流程,未部署。

  • 增加 canvas_get_plan MCP 历史读取工具,模型可在后续对话按 planId 读取最新/指定修订再提出修改;服务端由实时运行决定 canvas/agent,模型不传作用域。ecs110 141 项测试/532 次断言、构建和真实 MCP 读取最新/历史/不存在/跨画布及引擎联验通过。读取返回执行权限 false,不提供计划发现列表,不等同审批或执行;未部署。

  • 修复 MCP 路径绕过提案写入大小限制:共享存储统一校验 4MiB UTF-8 JSON,上层 MCP HTTP 返回 413。中文长文本测试覆盖字符数小于阈值但字节数超限、拒绝前后日志字节相等、修订不前移及后续合法修订成功;真实 MCP 进程提交同类超限提案也被拒绝。ecs110 140 项测试/523 次断言、构建和 MCP/HTTP 重启联验通过,未部署。

  • ecs110 隔离 Node Agent → 受控 OpenCode 启动器 → 实际 MCP stdio 子进程 → HTTP → 本地提案库联验通过:工具发现、有效运行 scope、固定 canvas/agent、首次保存、重复修订拒绝、第二修订、历史读取、任务结束后 capability 拒绝、跨 engine 隔离与重启保留。仅创建一个测试 Agent run,提案未额外入队执行;输出 plan_proposal_http=ok; mcp_stdio=true; runtime_scope=true; stale_capability_rejected=true; model_calls=0,退出 0。独立 OCR 审查通过;临时 HOME 与 MCP 客户端正常清理,未变更生产。此测试使用中性启动器替身,不代表真实模型规划、审批或生成完成。

Skill 归档候选预览

  • 管理员只读接口按服务端已保存保留期计算截止时间;未配置时不扫描,返回最多 100 个无执行/内容引用的旧热版本与 hasMore。只回传身份/时间元数据,查询限定 5 秒,不上传 OSS、不释放快照、不创建任务。预览不是执行授权;执行仍需重新检查策略及引用。ecs110 单测、类型检查及真实 PG 策略矩阵已通过:106 版本验证 100 条上限、修订/截止时间、90/180 天切换、当前/近期/执行引用/内容引用/冷版本过滤与元数据字段。真实 OSS 归档回填周期同时复验通过,随机对象与隔离 schema 已清理。管理员候选 UI 已接入;按服务器已保存修订显示截止时间与最多 100 条候选,刷新/失败清除旧结果,保存或重读策略时重置预览。ecs110 客户端 2 项测试/4 次断言、类型检查、镜像构建与桌面/390px 浏览器回归通过(2.7 秒,策略及预览 API 为受控 fixture);独立审查通过。候选镜像 sha256:eb5e2a17d354617cc215d5b207fa691c788589f5d4c5dd4e0edec3a014068acb,QA 服务已停止。已补 ecs110 代表性负载样本:100 个 Skill、10000 个约 2KB 快照、5000 条执行引用,真实索引及复合主键;5 次串行耗时 5.56/4.54/4.33/5.18/4.65ms,8 并发耗时 8.80/11.57/13.17/16.25/16.18/13.81/15.48/14.82ms。EXPLAIN ANALYZE 查询执行 5.773ms、返回 101 行,原始样本和计划保存在 ecs110 /tmp/ic-archive-live.3fJZcK/archive-preview-load.json。真实归档回填周期和清理再次通过,独立审查通过。本组内容引用表为空,且不是持续压力/生产 SLA 验收;内容引用负载、维护写入并发与自动批处理仍待完成,未部署生产。

生成状态持久化

  • 操作核验新增关联媒体登记:成功媒体尝试保存 resultStorageKey,查询仅接受当前成员可见画布、来源字段一致、最后一次成功尝试与当前节点引用相符且唯一的登记;替换素材、后续尝试、重复候选、撤销成员及旧记录缺少绑定时返回空。面板展示登记 MIME、字节数与 SHA-256,并明确尚未读取文件或验收内容,始终不授予自动复用。独立审查发现旧尝试可能关联新媒体,修复并复审通过。ecs110 31 项测试/114 次断言、类型检查、镜像构建、3 项 SQL 合同及 12 项浏览器回归通过(52.0 秒);镜像 ic-artifact-registry-qa,ID sha256:d73a318f728a357aa0509945fa3ab1766f7cb6fe3279ec6f75c36490c3d76627。数据库仅使用媒体元数据 fixture,没有上传或读取真实媒体;QA 服务已停止,未部署生产。登记不是不可变内容证明,同 key 内容变化与实际解码/质量仍待核验。

  • 操作核验回读服务端保存的步骤来源,并与本地工具报告逐项比较 run、request、canvas、attempt、源节点、输出节点;来源缺失或任一字段不一致时,核验结论固定为待核对。标识相同仅表示两处客户端来源记录一致,不是 Agent 执行真实性或产物质量证明。服务端只回传字段合规且与记录画布相符的来源,旧记录保留未知。ecs110 9 项测试/47 次断言、类型检查、镜像构建、3 项 SQL 合同及 12 项浏览器回归通过(47.2 秒);数据库 fixture 回读与匹配/冲突/404 清除交互通过,独立审查通过。QA 服务已停止,未部署生产或执行模型。

  • Agent 直接触发图片、视频、音频、文本生成时,将运行/工具请求/尝试/源节点/输出节点标识随提交送达 BFF;提交前校验字段边界及画布一致性,仅提交 claim 持有者保存,转发供应商前移除该内部头。此为客户端报告的请求来源,不等同可信 Agent 执行证明;历史、手动重试和其他工具链缺失字段时仍按未知处理。ecs110 37 项测试/189 次断言、类型检查、镜像构建、3 项 SQL 合同及 12 项浏览器回归通过(50.1 秒),真实 Agent 文本工具触发捕获的请求来源与本地收据一致;供应商请求仍被中止,没有执行模型。独立审查通过,QA 服务已停止,未部署生产。

  • 生成操作记录经权限校验的来源画布:只有取得提交 claim 的请求可建立记录,重复/恢复请求不回填;旧记录仍显示来源未知。任务面板核对该来源与当前运行画布,缺失/不一致时转待核对,不授予复用。来源保存沿用既有审计写入与不覆盖策略,写入失败仍可能缺失;不等同完整 Agent 步骤绑定。ecs110 35 项路由集成测试(175 次断言)、来源读取/客户端校验、类型检查、镜像构建及 12 项浏览器回归通过(48.2 秒),含真实数据库来源读取与两类冲突提示。首轮用例前置断言顺序错误已修正并复验;独立复审通过,QA 服务已停止,未部署生产。

  • 服务端操作核验新增数据库快照判定:等待绑定任务、状态/账单待核对、待验收产物、已记录失败;积分使用整数精确比较,已结算缺少用量记录或供应商状态与账单相矛盾时转待核对。画布显示该结论,客户端报告的任务 ID 不同则优先警告待核对。所有结论均不授权重跑或复用,不代替供应商实时查询、内容解码与视觉验收。ecs110 9 项单测/45 次断言、类型检查、镜像构建、3 项 SQL 合同及 12 项浏览器回归通过(49.6 秒),实际数据库 fixture 的成功→失败冲突返回待核对;独立复审通过,QA 服务已停止,尚未部署生产。

  • 新增实际账本事务的 PostgreSQL 隔离验收:确定结算、确定释放与二者并发三种情况;调用生产 transitionReservationByTask,验证所有返回值一致、单条终态事件、准确余额与用量、重复调用不重复扣费、跨用户拒绝。使用独立 schema/序列及非供应商 namespace,不发送外部 ACK 或运行模型。初轮测试曾推进 QA 公共事件序列,已修复 fixture 默认值隔离并补公共序列不变检查;生产数据未改。最终 1 项真实数据库用例、33 次断言及类型检查通过,独立复审通过;测试 schema 已清理,QA PostgreSQL 已停止。此为数据库状态机验收,不等同真实供应商计费/退款或生产发布。

  • 异步轮询、取消及内容读取的计费响应头改用数据库事务返回状态,不再把请求的目标状态当成实际状态。覆盖已释放后收到成功、已结算后收到失败/取消、并发状态变化及空事务返回;不变更账本状态机或自动退款策略。ecs110 34 项路由集成测试、169 次断言及类型检查通过;账本和供应商为受控替身,尚未进行此变更的真实并发账单验收,未部署生产。

  • 修复 output.task_status 在结果白名单中被丢弃的问题;服务端诊断与原有终态防回退 SQL 现在可读取这类供应商状态。ecs110 4 项序列化测试、类型检查及真实 PostgreSQL 临时表测试通过:实际 upsert 执行 RUNNING → SUCCEEDED → RUNNING 后仍保留成功状态与去签名 URL。独立审查通过,临时表事务回滚、隔离 PostgreSQL 已停止。尚未发布;不同终态之间的冲突及供应商/账本/产物一致性仍需核验。

Agent 执行诊断

  • 根据 v3.1 原文补充结构化 Plan DAG 提案契约(非模型 Todo):包含目标、假设、待确认问题、版本绑定步骤、依赖和积分估算。拒绝重复步骤/依赖、缺失依赖、环路、非法版本及已知超预算;预算比较使用 BigInt,未知估价保留 null,校验不授予执行权限。ecs110 Agent 全量 138 项测试/506 次断言及构建通过,独立审查通过。提案持久版本与本地 Agent HTTP 入口已接入:POST /agent/plans 保存,GET /agent/plans/:planId 按作用域/修订读取,追加 JSONL 并串行 CAS,保存后才发布内存状态。139 项测试/512 次断言、构建及真实 HTTP 重启验收通过(鉴权、冲突、历史、跨画布拒绝、零排队)。仅本地提案,已把 canvas_propose_plan 接入现有 MCP 工具注册与 CanvasSession:要求有效运行 capability,归属从 runner 记录派生,拒绝伪造/释放/无 scope;只存提案、不派发画布操作。140 项测试/518 次断言、构建及真实 HTTP 拒绝路径复验通过,独立审查通过。尚未进行真实模型调用此工具、服务器 Skill/租户核验或执行审批;不代表 plan 接口完成,未部署生产。

  • OpenCode server 视频通道将根会话 todo.updated 映射为统一 plan.updated,其他/子会话不覆盖根计划,取消步骤保留 cancelled;持久计划和 Web 诊断解析/文案同步支持“模型报告已取消”,空计划清除旧进度。格式不合规走现有流错误中断,不伪造完成。ecs110 Agent 132 项测试/487 次断言、构建,Web 3 项测试/13 次断言及类型检查通过,独立审查通过。测试为 HTTP/SSE 与日志 fixture;取消状态已完成桌面/390px 浏览器回归:真实 Agent 读取测试日志,取消不显示为完成,清空后旧步骤消失,1 项通过(5.8 秒);Web 客户端 3 项测试/13 次断言、类型检查和镜像构建通过,镜像 sha256:89e3752536cf69830b131e5fd701c5c68d4e3917f9a2415fb72784a52875087f。独立审查通过,QA 服务与临时 Agent 已清理;尚未进行真实模型或生产部署,CLI 通道也已从完成的 TodoWrite metadata 映射统一计划,固定根会话,非法计划终止本次调用并报错;共享同一 schema。ecs110 134 项测试/493 次断言、构建与真实 shell 子进程 stdout 协议 fixture 通过,覆盖取消、空计划、外部会话和非法计划;零模型调用。

  • 执行适配第一步:AgentRunner 的 Codex/Claude/OpenCode 执行分支统一进入 executeHarnessTurn,保留现有工作目录、续接会话和 usage 差异;统一检查运行/画布作用域、预先取消和非空会话结果。Skill 绑定、执行清单、计划日志与队列终态仍走原链路,不绕过账单或鉴权。ecs110 131 项测试/484 次断言、构建和实际文件系统故障脚本通过,独立审查通过。引擎测试仍为替身,不代表 DSH 或完整 plan/execute/resume/interrupt/explain/evaluate 已完成;未部署生产。

  • Agent 后台执行循环拒绝现在被捕获:终态记录保存失败等异常触发当前实例暂停,不继续出队,新提交被拒绝;任务列表追加 executionState。保持最后已持久化运行状态,不把未知结果标成成功或重跑。错误通知传输异常也被接住。暂停通知补齐当前 runId/canvasId/agent,符合画布现有错误事件作用域过滤,避免无标识通知被丢弃;129 项 Agent 测试/475 次断言、构建及真实文件系统故障脚本再次通过,画布桌面及 390px 错误展示已通过隔离浏览器复验:受控 SSE 通知可见、waiting 清除,运行记录保持未知 running 而非伪造完成;同套 FIFO/确认/刷新共 4 项通过(25.0 秒)。首轮移动用例的延迟工具事件覆盖错误已通过等待确认事件前置修正,未修改产品状态机。此为展示契约测试,不是真实磁盘故障到浏览器的完整端到端;独立审查通过,QA 服务已停止。ecs110 全量 Agent 测试和构建通过,包含正常/故障诊断传输下的终态落盘故障注入;独立审查通过。暂停仅存在于当前实例,重启仍遵循既有 queued 续跑规则,不是完整恢复门禁;真实 Node 进程/文件系统故障验收已通过:随机测试目录内保留原日志,再用同名目录触发 EISDIR,进程继续运行、后续任务未执行、日志字节不变,修复文件后仍保持暂停。引擎是中性替身,不涉及真实模型。ecs110 新打包并全新 npm 安装后同一故障测试再次通过;测试包 SHA-256 fb026ef09be8bcd1bc45de14f941f82386019f10fc39496e69890624b6b00136,临时包/安装目录已清理,不是已发布产物。Linux/macOS 安装包 CI 已加入同一门禁,hosted CI 尚未执行;未部署生产。

  • 修复 Codex 实时任务进度丢失:适配层将计划状态 inProgress 转为统一 in_progress,避免持久计划 schema 拒绝整份包含执行中步骤的计划。其他状态不改写,历史消息兼容保持原样。新增 Codex 通知→日志追加→三态计划回读用例,ecs110 127 项测试/463 次断言、构建与真实 Agent 收据/解释 HTTP 验证通过(退出 0),独立审查通过;日志 /tmp/ic-codex-plan-status.log。模型通知为受控输入,未执行 Codex 模型或媒体生成;未部署,仍需真实引擎端到端验证。

  • GZ 候选 a466b4f459f6ce2def35d004aaa495d19d92b876 的正式 Actions 33951786391 已成功:Linux 126 tests/461 assertions、构建、打包和全新安装门禁通过;同一 tgz 在远程 macOS 26 ARM64、Node 22.23.1 全新安装后,双进程互斥/SIGKILL 重启、端口冲突、收据 HTTP 与队列崩溃恢复四项通过。tgz SHA-256 b677257c61fcb44b2ceb9d59a2bf0ce669635f28a38c7770bd9d053493af2564;artifact ID 9965062981,封装 artifact digest 190ffe9caacd2829bd16056b5c8c6f1662c0674fe364b9c78da2c81d4941fadb 已在 macOS 下载时匹配,二者是不同对象的摘要。运行链接 https://github.com/GZ-AI-Native-Dev/infinite-canvas/actions/runs/33951786391 。候选仅在功能分支,未改 main 或生产,未替换用户本机 Agent,无模型调用;Intel Mac、其他 Node 版本、真实执行器恢复与完整 Harness 不在本次通过范围。

  • 发布 workflow 新增远程 macOS/Node 22 安装包门禁:依赖 Linux 打包任务,将同一 tgz 下载至 macOS runner,再全新安装并执行状态互斥/SIGKILL、端口冲突、收据 HTTP、队列崩溃恢复四项脚本。YAML 解析与 job 依赖检查、独立审查通过;此记录只表示 CI 配置完成,实际运行与全部 macOS 架构/Node 版本兼容尚未证明。测试不在用户本地 Mac 运行,未部署生产。

  • 最新 Agent 文件锁/日志串行同步候选与现有 Web 候选镜像完成联合验收:ecs110 /tmp/ic-lock-joint-verify.sh 使用 /tmp/ic-lock-package/canvas-agent/dist/index.js,SQL 合同及 12 项浏览器回归通过(49.7 秒,joint_skill_validation=ok),日志 /tmp/ic-lock-joint.log,QA 服务已停止。包含真实 Agent 工具来源、收据与解释读取,但供应商生成仍被拦截或模拟,不是 GPU 验收。另修复发布配置遗漏:Bun 锁文件同步 fs-ext/nan,远程 bun install --frozen-lockfile --ignore-scripts 通过(只证明依赖锁一致,不证明原生构建);发布 workflow 安装包阶段新增双进程、端口冲突与工具收据三项门禁,独立审查通过。尚未推送执行 GitHub Actions,macOS 兼容及正式发布仍待完成。

  • 同一 JsonlStore 的追加、sync、关闭改为串行,调用时固定 JSON 快照;成功打开文件后发生追加/同步/关闭故障,已排队和后续写入均拒绝,避免在未知状态上继续追加。打开文件本身失败仍允许环境恢复后重试,保留既有队列/收据行为。首轮过度阻断 open 失败触发两项旧测试,已修正且未删除原测试。ecs110 126 项测试/461 次断言、构建、SIGKILL、双进程互斥和 HTTP 回归全部退出 0;覆盖 12 条大中文记录并发顺序、调用后输入修改以及 sync 失败仅第一条未知字节存在、后续不开文件。日志 /tmp/ic-journal-serial.log,未执行模型、未发布。此为单实例边界,重启后未知记录对账与跨实例协调仍待完成。

  • 日志追加新增文件同步屏障:JsonlStore.append 追加后等待 FileHandle.sync(),成功或失败均关闭句柄;同步失败向调用方传播,不能报告检查点已确认。新增实文件句柄顺序/故障测试。ecs110 125 项测试/457 次断言、构建、队列 SIGKILL 恢复、共享目录互斥/强杀重启及收据 HTTP 验证退出 0;独立审查通过。首轮连接中断后确认无残留进程,新隔离目录缺少相邻启动器依赖导致两项失败,补齐后完整复验通过,日志 /tmp/ic-journal-sync-remote.log。未调用模型、未发布。仅证明文件同步调用与故障传播;目录项持久化、断电场景、同步失败但字节已写入的未知提交恢复仍需进一步处理,不宣称完整断电安全或可直接重试。

  • 文件锁候选包顺序回退读取验收通过:Linux 全新安装旧 0.7.9 包后,实际执行 0.7.10 候选→0.7.9→0.7.10 候选,同一临时 HOME 中 interrupted 任务、Skill revision/executionId 与队列原始字节在三阶段保持不变。每阶段退出并 wait 回收后才启动下一版本,输出 package_sequential_rollback=ok、退出 0;复现脚本 canvas-agent/scripts/test-package-rollback.py,ecs110 日志 /tmp/ic-lock-rollback.log。独立审查通过,无模型调用。只证明该历史 fixture 的顺序读取兼容,不证明活跃任务恢复、旧新版混跑、全部数据迁移或 macOS 原生依赖兼容;未执行生产回退。

  • 文件锁候选发行包的 Linux 全新安装验收通过:远程构建源码的 26 个运行时/依赖配置文件与本地 27236b4b SHA-256 逐项一致(README 非运行时未计入)。npm pack 后在独立空目录 npm install <tgz>,从安装包 dist 执行双进程/SIGKILL、端口冲突、工具收据 HTTP 三项脚本全部退出 0;脚本仅为外部验收附加,不属于 tgz 内容。tgz 位于 ecs110 /tmp/ic-lock-package/canvas-agent/basketikun-canvas-agent-0.7.10.tgz,SHA-256 f50a2d569192d3adbc83cb71dd33ed517d3f6e4da72adba5289dc52607e454d5,日志 /tmp/ic-lock-installed.log。测试未调用模型,进程已回收;此为未发布的同版本候选包,不覆盖既有正式 0.7.10 产物。macOS 原生依赖、跨版本混跑与回退仍待验收。

  • 状态目录互斥候选:HTTP 启动在读写配置及恢复队列前使用 fs-ext@2.1.1 非阻塞独占文件锁;占用/加载失败即停止,进程退出释放,不删除锁文件、不按超时接管。ecs110 123 项测试/453 次断言、构建及真实 Node 三项脚本通过:同 HOME 不同端口第二进程退出 1,原进程健康且配置/日志字节不变;SIGKILL 原进程后保留锁文件正常重启;端口占用与收据 HTTP 仍通过。另在独立空目录按锁文件执行 npm ci 全新安装、构建和三项真实 HTTP/进程脚本,全部退出 0,排除预装依赖影响。独立复审通过,未调用模型、未发布。仅约束遵循协议的本地文件系统进程,旧版本、NFS、多机与外部副作用恢复不在此证据内;macOS 原生依赖与发行包兼容仍待验收。

  • Agent 启动顺序修复候选:先成功绑定 HTTP 端口,再初始化工具日志与恢复队列;初始化期间统一返回 503,初始化异常关闭 listener 并保留原错误。避免端口冲突的失败进程先恢复或执行任务。ecs110 bun test 123 项/453 次断言、npm run build、python3 scripts/test-tool-checkpoints-http.py 和 python3 scripts/test-startup-port.py 均退出 0;真实 Node 入口故障注入确认 EADDRINUSE、原队列残尾字节不变、无新增执行日志,未调用模型。首轮类型检查发现 emit 作用域错误,修复后完整复验通过。仍未实现不同端口进程共享状态目录的互斥锁;真实双进程回归已确认两者同时健康且配置/日志被改写,明确属于未修复缺陷,详见 TODO。不等同分布式执行锁或完整 Harness,未发布生产。

  • 任务诊断新增已保存计划展示:逐项显示待执行、执行中、模型报告已完成,明确不等同产物验收;兼容旧 Agent 缺少计划,空计划替换旧步骤,任务状态改变后重新读取。ecs110 客户端 3 项测试/13 次断言、类型检查及镜像构建通过;真实 Agent 接口驱动的 390px/桌面用例验证三态读取及空计划刷新,3 项 SQL 合同与 12 项浏览器回归通过(46.5 秒)。独立审查通过,隔离服务已停止;计划记录为 fixture,未调用模型,未部署生产。

  • Agent 的 plan.updated 计划快照按运行/画布/引擎串行写入日志,成功终态前等待写入,失败中止本次引擎并记录失败;晚到事件不再写入。诊断接口可在重启后读取最后一份有效作用域计划,明确标记为模型报告、质量未验收;不是阶段恢复检查点,前端计划恢复展示与 DSH 适配仍待实现。ecs110 最终全量 120 项测试、448 次断言通过,类型构建及真实 HTTP 计划读取通过,独立复审通过;一次全量测试进程无进展后已终止,限时重跑通过。测试计划为中性 fixture,未调用模型、未部署生产。

  • 新增真实 Agent → 浏览器诊断验收:临时 HOME 写入中断任务、匹配输入清单与未确认工具意图,启动实际 Agent 后由 390px 浏览器直接查询诊断;追加冲突清单并在桌面宽度刷新,匹配提示消失、冲突原因出现,排队任务保持为空。没有拦截诊断接口,但持久记录是合成 fixture,未调用模型或验证真实业务恢复。类型检查、3 项 SQL 合同及 12 项浏览器回归通过(47.2 秒),独立复审通过,QA 服务和临时 Agent 已清理;未部署生产。

  • 本机 Agent 任务的“执行收据”内新增按需展开的“执行诊断”:显示输入清单是否匹配、锁定 Skill 版本、待核对工具数量及解释原因;连接、画布、任务或刷新状态变化后不展示旧作用域结果。旧 Agent 返回 404 时提示升级/无诊断,不回退为成功。此面板只读取已有本地执行证据,不自动恢复、不认定媒体质量通过,也不代表完整双 Harness 已完成。接口校验 2 项测试(9 次断言)、类型检查、镜像构建、3 项 SQL 合同与 11 项浏览器回归通过(45.7 秒);390px 宽度测试覆盖按需读取与刷新 404 清空诊断,诊断响应为拦截桩。独立复审通过,QA 服务已停止,尚未部署生产。

网站 Agent 会话隔离

  • 已按完整候选 5e4eaf0cb00438f1d5caab305c35ad257b28862c 从 Git 重建隔离快照并核对 1,370 个文件对象,联合通过 Agent 116 项测试及真实 HTTP 收据、执行服务 21 项容器测试、Web 类型检查/构建、SQL 3 项合同和浏览器 11 项回归。完整证据与边界见 docs/plans/v31-harness-gap-audit.md;未推送、未部署、未进行真实 GPU 或账单验收。
  • 输入准备阶段写盘失败时,清理本次请求已创建的图片和长提示词文件,返回 503 / INPUT_STORAGE_FAILED 且不启动模型进程;长提示词的文件句柄通过上下文关闭。新增故障注入覆盖第二图部分写入、提示词创建失败、提示词部分写入;21 项无外网容器回归通过(13.661 秒),独立复审通过。清理本身遭遇权限/文件系统错误的情况仍需专项验收。候选未部署生产。
  • 多图 Agent 请求先完成全部图片格式、Base64 与累计字节校验,再落盘;后续图片无效或超限时不遗留前面图片,也不启动模型进程。18 项隔离容器回归通过(13.618 秒),新增覆盖后图格式错误、不支持类型、非法 Base64、空内容及累计大小超限;这不等同图片像素解码或视觉质量验收。候选尚未部署生产。
  • 健康检查 opencode --version 也使用独立进程组与受保护的清理流程,避免探测超时或连接断开留下进程;正常返回 200,非零退出、启动失败或探测超时返回 503。已有运行时镜像加只读候选挂载、无外网容器中 16 项测试通过(13.616 秒),含真实健康请求断开、版本替身及同组后代停止、后续任务成功;独立复审通过。此为候选验证,不是生产部署或真实模型验收。
  • 容器级真实启动器验收发现并修复服务 HTTP 端口变量被继承为启动器代理端口的问题;执行环境现在移除该服务端口变量,避免测试中代理健康探测误访问服务自身。使用已有运行时镜像加只读候选挂载(非最终发布镜像)、--init --network none、真实 shell/代理和中性 opencode 替身,Python 3.12.14 / aiohttp 3.14.3 下 11 项测试通过(7.141 秒),断开后同组无活跃进程且后续请求成功。未调用真实供应商、未部署生产;验证约束已沉淀到协作 Skill。
  • 网站执行服务每条任务创建独立会话/进程组,完成或取消时对该组发送 TERM,再在等待直接子进程后发送 KILL,防止启动器退出而代理/模型后代继续运行。ecs110 11 项回归通过(5.473 秒),真实 HTTP 用例包含忽略 TERM 且继承输出管道的后代:直接子进程已回收、后代不存在或处于不可执行的僵尸态、下一请求成功。主动脱离进程组的守护进程及远端供应商计算不在此验证结果内;未部署生产。
  • 网站执行服务启用 HTTP 断开时取消 handler;执行锁内完成子进程 TERM/超时 KILL 与 wait,再释放锁。清理过程使用独立任务并等待完成,避免超时后再次取消跳过清理;排队请求取消不启动子进程,也不释放其他请求持有的锁。此项只涵盖服务直接启动的进程,不承诺供应商远端计算取消、进程树回收或退款。ecs110 11 项测试通过(5.300 秒):真实启动 service.py 与忽略 TERM 的测试子进程,经 HTTP 断开确认 KILL 后 PID 消失、临时提示词清理及下一请求成功;独立复审通过。没有调用真实模型,也未构建或部署服务生产镜像。
  • 网站 BFF 将入站请求中止、响应流取消与原有 360 秒超时合并到上游 fetch;流取消停止心跳并接收晚到异常,取消分支不重试。请求开始前已取消返回 499 / REQUEST_CANCELLED;已开始的 JSON 流保留原 HTTP 状态,在仍可读取时返回取消 code。关闭 HTTP 连接不代表供应商计算中止,不自动退款。 ecs110 最终候选通过 10 项单测(27 次断言)、类型检查、构建、3 项 SQL 合同与 11 项浏览器回归(40.8 秒);新增真实浏览器 → Next 容器 → 受控 HTTP 上游用例确认连接关闭且无重试。独立复审通过,QA 服务已停止;未调用真实模型,未部署生产。
  • 浏览器取消回归覆盖网站聊天与工具两种模式:等待第一个模型请求后新建对话,断言旧请求 requestfailed / ERR_ABORTED,再检查第二个请求保持运行、正常完成;响应使用拦截桩,未据此宣布供应商取消成功。ecs110 隔离复验 10 项浏览器用例通过(44.7 秒),3 项 SQL 合同、类型检查、镜像构建通过;独立复审无高置信度问题,QA 服务已停止,候选未发布。
  • 网站聊天及工具循环增加执行代次校验;新建、切换、删除会话、切换画布或卸载面板后,旧请求的回复、工具动作和运行状态回写失效。新对话可以继续发送,旧请求结束不再解除新请求的运行状态。网站聊天与工具循环的 fetch 已接入执行级 AbortSignal,切换会话或卸载时中止浏览器请求;不等同 BFF 上游或供应商任务取消、计费撤销。
  • 新增浏览器延迟回复竞态用例:同一页面新建对话并发送第二个请求,再释放第一个请求的写节点指令;验证旧节点未出现、第二个请求仍保持输入禁用、第二个回复正常显示。供应商响应使用拦截桩,未执行 GPU 生成。 ecs110 隔离候选类型检查、镜像构建、3 项 SQL 合同与 9 项浏览器回归通过(38.7 秒);独立代码复审无高置信度遗留问题。QA 服务已停止,尚未发布生产。

画布图层与分组面板

  • v0.18.2 已修复首屏协同快照覆盖等待期间新建节点,以及同一浏览器拖拽确认后继续发送旧 baseVersion 的自冲突。精确发布源码 b0b74da4d0637148ec546949b5137f96d7ba720c 在独立 PostgreSQL/Redis/Web 环境完成 5 次 Group 创建、拖入/拖出、自动包围、悬浮工具栏、零 409 冲突与刷新保留节点回归(30.5 秒),协同单元测试 27 项及类型检查通过。生产同镜像连续 3 次回归通过(18.0 秒),运行检查 production_runtime_check=ok,Web healthy、重启 0;测试账号及 3 个画布已清理。Open Code Review delegation 按解析规则复审本轮 Hook、测试和文档,无遗留高置信度问题。上一版 7b80de24beee790553c571ecc4a7c280326c256d 镜像保留供窄回滚;本轮未执行生产回滚。

  • 精简底部工具栏后遗漏的专家节点创建入口已收进“更多画布操作”:可创建文本、音频、生成配置和 Group,清空画布继续独立放在分隔线下。隔离候选已验证菜单五项、创建 Group、图层面板显示 1 个节点与 0 项成员;分组算法 13 条单元测试继续覆盖拖入、拖出、自动包围、移动整组、复制关系与删除组保留成员。

  • 底部工具栏新增“图层与分组”入口,按现有 Group 成员关系构建可折叠层级;支持按标题或节点类型搜索,保留命中子节点的完整分组路径,异常孤儿/循环成员仍会显示。点击任意条目会选中并居中定位节点。需在桌面和移动端验证深层分组、拖入拖出、删除组、搜索、折叠、明暗主题与大规模节点滚动。

  • Group 作为生成输入时会递归展开嵌套组内的图片、视频、音频和文本,按画布顺序去重后进入同一生成上下文;需分别连接到普通媒体节点和生成配置节点,验证输入计数、MiniMax H3 自动路由及最终请求顺序。

  • 普通节点提示词面板与专家生成配置节点显示横向输入引用条;图片/视频使用鉴权媒体预览,音频、文本提供对应内容预览,Group 边展开为组内资源但删除仍精确断开原始 Group 边。“+”会进入目标端连接选择。需验证悬浮预览、横向滚动、Group 展开、删除、重新连接及持久化恢复。

文本多候选折叠

  • 专家生成配置选择多个文本结果时创建一个根文本节点和批次备选子节点,默认只显示根节点;数量按钮包含根结果,展开后显示全部备选。点击“设为主文本”会与根节点交换内容,人工修改过的原主文本仍保留在备选中。任务尝试、取消、错误和刷新恢复继续使用现有批次节点协议。需验证 1/2/4/15 个结果、部分失败、运行中刷新、折叠/展开、编辑后连续切换及下游连接。

画布视频帧截取

  • 有内容的视频节点右键菜单新增“截取首帧 / 截取尾帧 / 截取当前帧”。当前帧使用播放器的实际播放位置,结果编码为 PNG、写入现有 PostgreSQL/OSS 媒体链路,在原视频右侧创建图片节点并自动连线;读取、Seek 和编码均有 30 秒超时及明确错误。需在桌面端分别验证本地上传、生成视频、刷新恢复视频和长视频三个位置,并核对截图内容与播放器画面一致。

视频数据工厂多模态 Caption

  • Qwen 视频标注升级为 multimodal-caption-v2,每个训练 Shot 一次生成 training_prompt、narrative、audio 三类 Caption;三类记录均保存模型、模型版本和 Prompt 版本,审核者已经手工修订的 Narrative/Audio 不会被后续自动任务覆盖。隔离环境 Ruff 与完整 VDE 测试套件通过;需用包含对白、音乐、环境声和静音片段的真实素材复验 Caption 准确性及审核窗显示。

视频数据工厂审核波形

  • Shot 审核窗接入 VDE 音频轨道、测量与分析任务接口;尚无测量时可直接运行音频分析,完成后按当前 Shot 的起止时间从整段媒体波形中裁切对应区间,并叠加静音事件、采样率、声道和镜头时长。需用长视频的多个非首段 Shot 验证波形区间与播放器声音一致,并复验无音轨、静音、分析失败、切换镜头和移动端布局。

Canvas Agent 空白对话与历史恢复

  • Canvas Agent 0.7.8 连接画布后默认保持空白草稿,不自动进入最近 Codex 会话;点击“新对话”立即清空界面且不预建空 thread,首次发送时通过显式空 threadId 创建新会话。只有用户从历史中明确选择,或刷新时存在归属明确的 queued/running Run,才恢复对应会话。需验证首次连接、连续新建空草稿、首次发送、手动恢复历史及运行中刷新。

Canvas Agent 上传图片转画布节点

  • Canvas Agent 0.7.7 新增 canvas_create_attachment_nodes:对话中本轮上传的图片现在具有明确附件 ID,Agent 可将其创建为真实图片节点。浏览器通过带 token、画布、Run 和发起标签页作用域的本机接口读取图片,再复用现有 PostgreSQL/OSS 媒体持久化与节点 metadata;SSE 工具参数不携带 base64,运行结束后附件接口立即失效。需在同画布双标签页分别验证单图、多图横排/竖排、确认开关、刷新恢复,以及错标签页和旧 Run 均读取失败。

Canvas Agent 同画布多标签页隔离

  • Codex、OpenCode Spicy 和 Claude 任务现在携带发起浏览器 clientId,Canvas Agent 在 Run 真正开始时校验该 client 仍连接且仍属于目标画布;状态读取、工具下发和结果接收固定到该标签页。同一画布的另一标签页即使后来刷新或上报更新状态也不会接管任务,发起页关闭或切换画布后任务明确失败。需用同一画布两个标签页验证读取标题差异、创建节点归属、运行中刷新非发起页、关闭发起页和后续新任务。

Canvas Agent 任务取消稳定性

  • 活动 Codex turn 的取消链路改为先发送原生 turn/interrupt,等待 3 秒仍未结束或 RPC 失败时才进入 SIGINT → SIGTERM → SIGKILL 的有界降级;turn 尚在启动、还没有 turn ID 时继续直接使用信号取消。重复点击只发一次 RPC,正常完成会撤销全部降级定时器。需在生产验证执行中取消、启动阶段取消、连续点击取消、取消后继续同一会话、RPC 异常后自动恢复五种场景。

生图与视频工作台三步式创作

  • 生图、视频工作台的主操作区统一为“1 上传素材 → 2 选择工具或填写提示词 → 3 执行生成”,素材区域在工具和参数之前展示,执行按钮保持为唯一任务创建入口。
  • 第二步提供“工具 / 提示词”互斥入口:工具模式只展示图片或视频工具链,提示词模式只展示自由创作输入、提示词库与 AI 优化,减少同屏重复配置。模型、参数、积分报价、任务恢复与生成记录继续复用原链路。需在桌面和移动端验证切换、素材增删、工具自动配置、提示词生成及任务恢复。
  • 隔离候选已完成桌面与 390×844 移动视口回归;期间修复移动端“我的资产”桌面按钮覆盖隐藏规则、挤压标题纵向换行的问题。生图与视频页面均无浏览器运行时错误,工具/提示词切换和移动端三步顺序通过。
  • 生产浏览器新增固定回归:生图与视频页面均验证三步标题完整、“我的资产”无论初始展开或折叠都可双向切换;画布列表全局导航、OSS 备份入口、画布素材/流程合并菜单、图层空态和小地图开关同时通过。该组共 4 条用例、8.2 秒全部通过,临时普通账号及其 2 个画布已从生产数据库清理。
  • 隔离候选补充专家节点菜单与明星模型检索回归:中文名“杨幂”、英文名“Yang Mi”和缩写“ym”均保留在“明星 Krea2”二级分组;连同上述入口共 5 条浏览器用例、9.7 秒全部通过,临时账号及画布已清理。

输入媒体驱动的模型筛选与自动路由

  • 生图、视频工作台及画布生成节点的模型选择器会按当前图片、视频、音频、文件、链接数量和帧模式实时计算兼容性;可执行模型保留在正常分组,不匹配模型统一置灰并显示具体缺项,不再等到提交后才发现输入错误。
  • 当前模型因素材变化变得不兼容时,优先在同模型家族内自动切换到可执行模式;MiniMax H3 的可选集合固定为:1 图显示 I2VA、L2VA、REF2VA,2 图显示 FL2VA、REF2VA,3–4 图只显示 REF2VA,超过 4 图不显示可执行模式并提示精简素材;自动首选依次为 I2VA、FL2VA、REF2VA。需在工作台与画布逐步增删参考图,确认模型、错误提示和最终请求模式同步变化。
  • 真实 GPU 复验发现并修复 DaSiWa Director 把上传文件名封装在 timeline_data JSON 后,远程 worker 未替换文件路径的问题;Scheduler 30f8e8b7ecbfd63f96a0d9daedbb60711926aed8 已窄部署且健康。I2VA、FL2VA、3 图 REF2VA 均在 vps66 RTX PRO 6000 Blackwell 上完成:队列分别约 5.1s、4.6s、7.0s,GPU 运行约 188.0s、123.5s、136.5s,输出均为 H.264 + AAC、24fps、约 5.175s,并已抽帧确认可见内容连续且无黑帧或解码损坏。

画布提示词库加载加速

  • Character Manager BFF 对提示词列表、风格统计和标签统计的成功响应增加 5 分钟进程内缓存,并合并同一查询的并发请求;浏览器同时复用 60 秒私有缓存。需在生产连续进入 NSFW-Video 提示词库,确认首个请求返回 X-CM-Cache: MISS,后续相同请求返回 HIT 且不再重复触发 10 秒级上游聚合。

直播角色素材与标注

  • 直播角色全屏分类浏览已通过真实素材只读预览,用户已确认展示效果;桌面 1440×1000、手机 390×844、分类数量、真实视频播放、切换卸载及 Esc 关闭通过,未产生业务 API 写请求。服务端单测 8 项通过,类型、格式检查及独立代码审查通过。预览禁用导入,仍需在隔离完整站点验证空角色、跨分类共用视频的导入去重、刷新后持久化及账号隔离;尚未部署。生产数据库仅执行只读连接查询并回滚,未修改数据。

  • 直播角色页现在同时读取 xcamshow 角色目录和无缓存的 /api/live/programs 权威节目清单,自动合并当前及后续新增主播;除角色基础媒体外同步边界帧、直播预览、待机循环、输入反馈、礼物互动和按钮动作素材,并在卡片显示姿势、回复、送礼、动作的分组数量。角色卡明确区分“直播角色 / 普通角色”;普通角色可一键生成主播素材包并写入“我的素材”。xcamshow 旧内置主播 Vivienne、小林遥、金秀研已迁入数据库节目清单,历史 OSS 签名被替换为同源媒体代理路径。需在生产核对全部节目角色、Vivienne 的 33 项互动视频、小林遥的 37 项互动视频、沈黛、小樱和 Diliraba 的完整配置素材,并验证新增主播自动出现、普通角色批量创建、重复点击去重及刷新后的 PostgreSQL 持久化。

NSFW 工具箱姿势 Skill

  • 接入 nsfw-toolsbox-pose Skill 包及 19 种姿势说明。Skill 广场现在可从生图工作台、画布和画布助手打开:生图入口自动切换到 krea2-turbo-v25-edit 并展开明星身份 LoRA + 姿势 LoRA 的两层 stack;画布入口填入“人物参考图 → Krea2 Turbo v2.5 图片编辑 → MiniMax H3 首帧生视频”的两阶段编排,并要求保留可预览和复用的中间图片节点。需逐一验证 19 种姿势选择、0/1 层明星 LoRA、姿势 LoRA、首帧连线、视频生成及刷新恢复。

直播间复杂动作与 Skills 统一入口

  • 复杂动作已从占位项改为独立 complex_action 状态触发,纳入发布前死路/回落校验和模拟预览。素材页可选择 3–8 段,按直播链路 Skill 铺设“任务进度总览 + 每段提示词 + 每段视频配置 + 每段输出”的可编辑节点组;提示词固定首尾衔接、角色锚点、竖屏 9:16 与 720p,每段保留 Skill/版本/序号元数据供任务追踪和审核。
  • Skill 广场与画布助手统一增加“直播间复杂动作”“AI Film 视频拼接”“一键上线直播角色”,并保留既有“伪直播连环提示词”和姿势工具箱入口。需在真实画布验证分段生成、逐段审核、AI Film 拼接、最终素材绑定复杂动作转场及发布回落;本项前端与合同测试通过后仍不等同于真实 GPU 视觉验收。
  • 生图工作台不再因为提示词、参考图、输出尺寸或报价仍在加载而直接禁用“开始生成”;只有已确认余额不足时才禁用,最终扣费继续由服务端权威校验。点击后由现有提交校验显示准确缺项,krea2-turbo-v25-edit 缺少参考图时会明确提示必须添加 1 张参考图,补齐后可直接提交。

画布账户隔离

  • 画布列表和直达页在服务端确认当前账户的画布成员关系前不再展示 IndexedDB 缓存,服务端拒绝的旧画布会在首屏渲染前移除,避免切换账户后短暂或持续看到其他用户的画布及空素材节点。

视频工作台任务统计与完成态收口

  • 顶部任务数明确标注为“本页处理中”,与旁边 Scheduler 的 GPU 运行/等待统计区分,避免把媒体持久化、结果落库误解为 GPU 排队。
  • 视频已在上游生成并持久化后,浏览器读取 CDN 媒体元数据最长等待 8 秒;CDN 元数据请求卡住时使用默认尺寸继续保存结果和完成日志,避免任务长期停留在“生成中”。

登录与注册

  • 恢复公开用户名/密码注册页及登录页入口;注册会创建隔离的普通用户与积分账户,并对用户名、显示名称、密码、重复用户名、请求大小和来源频率做服务端校验。生产数据库口令同步后需确认登录不再出现 PostgreSQL 认证错误。

MiniMax H3 DaSiWa 五模式

  • 视频创作台与画布新增 minimax-h3-dasiwa-t2va、minimax-h3-dasiwa-i2va、minimax-h3-dasiwa-fl2va、minimax-h3-dasiwa-l2va、minimax-h3-dasiwa-ref2va,统一执行 DaSiWa MiniMaxH3 MythicAlchemy C-MMH3-16 工作流;分别要求 0、1、2、1、1–4 张图片,并保持提示词、分辨率、比例、时长和 Seed 请求链。需逐模式核对工作台与画布选择、输入提示、任务提交、原生音频及结果入库。

画布提示词库加载加速

  • 画布与提示词库的文字 Prompt 列表改走 include_total=0 快速分页,首屏不再等待 23.9 万行数量与四种时长正则聚合;满页继续按 offset 加载,界面显示已加载数量。Character Manager BFF 同时对提示词列表、风格统计和标签统计增加 5 分钟进程内缓存并合并并发请求,浏览器复用 60 秒私有缓存。需在生产进入 NSFW-Video,确认首屏快速出现 50 张卡片、向下滚动可继续加载,重复请求返回 X-CM-Cache: HIT。

GPU API 查询与模型目录

  • 图片、普通视频和 Seedance 视频任务的浏览器 BFF 与 Proxy OpenAPI 权威查询方法统一为 POST;内部旧 GET 只保留兼容,浏览器误用 GET 返回 405 / method_not_allowed。需分别创建图片和视频任务,使用 POST 空 JSON 查询至终态,并确认 GET 不触发上游查询。
  • GPU BFF 的隐藏资源、隐藏模型和任务类 404 新增稳定 resource_not_found、model_not_found、task_not_found;不存在与不属于当前用户的任务保持完全相同的 task_not_found 响应,已确认归属的视频映射丢失仍返回 VIDEO_TASK_MAPPING_MISSING。需用两个账户交叉查询同一任务,确认响应不可区分且不会访问上游。
  • GPU API 文档新增从 GET /api/proxy/v1/models 的公开只读投影实时读取的完整模型目录,展示模型 ID、名称、能力和可用状态;完整缺失诊断仍保留在登录后的同源接口。中央 GPU 工作流基准矩阵明确只记录实测而非模型目录。需打开文档,核对实时表格与登录主站后直接请求 /models 的公开字段数量和内容一致。

视频预编辑组合接口

  • 画布与生图工作台的“图片换人”已从单次 Krea2 Identity Edit 重绘改为真实组合链路:图片1目标场景 → BFS 换头 → BodySwap 换身体,图片2同时提供头部和身体身份;最终阶段固定保留目标图姿势、手部、服装、镜头、构图、光线和背景。生产原图对 canary 已在 vps66 完成,排队 5.992 秒、GPU 运行 43.319 秒;仍需在画布用常用素材主观确认脸、头发、体型、肤色与头身比例。

  • 修复双阶段视频换人偶发在约一分钟时报 video composite completed without final video:图片预编辑阶段和 SCAIL2 视频阶段现在使用不同的稳定 ComfyUI prompt ID,Scheduler 不再把第一阶段的已完成 history 误判为第二阶段终态。需连续提交多条视频换人任务,确认中间 PNG 出现后继续运行至最终 MP4,且刷新、跨标签页恢复和同输入幂等提交不会提前失败。

  • XCamShow Partner Bearer API 的模型白名单新增最新版 video-person-swap,与既有 video-face-swap、video-undress 共用任务查询、中间 PNG、最终 MP4、取消和 Idempotency-Key 幂等契约;GPU API 文档新增 XCamShow 专页和可直接复制的三模型 Python 客户端。需用 XCamShow 测试 Key 分别创建三种任务,确认双阶段视频换人的人物图顺序、中间图提前读取、最终视频下载、重复幂等键和越权任务查询行为。

  • 视频换人在同一个组合工作图中依次执行源视频首帧提取、BFS 换头、BodySwap 换身体和 Wan2.1 SCAIL2,并对调用方保持一个任务 ID;“双阶段图片换人”仅指 BFS + BodySwap 两个图片预编辑阶段。生产真实样本已在约 6 分钟完成,BodySwap 后、SCAIL2 前的 512×896 RGB PNG 中间图与含 H.264/AAC 的 512×896、约 13.8 秒 MP4 均通过解码检查;仍需用户在视频创作台确认人物相似度、身体比例和运动一致性。

  • 视频创作台的浏览器轮询租约遇到登录会话 401 或瞬时续租失败时,不再把仍在上游运行的 GPU 任务误写为失败;任务保持“生成中”,会话恢复或其他标签页接管后继续轮询同一个 provider task,不重复生成或计费。需验证登录过期、重新登录、双标签页接管和最终视频/中间图恢复。

  • 视频换脸与视频换人的空提示默认值已替换为专用英文约束:只替换源视频中的人物,保留参考人物的脸、发型、体型、比例和服装,并严格保留源视频的动作、表情运动、背景、环境、物体、光线、运镜、取景、构图、节奏和时长;视频创作台卡片、Skills 入口、画布、浏览器请求服务与 Proxy 最终兜底使用同一提示词。video-undress 和原始 scail2-person-swap 仍使用 the woman is dancing。需以同一源视频分别提交空提示与自定义提示,核对空提示保持背景而非重绘、自定义提示原样覆盖默认值、逐帧人物身份/体型/服装一致。

  • 视频创作台中间图展示固定通过同源鉴权媒体下载通道读取,已有持久化中间图刷新后也能恢复;Scheduler 的 queue_wait_ms 与 run_ms 进入 Proxy 安全字段和生成记录,完成卡片显示两者之和,不再把浏览器轮询恢复、视频导入 OSS 等等待计入 GPU 生成耗时。需验证运行中、完成后、刷新后和重新登录后的图片显示与耗时一致。

  • 视频换人的预编辑尺寸链已与视频换脸基线对齐:BFS 不再使用 1:1 latent,BodySwap 前也不再强制缩放成 1024×1024,两个阶段连续保留 512×896 竖版构图;BFS 参数同步为 8 步、ref_boost=1、grounding_px=512。生产组合任务已生成并解码 512×896 RGB PNG 中间图和最终 MP4,仍需用用户常用人物参考图做主观身份与身体融合验收。

  • GPU API 图片类与视频类的 10 个工具接口详情页均新增完整可复制 Python 示例,覆盖环境变量、会话鉴权、multipart 文件顺序、operation ID、任务创建、长轮询、失败状态、超时、最终媒体下载;三个视频组合接口还会在可用时下载 intermediate.png。需验证复制代码后只替换本地媒体路径即可运行。

  • 视频换脸、视频脱衣、视频换人组合工作流新增首帧预编辑中间图片输出;Scheduler 将中间 PNG 与最终 MP4 分离,Proxy 通过归属校验后的 /videos/{id}/intermediate 返回图片,视频创作台持久化该图并在最终视频下方以居中毛玻璃卡片标注“中间结果 · 视频首帧预处理图”。需分别验证三种组合接口、刷新恢复、历史记录、OSS 持久化、中间图读取失败重试及普通视频不显示中间卡片。

  • GPU API 文档导航已调整为“GPU API → 工具箱 API → 图片类 / 视频类”,不再把工具箱作为与 GPU API 并列的独立菜单;图片和视频各接口补充了公开 BFF 路径、multipart 字段、输入顺序、完整阶段、curl、轮询、结果下载、取消、媒体限制和错误排查。旧 /docs/backend/toolbox-api/* 地址永久重定向到新层级,需验证桌面/移动导航、全部三级页面及旧链接跳转。

  • 生图工作台“图片工具箱”将 FLUX.2 Klein 收口为同一卡片的“精准换脸 / 精准换头”双模式,分别选择 face-swap 与 head-swap,与经典 comfy-faceswap 并列;图片类工具箱文档保留独立三级页面、两图顺序、接口示例和 Pro 后处理说明。需验证两个模式的模型切换、两图校验、生成记录、SeedVR2 输出及文档导航。

  • 画布新增三个标记为“组合接口”的视频模型:视频换脸、视频脱衣、视频换人;分别校验 1 视频+1 人脸图、1 视频、1 视频+1–2 人物图,并由 Proxy/Scheduler 在单任务内完成首帧预编辑与 Wan2.1 SCAIL2 视频生成。

  • 视频创作台新增“人物视频工具”可见入口,三张功能卡会自动切换到对应组合模型,并直接展示每个功能需要的视频和图片数量;原始 SCAIL-2 入口继续独立保留。

  • Scheduler 新增 /v1/video-face-swap、/v1/video-undress、/v1/video-person-swap,工作流和 API 文档明确记录 BFS 换头、Krea2 脱衣、BodySwap 换身体与 SCAIL2 的组合顺序。

  • 生图工作台的 AI Skills 区升级为“图片工具箱”,增加图片脱衣、BFS 换头、BFS 换身体的直接入口,并把图片换脸、图片超分和组合图片换人集中展示;GPU API 文档增加“工具箱 API 文档 → 视频类 / 图片类”三级导航。

Klein 换脸/换头四模式工作流

  • 画布图片 Skill 新增 face_swap、face_swap_pro、head_swap、head_swap_pro 四个入口:普通模式执行 Klein 后直接进入 SeedVR2,Pro 模式通过工作流第二阶段开关启用 Krea2 Identity Edit,对肤色和头身比例做局部融合后再放大。四种模式固定要求第 1 张为目标底图、第 2 张为身份来源图,并统一路由到 vps66 Scheduler。需在空闲 GPU 窗口分别实测四条路径,核对普通模式确实跳过 Krea2、Pro 模式肤色/比例融合、最终图片解码、显存峰值、任务记录和刷新恢复。

视频节点原位重新生成

  • 已有视频节点从节点下方编辑面板提交时,与节点“重新生成”按钮保持一致:在原节点内显示等待、成功或错误状态,成功后原位替换媒体,不再新建下游视频节点和连线。空视频节点和生成配置节点仍保留新建输出的原有行为。需验证 Wan3 视频的面板提交、节点按钮、失败后重试、停止和刷新恢复,确认节点 ID 与原连线保持不变。

画布互动 Skill 视频比例同步

  • 互动 Skill 配置节点修改视频比例后会立即同步到生成请求引用,避免选择 9:16 后立即生成仍读取上一个 16:9 值。生成明细同步保留实际提交的 ratio,便于核对界面配置、Proxy 请求和最终输出。需连续切换 16:9 / 9:16 并立即点击生成,确认 Wan3 720P 竖屏输出为 720×1280,且生成记录中的 ratio 为 9:16。

画布生成张数、配置节点与直播编排入口

  • 画布默认生图张数改为 1;每个图片生成配置节点可在“图像设置”中独立选择 1–15 张。多图生成现在让批次根节点承载第一张真实输出,选择 3 张只创建 3 个输出节点和 3 个请求,不再额外显示一个复制首张结果的根节点。请求继续由浏览器并行提交,Scheduler 根据模型能力、显存、占用和队列把任务分配到当时可用的 GPU;需分别验证 1、3、4、15 张的节点数、任务 ID、积分倍率、取消、部分失败和刷新恢复,并在八卡空闲窗口确认 4 个兼容任务可同时进入不同 GPU。
  • 生成配置节点不再根据自身 scrollHeight 反复放大;节点保持稳定尺寸,内容超过可视区域时只在节点内部滚动。需验证生图、视频、音频、媒体批处理、切换模型和画布缩放后尺寸不漂移。
  • “直播编排”按钮不再因账号未开通而完全禁用:有权限时打开角色发布编排,无权限时点击会说明该功能用于 Loop、送礼、Action 与 BGM,并显示当前尚未开通发布权限。需分别使用发布账号和普通账号验证入口、说明、目标角色读取、发布状态、重试与回滚。

角色资产 Skills 接入生图工作台与画布

  • Skill 广场的“完整全身定妆照”“面部特写与全身三视图”“九宫格表情与全身三视图”“三行角色设定表”现在同时支持生图工作台和画布。工作台会按 Skill 预填 krea2/krea2-edit、3:4/16:9 与完整提示词;后三项要求至少一张完整全身定妆照参考图。画布入口会把同一模板填入 Agent,由 Agent 创建输入与图片 Config 节点并停在人工确认状态。需分别验证四个广场入口、工作台生成、画布节点创建、缺少参考图提示、刷新恢复和模型不可用提示。

生图工作台生成状态对账

  • 生图工作台现在每 10 秒读取 PostgreSQL 权威生成记录;其他页面实例或服务端已写入成功、失败、取消终态时,当前页面会停止陈旧轮询、清理 IndexedDB 恢复项并用真实结果替换“生成中 / 98%”卡片。需验证同页完成、跨标签页完成、刷新恢复、服务端失败与取消五种场景,确认不会重复生成或重复计费。

视频创作台尾帧参考图读取重试

  • 视频创作台使用已持久化的尾帧参考图提交视频时,媒体字节接口遇到一次网络异常或临时 502/503/504 会自动重试;需验证尾帧提取后直接设为尾帧提交、刷新页面后从“我的素材”重新载入尾帧提交,以及稳定 404 时仍快速显示真实读取失败。

MiniMax H3 Max 官方 API

  • 画布视频模型新增独立 minimax-h3-max-api,通过 MiniMax V2 官方接口提交与轮询,支持 480P/768P、5–15 秒、文生视频及最多两张首尾帧图片;普通本地 H3/FL2V 工作流保持不变。模型仅对管理员 Tim 的不可变用户 ID 可见,浏览器 BFF 与 Proxy 均执行访问门禁。需在生产使用该账号分别验证纯文本、首帧、首尾帧、轮询、结果下载、积分结算,并用其他管理员与普通用户验证模型隐藏及构造请求返回 404。

视频创作台去水印与去字幕 Skills

  • 视频创作台新增“视频去水印”和“视频去字幕”两个独立 Skill,可直接上传视频或从“我的素材”选择现有视频;任务分别写入 watermark_remove / subtitle_remove metadata,并通过 VDE cleanup_only 契约只执行所选 GPU 模型阶段。原视频不变,处理结果显示为新视频并保存到“我的素材”;面板保留进度、失败原因、本地历史与重试入口。vps66 八个 ComfyUI 实例已加载 VDEGPUVideoClean,去字幕 PaddleOCR + STTN-DET 与去水印 PaddleOCR + ProPainter 已分别通过真实视频、输出解码、严格 manifest 和 200ms 显存 canary;生产专用 Bearer 数据面、八 GPU Scheduler 路由和 VDE 合约已经启用,真实生产资产的两种 cleanup_only 任务均完成 CUDA 全帧扫描,并保留了首次失败原因与自动 retry 历史。本次生产样本判定为 uncertain,因此按契约保留原视频且未生成替换 Variant;仍需前端人工验证上传/素材选择、刷新历史、失败重试和结果播放,并用高置信命中样本确认新视频节点。

去水印与去字幕能力拆分

  • GPU 能力矩阵原“视频清理”已明确拆分为“去水印”和“去字幕”两个独立能力名称;两者继续复用 Scheduler 的 video-clean-v2 传输契约,但分别由 watermark_remove 与 subtitle_remove 阶段选择对应的检测/修复模型,不再在界面中混成同一个模型。需验证矩阵同时出现两行、两种任务分别提交正确阶段,且历史任务继续兼容。

Krea2 Spicy 姿势 LoRA

  • 生图工作台原独立“Krea2 姿势 LoRA”区已切换为“Krea2 Spicy 姿势 LoRA”,并并入“AI 图像 Skills”;交互沿用 Identity 姿势模板结构,选择七种姿势后继续按 0 张参考图/1 张参考图自动匹配 Krea2 文生图或单图编辑工作流。Skill 广场的七个入口同步采用 Spicy 命名、Identity 模板说明和标签,既有 Skill URL 保持兼容。需验证七种姿势、强度、0/1/2 张参考图、Skill 广场跳转、模型自动匹配及明暗主题。

画布与生图 OSS 直传 403 修复

  • 上传票据现在返回 /api/storage/direct-upload/{storageKey},由已登录 Web BFF 校验用户和签名后使用内部令牌流式转发 Proxy,避开生产边缘将旧 /api/direct-upload 直接分流到 Proxy 时丢失 X-Direct-Upload-Token 的长期 403;上传收到 401/403 会申请新 reservation 和票据后重试。需分别验证画布生图、图片工作台、视频结果、大文件流式上传、响应丢失重试和同 key 并发,确认生成完成后 OSS 落库稳定且旧直传入口不再收到浏览器流量。

  • 修复 Web 直传票据与 Proxy 验签算法在合并发布后不一致、导致图片已生成但 OSS 持久化入口稳定返回 403 的问题;Web 现在与 Proxy 共同使用 direct-upload-v1 域分隔 HMAC,并增加跨实现签名契约测试。

待测试

管理员 API 模型与密钥完整映射

  • /admin/models 现在列出全部平台 API 凭据槽位;未配置的槽位也保留并明确标记“未配置”,不再因为 Web 容器未读取 Proxy 模型环境而只显示 OpenCode Spicy。

  • 每条配置新增“凭据变量”列,并展示该 Key 对应的全部模型;下绿网模型明确绑定 MAAS_JUSTIN_SG_API_KEY,兼容 Key 单独标记为回退。

  • 系统环境密钥继续只对管理员按需显示,30 秒后隐藏并写审计;列表只返回脱敏值和指纹。

  • 待验收:生产管理页可看到百炼、MuleRouter、SmartStudio、Wan3、视频池、火山、MiniMax、RunningHub、ComfyUI 及内部服务映射,未配置项无法执行显示密钥。

  • ThreeUI 首页与全画布候选:新增 AI 主播工作台首页(女主播主视觉、兼顾男主播,角色/内容/直播编排主流程,形象素材和动作镜头辅助入口);首页概念图为原创生成虚构主播,不作为真实生成任务结果或直播中状态展示,不改变旧品牌首页;画布列表加入名称搜索和真实节点图谱缩略图(最多 48 节点,不加载额外媒体),素材/技能库、任务模板和诊断面板同步视觉。首页真实组件通过桌面/移动、深浅色四组浏览器渲染检查(无横向溢出、无运行错误)。以下画布范围:统一标题栏、轻量 Dock 悬停/相邻反馈、各类节点边框与选中轮廓、生成/停止按钮、真实计时加载状态、参数/提示词面板、双助手侧栏、图层、右键菜单、小地图、素材预览与画布列表。CSS Module 仅作用于 threeui,保留旧主题及所有原有事件;减少动效偏好停动画。已有远程 Next 构建及针对性测试通过,完整生产交互仍需验收;不以主题色变化宣称完整验收。

  • 新增可选 ThreeUI Studio 品牌主题:保留三种旧主题,接入后台预览卡、首屏恢复、主题校验、Ant Design 与画布深浅配色;不更改全站默认。中性色、不透明面板、无全屏玻璃模糊;本轮为主题基础,不包含 ThreeUI WebGL 组件批量移植。待浏览器和生产验收。

  • 新手直播间五阶段入口:新手模式打开直播间工作台后默认进入“描述目标”,顶部只显示“描述目标 → 确认设定 → 生产素材 → 模拟验收 → 审核上线”;关键帧详情、问题诊断、玩法、训练和模式切换收进“更多管理”。对话入口对外统一为“AI 角色创作”,支持现有浏览器语音输入。专家模式继续显示完整管理标签。本项已通过 TypeScript 与语音/live-room 领域单测,仍需 ecs110 隔离构建及桌面/移动浏览器交互验收。

  • Agent 生产任务派发真实性:直播间 Agent 步骤不再由服务端直接写成“已执行/已完成”。客户端先以稳定 dispatchKey 在画布创建提示词、配置和输出节点,重试复用同一批节点,再提交带 TaskSpec 版本、步骤、动作、目标和节点 ID 的结构化回执;服务端逐项核对持久计划后只记录“已派发、等待生成结果”,最后一步也保持等待状态。派发不再代替完成,后续状态由下述 Artifact 终态对账推进。

  • Agent Artifact 终态对账:Agent 派发的节点现在携带稳定的运行与请求来源;用户从该配置节点启动生成时,来源会写入生成请求和尝试记录。直播间工作台自动发现成功/失败终态并提交 Artifact 回执,服务端同时核对运行步骤、画布、输出节点、生成来源、供应商状态、积分终态和媒体登记;成功只标记为“产物已登记、等待人工质量验收”,失败要求积分已释放。产物登记后运行保持待验收状态,不提前写成 completed。本项已通过 TypeScript 与 34 项领域单测,仍需 ecs110 隔离构建、测试数据库 SQL 验证及浏览器真实生成验收。

  • DSH 统一任务中心投影:任务中心“计划执行”现在同时读取 Agent Plan 与 DSH 直播角色运行,展示用户目标、派发步数、逐步等待/失败/待质量验收状态及持久产物标记。数据由服务端 dsh_runs 与生成对账记录投影,不读取 Agent 自报文本;新增正式迁移、画布外键、JSON 形态约束和非空历史回滚保护。本项已通过 TypeScript、投影/迁移/任务中心相关测试,仍需 ecs110 迁移验证和桌面/移动浏览器验收。

  • DSH 人工质量门禁:只有通过 Artifact 对账并具有持久存储键的步骤可以人工“通过/驳回”。结论保存审核人、时间与问题标签;全部步骤通过后运行才进入 completed,驳回保留原产物并明确要求新计划修订,不能由客户端直接提交完成。当前提供最小通过/驳回入口,后续还需可编辑问题标签、候选对比和自动创建返工 revision。

工具箱 API Base URL 分流文档

  • XCamShow 工具箱视频换脸已切换到 Partner POST /videos、model=video-face-swap:后端只传身份图与受控模板 ID,画布从美国桶读取模板并在服务端截取前 10 秒,再交给 Wan3.0;直接上传源视频也按前 10 秒执行。已通过测试站 Partner 真实模板任务、10 秒 MP4 下载和画布生成记录核验;待两站已登录工具箱 UI、积分扣退和多素材视觉验收。旧 Scheduler 同名接口与 LTX 历史模型仍保留。

  • 工具箱文档已把 Canvas 内部调用与 Partner 服务端调用拆成两个独立入口:Proxy 使用 /api/proxy/v1、登录 Cookie 与 X-IC-Operation-ID;Partner 使用 /api/partner/v1、Bearer API Key 与 Idempotency-Key。

  • 文档导航新增独立“Partner API”标签,下面只分“图片 API”和“视频 API”;旧 Partner URL 保留迁移提示,既有书签仍可访问。

  • “图片类”和“视频类”已移入独立“Proxy Base URL(画布内部)”父菜单,与 Partner API 保持同级;旧 Proxy Base URL 继续保留迁移入口。

  • Partner 业务能力现为 8 个:图片换脸、图片脱衣、姿势切换、BFS 换头,以及视频换脸、视频脱衣、视频换人、图生视频(视频姿势);任务查询、下载和取消不重复计数。

  • 图片、视频的创建、查询、内容下载和中间产物路由均提供逐项对照,避免把 Canvas 会话接口与对外 Partner API 混用。

  • 待确认:公开文档站目录、站内链接、桌面端与移动端表格阅读体验。

  • 平台设置新增 Skill 保留期面板,支持加载、保存、清空及冲突后重新读取,保存不启动归档。客户端 2 项测试/6 次断言、类型检查及候选镜像构建通过;真实浏览器桌面保存、390px 冲突恢复/清空和无面板横向溢出通过(1 项、2.5 秒),策略 API 使用受控响应替身,未修改生产策略。首次移动复验发现 loading 图标改变按钮辅助名称,已加稳定 aria-label、保留精确名称断言和限时回归后通过,独立复审通过。QA 服务已停止;故障诊断沉淀至协作 Skill,尚未部署生产。

  • 管理员归档策略后端已实现:GET/PUT 先 requireAdmin,保留天数 1–36500 或 null(默认未配置),4 KiB 严格请求校验,修订号 CAS 防并发覆盖,记录更新账户和时间。3 项接口测试/13 次断言、类型检查与实际 PG 首次并发 CAS、清空配置通过;真实归档/恢复联验同时通过,独立审查通过。保存策略不触发任务,CLI 仍要求显式 cutoff;管理员 UI 与策略预览衔接尚待完成,未部署。

  • Skill 单版本维护 CLI 已接入:默认只读预览,显式用户/Skill/版本,归档要求明确 cutoff,只有 --apply 执行;不开放通配、批量或自动任务。参数 2 项测试/9 次断言和类型检查通过;真实 CLI 子进程→PG→HTTP→OSS 的预览无定位写入、归档释放与回填恢复通过,独立审查通过,测试对象/服务已清理。管理员页面、保留期配置与批处理负载仍待完成,未部署生产。

  • 内容依赖索引双向并发已用实际 PostgreSQL 触发器验证:维护锁持有时画布保存超时且原文不变;画布保存持锁时维护等待超时,提交后资格查询确认引用阻止归档。通过 pg_locks 观察实际锁,不以 sleep 推断持锁。原执行引用并发和回滚锁矩阵同时通过,脚本退出 0、隔离 schema 与 QA 服务清理完成;业务负载/延迟仍未验收。

  • Skill 内容依赖索引已实现:画布/撤销/消息/当前与历史 Skill 保存同事务刷新,冷快照保留嵌套依赖,登记和释放检查该索引。真实 PG 专项矩阵验证回填、源键更新、事务回滚、重复迁移、冷依赖保留、源删除及 malformed 排除通过;真实服务/HTTP/OSS 冷周期补验未执行工作流引用阻止登记并通过全流程。初版测试 pg_temp 函数查找失败已改隔离函数 schema 并复验;维护入口仍未开放,依赖保存与释放的实际并发/延迟尚待验证。

  • 冷归档引用核查发现执行引用表未覆盖尚未执行的工作流来源。新增只读结构引用审计,实际隔离 PG 验证画布、撤销历史、Agent 消息、嵌套历史 Skill、UUID 大小写与版本精确匹配通过;不扫描或输出提示词内容,不作为释放授权。维护入口继续关闭,需补齐持久依赖索引及并发保护。

  • Skill 真正冷快照周期已实现并实测:释放前验证 OSS、期限和执行引用;数据库仅清空 snapshot,保留版本身份、原 JSONB 摘要及定位。冷历史/执行引用仍可读取,回填必须匹配原内容摘要,冷定位禁止改删。真实 Web 服务/PG/Proxy HTTP/OSS 验证释放、冷读取、篡改回填拒绝、OSS 回填、引用后拒绝释放及恢复后迁移回滚通过;7 项单测/27 次断言与类型检查通过。审查发现的 locations 回滚竞态已加版本表排他锁修复,实际 PG 验证并发释放被阻止且原快照不变,复审通过。测试对象及隔离服务已清理;仍未开放维护入口或部署生产。

  • Skill 已支持恢复保留的热副本读取:授权并验证归档后,事务内核对原快照与定位摘要一致,仅移除定位记录,不删 OSS 或执行引用。真实 Web 服务/PG/Proxy HTTP/OSS 恢复、重复恢复、跨用户拒绝及执行引用读取通过,测试对象清理成功;恢复和登记 7 项单测/27 次断言、类型检查及独立审查通过。原登记测试缺少新增导出替身已修复后复验。本项不是从已清空快照恢复,热快照释放仍待实现。

  • Skill 完整归档登记与读取链路已真实联验:Web 服务代码→隔离 PostgreSQL→Proxy HTTP→同区内网 OSS,无业务服务替身;首次登记、重复幂等、非所属拒绝、执行引用历史读取、引用后不再登记、原热快照保留均通过。仓库脚本重跑同样退出 0,临时 schema、精确测试对象、临时凭据及测试服务均已清理。独立审查通过;尚未实现热快照释放/恢复迁移及维护入口,未部署生产。

  • Skill 归档真实 OSS canary 已通过:ecs110 隔离只读容器、同区内网端点、单个随机中性对象,实际 Proxy handler/SDK 首次创建、重复提交、字节与摘要回读均成功;finally 删除测试对象并确认不存在,退出 0。未写数据库、未启动生产服务;仍需 Web 登记服务→数据库→Proxy HTTP→OSS 的完整联合验收。

  • Skill 归档引用锁已补真实 PostgreSQL 并发验证:从服务提取实际资格 SQL/LOCK,独立随机 schema 中确认上传期间新增引用使资格失效、通过 pg_locks 确认持锁后并发 INSERT 超时、释放锁后引用成功且重查不可归档。脚本退出 0、独立审查通过,临时 schema 与 QA PG 已清理/停止;此验证不涵盖完整登记服务与真实 OSS 联合调用。

  • Skill 冷归档定位登记服务已实现:先上传并验证,短事务内锁执行引用表、重查期限/版本/引用及摘要后登记;已有相同定位幂等返回,不一致回滚,任何分支均保留热快照。ecs110 4 项事务顺序/失败/幂等替身测试、16 次断言与类型检查通过,独立审查通过。实际 PG 并发与 OSS 联合验收仍待完成,未开放维护入口、未部署。

  • Skill 历史版本/执行引用读取已接入归档定位表:授权查询成功后读取并验证对象,无定位记录保持原热快照读取;损坏或不可达不静默回退。新增平台迁移与 rollback,实际隔离 PG 验证重复迁移、外键、大小/摘要约束及回滚保留快照通过;服务读取 4 项测试/16 次断言与类型检查通过。尚无自动归档登记、未清除热快照、未实测 OSS、未部署生产。

  • Web 服务端归档传输模块已接通私有 GET/PUT 协议:强凭据、禁止重定向、60 秒请求超时、流式响应限额,上传收据匹配后再独立回读并核对摘要与版本身份。ecs110 归档编码/传输 7 项测试、34 次断言与 TypeScript 检查通过;网络为替身,未访问真实 OSS。模块尚待接入数据库历史版本读取和冷归档事务,未部署生产。

  • Skill 私有归档增加 PUT:校验摘要与版本身份、禁止覆盖、回读实际字节一致后返回收据。ecs110 只读/禁网 Proxy 容器中读写与媒体存储共 21 项测试通过,独立审查通过;测试桩 SDK 异常构造错误已修复后复验。未访问真实 OSS、未清除数据库快照、未接入历史读取,未部署生产。

画布改进清单:调度信息收口与 API 输入前置校验

  • 画布、生图工作台和视频创作台已移除面向普通创作者的 GPU 调度状态入口;画布顶栏不再重复显示 H3 指南,指南继续保留在左上角全局菜单。
  • 图片编辑异步接口在创建任务、预留积分和进入 GPU 队列前统一校验图片数量、真实媒体类型、必填提示词和 output_sizing;BFS、换脸、换头、换人、头像裁切和超分等错误输入应直接返回 HTTP 400,不再先返回任务 ID。
  • 视频接口对非 multipart 请求统一返回 HTTP 400;视频换脸、换人、脱衣现有媒体数量校验需随本轮候选一起复验。
  • 待在隔离环境及生产候选中执行附件 API_测试结果.xlsx 的全部错误路径,并确认没有产生任务、积分预留或 GPU 排队记录。
  • 画布列表页新增与编辑器一致的全局导航;底部工具栏已合并“素材”和“流程”入口,并把“清空画布”移入更多菜单。
  • 组成员拖入、新建或移动后会自动登记归属并让组框贴合全部成员;拖动组继续携带成员,组内素材工具栏不会再被底层组框抢占。需在浏览器验证拖入、拖出、新建、批量节点、整体移动及下载/复制提示词操作。
  • 生图和视频工作台的左侧记录区已统一改为默认收起的“我的资产”;桌面端可在工作台标题区展开/收起,移动端继续通过底部抽屉快速访问,生成结果区不再与常驻历史栏重复争夺空间。
  • 共享模型选择器已确认明星模型拥有独立分组,并支持中文名、英文名、别名缩写搜索;相关共享测试 6 项通过,需在画布、生图和视频三处做浏览器一致性验收。

画布工具箱、角色上线与 Agent 稳定性

  • Canvas Agent 现在转发 Codex turn/plan/updated 结构化计划,并在历史读取时恢复最近计划;画布 Agent 输入区上方固定显示可折叠“任务进度”卡,逐项展示待处理、进行中、已完成以及失败/中断状态。需用真实 Codex 对包含多个步骤的请求验证实时更新、完成后保留、刷新恢复、折叠交互与跨画布隔离。

  • Codex 历史 thread 或 rollout 被清理时,Canvas Agent 仅针对明确的失效错误自动创建一次新会话并继续原请求;额度、MCP、模型与 turn 执行错误保持原样且不会重复副作用。需验证删除本地 Codex 历史后发送可自动恢复,同时普通失败只产生一次请求。

  • 本机 Agent 手动上传的图片和视频分镜现在会生成最长边 256px、单张最多 64KiB 的本地历史缩略图,按当前用户、画布、模型和 session 有界保存;服务端历史请求不包含 base64、Blob URL 或签名 URL,刷新后按消息锚点恢复预览,选择旧提示词时不会把仅展示缩略图重新发送给模型。需验证图片、视频、六附件、刷新、历史切换、删除会话和跨账户隔离。

  • 画布底部工具栏新增“图片工具箱”和“视频工具箱”,会根据当前选中的有效图片即时提示输入数量,并创建带提示词、模型、参考图连线的标准 Config 流程;图片首期覆盖头像裁切、图片脱衣、BFS 换头/换身体、经典换脸、Krea2 单/双阶段换人和 SeedVR2 超分,视频首期覆盖 MiniMax H3 首帧/首尾帧/尾帧/多参考与视频换人。

  • “直播编排”入口统一改为“一键上线角色”,复用现有角色素材槽位、预检、不可变 release、发布和回滚链;画布助手的内置 Skill 同时增加“一键上线直播角色”,先检查主图、Preview、Loop、Gift、Action 与 BGM,再引导进入发布预检。

  • OpenCode Spicy 从 host network 改为 Compose 私有网络,由 Web 通过 opencode-spicy:17372 访问;访问宿主机 vps66 Ollama 隧道改走 host.docker.internal:19201。这会避免隔离验证与生产容器同时启动时争抢宿主机 17372,导致 Agent 反复重启。需在 ecs110 隔离环境验证 Web BFF 健康、SSE/对话、画布工具调用及 vps66 模型调用,再按生产 SHA 窄部署。

  • 视频创作台切换页面再返回时,会立即从持久化生成日志恢复所有运行中任务及其 BFS/组合接口中间图;轮询租约暂由其他页面持有时也继续展示已有中间结果。中间图优先使用当前页面的 Blob,刷新后改走 1024px CDN 缩略图,不再通过 download=1 绕开 CDN 下载原图。需验证切换生图/视频工作台、刷新、双标签页租约竞争时中间图持续可见,并对比中间图首屏加载耗时与原始文件请求大小。

  • 视频创作台参考视频上传现在会按 .mp4 / .mov 扩展名识别浏览器未提供 MIME 或仅提供 application/octet-stream 的文件,并在上传前补全正确媒体类型;格式不匹配时会显示明确提示,不再点击选择后静默无响应。需验证 macOS 导出的 MP4、MOV 以及正常带 MIME 的视频均可上传到 OSS、显示预览并进入生成请求。

图片节点重新生成入口

  • 成功图片节点画面上方不再显示“重新生成”浮层;重新生成改为图片节点下方编辑面板中积分生成按钮旁的独立 reload 图标按钮,并继续复用节点保存的模型、提示词、尺寸、参考图与生成参数。生成进行中按钮禁用,视频和音频节点原有入口保持不变。需验证普通图片、批量图片、编辑图片、刷新恢复图片、生成中与明暗主题下的按钮位置及重新生成结果。

提示词库反向生成

  • 提示词库页头新增“反向生成”入口,复用画布 Agent 的“反推图片提示词”“反推视频提示词”预设及同一套媒体分析规则;支持上传 JPG、PNG、WebP、GIF 图片或常见视频文件。图片按可见画面分析,视频在浏览器本地抽取带时间戳的 8 帧分镜后分析,不发送整段视频和音轨。生成结果可编辑、复制并以文本素材保存到“我的素材”,同时保留媒体类型、原文件名和分析预设。需验证明暗主题、图片/视频格式与大小限制、视频首尾帧覆盖、生成失败提示、结果编辑复制及刷新后素材持久化。

生产版本清单、Docker 安全回收与核心文件拆分

  • 新增版本化 deploy/production-manifest.json,明确 Web、Proxy、Media Worker、VDE、Scheduler、DramaClaw、数据库和 Redis 当前镜像与源码 SHA;canonical Compose image overlay 由 manifest 机械生成,后续单服务发布不再继续叠加历史发布 overlay。需在 ecs110 隔离目录验证 manifest/overlay 一致性、Compose config、逐服务镜像选择和回滚镜像恢复。
  • 新增只读优先的 Docker 资产审计与回收工具;默认不产生停止容器候选,保护项目不能进入候选,volume/network 永远只报告。实际执行必须使用已审核计划文件的 SHA-256 确认值,并按构建缓存、停止容器、镜像三个阶段分开执行。需用 fixture 和 ecs110 真实 dry-run 确认当前容器、回滚镜像、xshow.live 与 xcamshow 相关项目全部受保护。
  • 画布客户端继续拆出刷新骨架、连接建节点菜单、生成配置,以及媒体批处理组装、任务恢复、重试来源和角度提示词等运行期纯逻辑;Proxy 拆出 OSS 名称、稳定签名、供应商可访问 URL,以及浏览器可见任务算力元数据的白名单、脱敏和默认值策略。原入口保留兼容包装,运行时配置显式传入新模块。需执行 Web typecheck/测试、Proxy 测试和生产主要生成链路回归,确认无行为变化。

SCAIL-2 视频换人重复提交与刷新恢复

  • 视频创作台和画布现在按提示词、seed、参考图及源视频生成稳定请求身份;同页、跨标签页和刷新后的相同输入复用原任务,不再重复创建上游任务。Web BFF 按计费用户隔离请求根,并用 PostgreSQL advisory lock 串行化预扣、提交和任务绑定;上游响应或数据库结果不确定时保持 unknown 预扣并用同一请求链恢复,避免误释放或重复扣费。画布会在调用 API 前先把不可变输入快照写入 IndexedDB,刷新后仅使用该快照恢复。需在生产分别验证快速双击、两个标签页并发、提交后断网、Web/Proxy 重启、任务绑定失败、刷新恢复、明确取消以及重新生成新任务。

  • Krea2 图片编辑遇到全黑、全透明、近似纯色或局部黑块退化结果时自动更换 seed 重跑一次;第二次仍失败则图片工作台和画布展示服务端原始原因。管理后台新增“错误与 FAQ”,从 PostgreSQL 动态统计累计、近 7 天和近 30 天错误,展示错误码、模型、原因、解决方案及网站功能 FAQ;页面和 API 均仅管理员可访问。需在隔离环境覆盖首轮失败后成功、连续失败、错误 envelope、管理员访问和普通用户 404/403,并确认单次用户请求只结算一次。

FLUX.2 Klein 9B 三图参考工作流

  • 默认图片模型目录新增 flux2-klein-9b,画布和生图工作台均按图片编辑模式要求恰好 3 张有序参考图;模型、输入顺序、提示词和单张输出继续进入现有异步任务、计费、OSS、生成记录、刷新与重试链路。
  • Proxy 把三张图片依次映射为 Scheduler /v1/flux2-klein 的 image1、image2、image3,少于或多于 3 张在提交前返回明确错误;公开模型发现和 GPU 工作负载使用稳定 ID/中文名称,不暴露模型文件路径。
  • Scheduler 权威工作流改用已部署的 flux-2-klein-9b-fp8.safetensors、qwen_3_8b_fp8mixed.safetensors 和 full_encoder_small_decoder.safetensors;API 执行时旁路空 LoRA Manager,保持三路参考 latent、4 步采样和 PNG 输出。生产验收需核对 8 张卡能力为 ready、三图真实生成、输出解码、任务计费、刷新恢复和回滚。

任务型创作入口、图片快捷编辑与统一任务中心

  • 画布底部工具栏新增“任务型创作”,提供“做一条短视频、做一组直播角色素材、根据参考图生成连续镜头、修改一张图、把脚本变成分镜和成片”五个入口;选择后只铺设完成目标所需的最小节点与连线,不会自动提交付费生成,并沿用当前图片、视频模型配置。

  • 图片节点悬浮工具栏把“局部重绘 / 擦除、去背景、扩图 / 改比例、放大、AI 超分、换背景、主体分层”提升为默认一级动作。局部重绘 / 擦除继续使用已有蒙版编辑器;去背景、扩图、换背景和分层会创建带原图引用及明确默认提示词的图片编辑配置,用户确认模型、比例和提示词后再生成。

  • 画布新增统一任务中心,聚合节点的生成尝试历史,区分提交/排队、生成/持久化、完成、失败、取消和中断;展示模型、模式、任务 ID、输入、保存参数、结算说明、输出持久化状态、已用时间,以及同模型成功样本推算的预计耗时。

  • 任务中心支持失败重试、换模型/参数后重试、批量失败项单项补跑、失败节点定位和进行中任务取消。图片与视频已有上游任务 ID 时会同时调用 Proxy 服务端取消端点;上游明确不支持取消时只停止当前页面等待,并显示真实原因。

  • 新增确定性单元测试覆盖五类模板连线、模型参数继承、任务排序/耗时估算和图片快捷动作默认集合;新增 Playwright 用例验证从任务入口铺设“修改一张图”工作流并进入任务中心。

  • 修复任务型工作流一次创建多个节点时,协同 outbox 将“新增节点”与紧随其后的本地字段更新错误合并成单独 patch,导致服务端误报“节点已被其他协作者删除”的问题;现在会把字段更新合并回完整节点 upsert,并新增回归测试。

  • ecs110 一次性隔离 PostgreSQL、Redis 与候选 Web 中,数据库迁移、候选镜像构建和新增 Playwright 用例已经通过;验证后临时容器与网络均已清理。生产边缘对 /api/auth/session 与 /api/storage/canvas 已返回 private/no-store、cdn-cache-control: no-store、surrogate-control: no-store 和 Vary: Cookie,动态 CDN 缓存项从 TODO 收口。

  • 生产 Proxy 的图片、视频取消路由和 8020 Scheduler 取消路由均已通过不存在任务 ID 的无副作用 404 探测;模型目录主动刷新显示 krea2、krea2-edit、krea2-v21-edit、krea2-v21-multi-edit、comfy-qwen-edit、qwen-image-edit-max 与 comfy-faceswap 当前可用。真实效果输入/输出验收仍按 TODO 中的模型可用性验收项继续执行。

  • Krea2 图片编辑遇到全黑、全透明、近似纯色或局部黑块退化结果时会自动更换 seed 重跑一次;第二次仍失败则图片工作台失败卡片、toast、生成记录及画布节点展示服务端原始原因(例如“图片编辑结果为全黑图片,请重试”),不再退化为笼统“生图失败”。管理后台新增“错误与 FAQ”,从 PostgreSQL 动态统计累计、近 7 天和近 30 天错误,展示错误码、模型、原因、解决方案及网站功能 FAQ;页面和 API 均仅管理员可访问。需在隔离环境覆盖首轮全黑后成功、连续两轮全黑、结构化 error、历史 detail envelope、刷新恢复、管理员访问和普通用户 404/403,并确认单次用户请求只结算一次。

生图工作台历史任务终态恢复

  • Proxy 重启导致内存任务映射丢失时,图片轮询若已在 PostgreSQL 核对为失败并释放预扣,Web BFF 会返回持久化的真实失败结果,不再把上游 404 当作可无限重连的临时中断。需验证失败任务跨 Proxy/Web 重启后自动结束、显示供应商错误且不重复扣费,同时确认无归属任务仍返回 404。

画布一键上线直播角色

  • 画布工具栏新增“一键上线直播角色”发布流程:仅项目 owner/editor 可选取预览图、共享首尾边界帧、循环/打字/动作/礼物视频与可选 BGM,填写角色资料后创建或更新 demo.xshow.live 角色;发布会冻结素材哈希和 manifest,使用 PostgreSQL outbox 可靠投递,并在对话框中展示 processing/active/failed/rolled_back 状态、目标角色、演示地址、失败重试和版本回滚。目标端会把普通 Canvas MP4 自动规范化为 720×1280 / H.264 / yuv420p / 30fps / 无音轨 / fast-start,真实首尾画面仍须与 boundary 匹配。
  • 大媒体改为 reservation 约束的不可变 OSS 流式直传;同一逻辑 storageKey 的每次 ticket 使用独立物理 key,重复/并发上传不能覆盖已写对象,丢失 finalize 响应可幂等重试,逾期未提交对象由独立清理 worker 回收。需在隔离环境验证 512 MiB 边界、响应丢失、不同字节并发重放、租约最后一刻开始上传与 cleanup 竞态。
  • 上线验收需覆盖 create→active→demo 页面自然边界生效、update 热切换、失败重试、首次创建回滚软删除、更新回滚恢复上一版本、重复 webhook 幂等、两个同名角色仍按 character_id 独立,以及生产 canary 对 webhook HMAC、manifest/asset read token、状态 token 和目标端 OSS 内网落盘的完整闭环。

Identity 姿势模板单人物修复

  • krea2-i1.2-edit 不再回退到容易重新构图并复制主体的普通 Krea2 编辑工作流,恢复使用 Identity v1.2 专用 LoRA,并加入多人、克隆人物、拼图等负向约束。当前 ComfyUI 中会把人脸覆盖成黑色的末级 FaceDetailer 已从输出链路旁路,直接保存完成身份姿势编辑和放大的上一阶段结果。隔离环境已用同一张单人参考图真实生成自然坐姿,结果为单人物且人脸正常;需在生图工作台验证六种姿势、不同长宽比、批量生成和刷新恢复结果。

生图结果加入参考图

  • 生图工作台的“加入参考图”优先复用生成结果已经持久化的 storageKey,不再把展示 URL 重新下载并重复上传;旧结果缺少持久键时仍保留上传兜底,读取或上传失败会显示明确错误。需分别验证刚生成结果、刷新恢复的历史结果、旧格式结果、单参考图上限和点击后自动进入图片编辑模型。

  • Skill 广场“角色”分类新增完整全身定妆照、面部特写与全身三视图、九宫格表情与全身三视图、三行角色设定表四个独立 Skill,卡片分别展示所需输入、比例与用途,并可从画布/助手筛选进入画布使用。需验证四张卡片的搜索、分类、表面筛选、深浅主题和跳转。

  • 视频创作台提交任务后立即插入等待卡片并显示“正在提交”,提交完成后明确提示任务已进入自动刷新;提交请求返回前按钮保持 loading,重复点击不会再创建一批重复任务。结果区增加手动“刷新状态”,跨标签页/后台任务同步周期从 30 秒缩短到 10 秒,等待卡片直接显示等待调度或 GPU 运行中及已分配算力信息。需快速连续点击生成按钮、切换标签页和手动刷新,确认只产生一次提交且状态持续变化。

  • 生图与视频创作台的历史卡片为成功记录补充“完成 月/日 时:分”,为失败和已取消记录补充“结束 月/日 时:分”;优先使用最后一个有效生成尝试的 finishedAt,旧记录按 createdAt + durationMs、有效 updatedAt 或创建时间回填,生成中显示开始时间与实时耗时。需验证新任务、失败后重试、取消、旧记录、刷新恢复及窄屏卡片,确认最后一次实际完成时刻不会被后续同步时间覆盖。

  • GPU 调度器状态按实际 ComfyUI 端口 8188–8195 固定排序并显示为 GPU 0–7;资源卡标题、内部实例名称和管理员“查看 ComfyUI”入口使用同一映射,不再受 Scheduler 返回顺序或错位实例标签影响。普通用户既不显示按钮,也不能读取 /api/admin/comfy-links 返回的内部入口。需分别用管理员和普通账号验证 8 张卡顺序与编号、GPU 0/1/2 的画布锚点、GPU 3–7 实例首页及接口 401/403。

Voxora AI 主播创作平台品牌主题

  • 全站按 docs/design.md 重构为浅色优先的“AI 影像编辑部”:暖纸背景、墨色主操作、朱红场记线和蓝色处理状态替代原深色紫色控制台;Tailwind、Ant Design、管理后台与画布节点共享同一组明暗令牌,默认明暗主题改为浅色。

  • 首页采用影视刊物式非对称封面、抽象主播概念画、五段制作流程和杂志目录式工作台入口;不再展示假直播进度、FPS 或波形。登录页、64px 桌面顶栏、编号式移动目录和账户菜单同步为细线、小圆角的编辑部层级。

  • Logo 更新为墨色 O 字、朱红录制点与蓝色套准标记,并同步浏览器图标;显式紫色 Tag、图像/视频技能选中态和画布音频标识统一替换为品牌蓝或朱红。

  • 管理后台“平台设置”继续支持 Voxora 与经典无限画布切换并持久化到 PostgreSQL app_state;切换会同步外壳、品牌文案、登录页、Ant Design 和画布配色。需验证首次访问为浅色、已保存暗色、损坏本地主题缓存、首页与登录、图片、视频、剧情、角色、素材、提示词、管理后台和画布,以及 Voxora/经典主题在桌面与移动端来回切换。

  • Muse V3.5 工作流检测到 image_output_local_black_collapse 时自动使用新 seed 重跑一次;两次均退化时继续保留明确错误,不放行坏图。需分别以单图默认占位参考和显式双图复测首轮退化后成功、连续两次退化失败两条路径;单图模式确认图2保持来源工作流的中性占位图,双图模式确认第二参考分支被独立上传覆盖,并确认生成记录只结算一次用户请求。

  • 版本更新弹窗同时解析当前 Markdown - [类型] 与历史 + [类型] 记录;v0.11 生产线与 Skill showcase / GPU API 文档线已合并,需确认顶部当前版本、最新标签、70 个 showcase 和 GPU API 入口同时存在。

  • 后端文档新增独立《GPU API》,覆盖浏览器 BFF、Proxy、GPU 状态/能力矩阵及 18 份可下载的 ComfyUI 原始工作流画布;画布主菜单和管理后台 GPU 调度页均提供直达入口。

  • Skill 广场新增 50 个 GirlsLike 女明星 Skill、7 个 Krea2 姿势 LoRA Skill及全部 70 个生图 Skill 的真实输入/输出 showcase。

Skill 广场明星分类

  • Skill 广场分类栏新增“明星”,50 个 GirlsLike Krea2 明星 Skills 统一归入该分类,并继续支持“全部来源/内置”“生图”和关键词联合筛选。需验证明暗主题、窄屏横向滚动、直接访问 category=明星、明星卡片跳转图片工作台及个人 Skill 创建时选择明星分类。

Muse V3.5 一键脱衣效果对齐

  • 一键脱衣按用户提供的 API JSON 更换为 krea2_turbo_fp8_scaled + KNPV4.1_pre(1.0) + identity_edit_v1_2(1.0),保留唯一 KSampler 193:178 → VAEUtils Decode 193:300 → SaveImage 186 输出;API 打包图裁掉重复保存、预览和未接入最终分支的风格识别节点。
  • 固定正向提示词改为严格局部编辑:只重建服装、内衣、肩带、鞋袜及残留物原覆盖区域,明确保持身份、脸、表情、妆容、发型、体型、姿势、手脚、遮挡、主体位置、镜头、裁切、背景、光线、色彩和原有裸露皮肤不变。前端展示文本与 Scheduler 权威节点逐字同步。
  • 画布当前图固定作为图片1,并会把连接或提及的一张不同图片按顺序作为可选图片2;重复引用会去重,第三张由现有模型限制明确拦截。省略图片2时 Scheduler 不再复制图片1,而是保留来源工作流自带的中性占位参考。
  • 需以相同目标图、seed 与尺寸验证新旧提示词的脸、发型、姿势、手、构图、背景及光照漂移,并复测单图占位、显式双图、图片顺序、重复图片、0 图、3 图及损坏文件;同时记录 API 总耗时、GPU 执行时间、逐卡显存与输出解码校验。

GPU 能力持续探测

  • Scheduler 后台每 3 分钟并行刷新全部 ComfyUI 节点、模型资产与运行时信息;ComfyUI 从失败恢复或工作流文件发生变化时立即触发,失败后按 10、30、60 秒退避重试。能力接口返回最近成功、最近尝试、失败原因和下一次探测时间。
  • GPU 状态面板将“能力旧探测”改为“能力信息待更新”,展示上次成功相对时间、精确时间、最近尝试及脱敏失败原因。需验证正常周期刷新、ComfyUI 重启、工作流替换、模型清单变化、连续失败重试和恢复后清除告警。

MiniMax H3 8 GPU 自动调度

  • GirlsLike Krea2 与 MiniMax H3 的文生、首帧、首尾帧、尾帧和参考工作流统一路由到生产拓扑的 vps66:8188–8195,覆盖遗留的 GPU 1/GPU 2 单卡启动路由,并继续通过能力、显存、占用、队列与失败退避门禁自动选卡。生产能力接口已确认六个 Scheduler 端点均为 8/8 ready;仍需并发提交各入口,确认任务可分散到 8 张卡,忙卡自动绕行,故障卡摘除后恢复加入。
  • 旧画布节点持久化的 minimax-h3-i2v 会在配置恢复、请求构建和计费入口统一迁移为 minimax-h3;需重试请求 canvas-YT5etdytdTGWenHrFB3us 的同类首帧生成,确认请求包含规范 model、单输出和 5–15 秒时长,且可创建并完成 Scheduler 任务。
  • 画布配置节点和提示词节点在异步积分报价返回前显示省略状态,不再把本地渠道旧价格兜底为 0;krea2-identity-edit 已加入图片编辑计费目录。需逐项选择 GPU 生图、编辑和视频模型,确认报价按生产通配规则显示,编辑模型在满足参考图数量后不再长期停留于 0。

MiniMax H3 提示词中文指南

  • 我的画布顶部新增 H3 指南 入口,画布菜单也保留 MiniMax H3 中文指南;点击后在当前画布内打开中文说明,不跳离编辑器。视频创作台在选中 MiniMax H3 普通或首尾帧工作流时,会在提示词标题旁显示同一入口。
  • 指南依据 MiniMax 官方 VIDEO_PROMPT_WRITING_GUIDE_base_en.md 整理,覆盖 T2VA / I2VA / FL2VA / L2VA、三个核心字段、关键帧连续路径、切镜与摄影机术语、发声者/对白/画面文字、整体声景、画外配乐、四个案例的中文解读、可复制英文骨架和提交前检查;字段、token、时间格式及原始台词保持官方要求。
  • MiniMax H3 参数面板按精确模型区分普通文生/首帧模式与首尾帧模式,后者明确要求第 1 张首帧、第 2 张尾帧,不再显示“可选 1 张首帧”的冲突说明。需验证画布和视频创作台的明暗主题、窄屏滚动、四个标签页、模式切换、复制按钮、官方原文链接,以及普通 H3 / FL2V 的当前工作流提示。

SCAIL-2 附件同源工作流恢复

  • 当前候选恢复附件导出的 70 节点、119 连线 API 工作流,原始工作流 SHA-256 为 80b224cbafb38fa264983568b13976b5c186a1bb1fb086aca14438f18b2c3bdd。内部竖屏生成固定为 512×896;Resize Image v2 的原始参考图直接进入 CLIP Vision 与 WanSCAILToVideo.reference_image,不再经过此前候选的双重模糊背景分支。此前 704×1248、双重模糊参考图候选的单样本观察只属于已撤回候选,不能作为当前工作流的效果结论。
  • 固定目标图、源视频、98 词 prompt 和 seed 的同 GPU A/B 已完成:附件同源 A 为 512×896、热缓存执行 297.631s,当时线上 B 为 704×1248、冷执行 725.375s,两侧都完整保留 415 帧、30fps、13.833333s 和 AAC 音频并通过全解码。A 在这组素材中更明显带入目标参考图背景,B 的源场景 SSIM 更高;这证明线上与附件的图确实导致不同输出,不代替对人物身份、衣物、边缘和参考背景影响的多素材人工验收。

SCAIL-2 视频换人

  • 从隔离 GPU 实例的 wan21_scail-2_loop 导出并固定 API 工作流,Scheduler 新增 POST /v1/scail2-person-swap,精确绑定目标人物图、源视频、提示词、随机种子和输出前缀;能力探测会核对 SCAIL-2、SAM3、Mie Loop、VHS 及所需模型资产。
  • SCAIL-2 不再调用 qwen3.7-plus 把中文、替换式或短提示扩写成 90–140 词英文描述,视频创作台与 Proxy 均将用户提示词原样传给 Scheduler;空提示使用附件默认值 the woman is dancing。需分别提交中文短句、英文短句、空提示和较长提示,核对 Scheduler 实际图中的正向提示词与请求完全一致,空值只落默认短句且没有额外多模态分析请求。
  • SCAIL-2 参数面板不展示实际推理未采用的清晰度、尺寸、秒数和帧率选项,固定说明内部 512×896、单结果以及生成时长、源帧率和原音频跟随源视频;历史卡片显示实际输出尺寸和源视频时长。随机种子空值默认 77,显式 seed 继续真实传到 Proxy/Scheduler;计费 seconds 固定按既有 15 秒预留,不从源视频时长推导,请求也不发送无效的 resolution_name / preset。需验证空 seed 与显式 77 生成图一致、显式其他 seed 被保留、不同长度源视频仍按 15 秒预留,并核对页面报价、成片尺寸、时长、帧率和音频。
  • 模型选择器将 scail2-person-swap 归入“GPU 算力模型”,触发器显示 GPU 标识,执行渠道显示“GPU 调度器 · ComfyUI”,不再显示 API Key 标识。
  • 视频创作台标签页从后台恢复或窗口重新聚焦时立即续查任务;Scheduler 返回排队与 GPU 运行指标后,成功记录优先显示真实 GPU 耗时,不再把浏览器后台挂起时间计入生成耗时。需验证后台放置后返回页面能立即取回已完成结果,并核对耗时与 GPU 指标一致。
  • SCAIL-2 的文档 JSON、SVG 与 manifest 已按附件同源候选重新生成,70 节点、119 连线、512×896、原始参考图直连、默认 prompt 与 seed 均已机械核对;单组真实 GPU A/B 与 200ms 显存采样也已完成。仍需用不同人物、衣物、背景与快速动作继续验收身份、参考图背景影响、源场景与边缘,不把单样本解码成功写成泛化效果结论。
  • SCAIL-2 路由会自动收集生产拓扑中 vps66:8188–8195 的 8 个独立 GPU 实例,并继续经过工作流能力、空闲显存、GPU 占用、队列和故障退避门禁选择执行卡。需并发提交至少 8 个短任务,确认任务分散到 8 张卡、单卡忙时自动选其他卡,实例故障时自动摘除且恢复后重新加入。
  • 画布视频节点和视频创作台新增 SCAIL-2 视频换人 模型;必须连接或上传 1 张目标人物图和 1 个 MP4/MOV 源视频,其他数量或音频输入会在提交前提示。需在隔离 GPU 实例用短视频验证人物身份替换、动作跟随、长视频分段衔接、源帧率/音频保留、任务轮询、结果入库和刷新恢复。

编辑者分享按钮与邀请权限

  • 共享画布右上角的“分享”按钮对所有者和编辑者显示,查看者仍保持只读;编辑者可创建编辑或查看邀请,并只查看、撤销自己创建且尚未使用的邀请,所有者继续查看和管理全部邀请。
  • 共享弹窗对编辑者以只读标签展示成员角色,不提供角色切换和移除入口;成员权限调整及移除仍只由所有者执行。需用 owner/editor/viewer 三个账号验证按钮可见性、邀请领取、编辑者之间互不暴露邀请记录、编辑者撤销自己的邀请,以及成员管理边界。

Qwen3.8 27B RunPod 模型下线

  • 画布网站 Agent 与本机 Agent 的模型选择器均移除 Qwen3.8 27B Uncensored · RunPod,保留 Huihui Qwen3.8 27B、Qwen 3.8 Max、Qwen 3.7、GLM 与 DeepSeek 等现有模型。
  • 浏览器里保存的 runpod-ollama/orcarouter/Qwen3.8-27B-Uncensored、缺少 tag 的旧值及 canonical 值会迁移到 qwen3.8-max;OpenCode Spicy 服务模型目录不再返回该模型,旧客户端提交返回 unsupported model,Canvas Agent 或启动器手工指定旧值时在启动前显示明确下线提示。
  • 生产 Compose 与启动器移除 RUNPOD_OLLAMA_BASE_URL 和 RunPod Ollama provider;历史对话数据原样保留在旧模型键,不迁入 qwen3.8-max 会话,也不会把旧模型恢复成可选或可执行状态。需验证两个画布 Agent 下拉框、旧 localStorage 刷新迁移、服务 /v1/models、旧 ID 请求拒绝及其他模型正常调用。

视频结果持久化与失败任务定位

  • 本地 Proxy 视频完成后,浏览器只把外层视频任务 ID 和可选画布 ID 交给同源媒体接口;Web 校验当前用户或共享画布 owner/editor 权限及计费任务归属后,再从内部 Proxy /videos/{taskId}/content 流式写入 OSS。Scheduler 的内部 HTTP 结果地址不再进入公网远程 URL 白名单,需用 MiniMax H3 普通生成和刷新恢复各完成一次,确认不会再出现“远程媒体持久化失败 (400)”,视频节点可播放且 media_objects 已落库。
  • 内部任务视频入库前必须为已结算 reservation,返回完整 HTTP 200,声明长度与实际流一致,且通过 MP4 ftyp 或 WebM EBML 签名校验;需覆盖伪视频、截断流、非预期 206,以及初始地址/重定向指向回环、私网、link-local 或云元数据地址的拒绝用例;Comfy 候选及重定向只能保持与 COMFY8020_URL 同源。
  • 图片、视频、文本、音频和媒体批处理失败时会弹出完整定位 ID 并支持点击复制;已收到供应商任务 ID 时显示“任务 ID”,创建前后尚无供应商 ID 时回退显示当前“请求 ID”。节点错误态继续保留相同 ID,普通生成、批量、局部编辑、机位生成、重试和刷新恢复不会引用上一条尝试。
  • 生产回归需用任务 6e0f7f60d6b0451fb92b79c9e984821e 的同类 MiniMax H3 流程验证:生成完成后从 Proxy 内容路由返回真实 video/webm,媒体入库只接受归属匹配的任务;其他账号、非成员、viewer 或伪造任务 ID 均返回不可读取结果。

GirlsLike 单图编辑黑图与并发排队修复

  • Scheduler 将 GirlsLike 单图编辑从旧 DonutSampler(edit_mode) 替换为官方 Krea2EditModelPatch + KSampler;正负提示词均由 Krea2EditGroundedEncode 处理,参考图同时进入 VAE latent 与 grounded conditioning,GirlsLike、KNP 和 Identity v1.2 LoRA 仍保留在模型链上。
  • Scheduler 只把 DISPATCHING / AMBIGUOUS / RUNNING 等已派发状态视为 GPU 占用;仅记录候选 inst_id 的多个 PENDING 任务不再互相阻塞,已在同实例 3 任务回归用例中覆盖。
  • Proxy 只对 image.edit 开启严格像素校验:Comfy/base64 的全黑、全透明或近乎纯色输出在 OSS 写入前失败,错误 code 在任务持久化和轮询响应中保留;外部 URL 结果在 /content 读取时拦截,文生图仍只做可解码校验。
  • GirlsLike 文生图与单图编辑现在将用户提示词内容原样转发,并继续由服务端幂等补齐人物标签与训练 trigger;旧 girlslike_krea2_explicit_prompt 关键词拦截已移除。生产验收需用一张非黑 RGB 参考图完成 krea2-girlslike-ym 异步任务,确认包含旧拦截关键词的提示词能进入真实 Scheduler 任务且不再返回该错误;输出仍须可解码、可见像素比例大于 0、RGB 动态范围大于 2,并覆盖全黑/全透明 fixture 失败及文生图纯黑 fixture 仍通过。

视频任务映射缺失与预扣释放

  • Proxy 的视频轮询、取消和内容读取在外层任务 ID 已无法映射到供应商任务时返回稳定机器码 VIDEO_TASK_MAPPING_MISSING;前端收到该码立即显示“任务记录已过期或丢失,请重试”,普通短暂 404 仍保留原有可见性宽限。
  • Web BFF 只在任务归属校验通过且 Proxy 明确返回该机器码时释放 held/unknown 预扣,并返回任务 ID、内部操作 ID 和原始计费模型;所有权 404、供应商普通 404、网络错误及已结算任务均不得误释放。后台生成记录的自动核对也执行同一精确规则,避免历史孤儿任务永久占用积分。
  • 生成中与失败节点的模型徽标、刷新后的任务恢复轮询都优先使用不可变 generation attempt 的模型,任务 ID、模型和超时策略不会再被后来修改的节点配置错配;重试创建新 attempt 并清空旧活动任务字段。生产验收同时检查 Proxy /data 必须挂载 /home/gy/infinite-canvas-dev/data/proxy 且已有状态文件非空。

画布协作重连后的持久图片恢复

  • 协作接口返回初始快照、增量操作或 SSE 直达操作时,会保留同一 storageKey 已经解析出的本地/持久媒体地址;服务器文档中的过期 blob: 地址不再覆盖当前图片。
  • 没有可复用本地地址的图片、视频和音频节点会根据 storageKey 恢复为鉴权后的同源持久媒体接口。需验证刷新、断网后重连、点击“立即重连”和其他浏览器新增图片四条路径,确认图片持续可见且不会把地址变化提交成协作修改。

管理后台视频流式预览

  • “生成记录”中的成功视频点击“加载视频”后直接挂载带原生控件的同源播放器,并在媒体可播放前显示载入状态;列表态可直接播放,展开详情不会再先把完整视频读成浏览器 Blob。
  • 管理员结果媒体 GET 继续执行管理员鉴权并返回 private, no-store;浏览器的 Range 请求会贯穿 Web BFF、Proxy 与 GPU Scheduler,上游支持分段时保留 HTTP 206、Content-Range、Accept-Ranges 和长度信息,上游仅支持顺序流时也应边接收边播放。
  • 需用 MiniMax H3 的约 26MB WebM、W3 的约 40–60MB MP4 及一条 Seedance 视频实测首次出画面、播放、暂停、拖动、重试和展开详情,并确认未登录或非管理员读取结果仍被鉴权拦截。

画布生成任务 ID 与全链路定位

  • 画布图片、视频、文本和音频每次进入实际生成请求前都会创建以 canvas- 开头的稳定追踪 ID,并作为 X-IC-Operation-ID 进入计费、生成记录和服务端日志;异步接口返回任务 ID 后会同时保存在当前 attempt 历史中,任务成功、失败、刷新恢复或重试后均可继续定位。
  • 生成中和失败节点在状态内容内显示紧凑任务 ID,成功节点在耗时信息上方显示;长 ID 只缩短可见文本,悬停标题和点击复制始终使用完整值,点击不会触发节点拖动、双击或重试。
  • 节点详情把原有 ID 明确为“节点 ID”,每条生成尝试同时区分并可复制“任务 ID / 请求 ID”;媒体批处理、AI 批量和智能尾帧沿用已有 jobId 并在面板或节点上可见、可复制。
  • 管理后台“生成记录”同时展示并可复制上游任务 ID 与内部请求 ID,搜索框同时匹配两者;需分别以画布显示的 ID 查询图片、视频、Seedance、文本和音频记录,确认模型、提示词、状态、耗时及结果与对应节点一致。
  • 需覆盖进入请求后的创建失败、创建后轮询失败、成功结果、页面刷新恢复、失败后立即重试、批量多任务、媒体批处理和 Seedance 路径;重试提交前不得显示旧任务 ID,刷新也不得恢复上一条失败任务。

Agent 调用画布智能尾帧

  • 网站在线助手与本机 Canvas Agent 新增 canvas_extract_tail_frame(videoNodeId);调用前校验真实视频节点、已有内容和持久化 storageKey,随后复用画布现有 Media Worker ai-film-tail-v1 链路异步生成无损 PNG 图片节点,不在 OpenCode 容器内运行 ffmpeg。
  • 「伪直播连环提示词」Skill 与 Infinite Canvas 插件说明明确要求:链式生成需要尾帧时读取最新画布状态并调用该工具,待图片节点生成后再作为下一段参考。需验证在线和本机 Agent 对已完成视频调用成功、错误节点类型与未持久化视频返回明确错误,以及输出 metadata 保留 ai-film-tail-v1。

GirlsLike 模型可用性恢复

  • Proxy 的模型强制刷新会把 refresh=true 继续传给 Scheduler;批量能力响应只使用当前工作流中 routed=true 的候选判定就绪状态,真实路由不可达、未路由 GPU 正常时不得误报可用,真实路由正常时也不得被其他未路由 GPU 的冷启动状态误报为不可用。
  • 画布在 LocalForage 配置恢复完成后重新拉取默认渠道模型;模型选择器打开时,遇到 unreachable、unknown、超时或暂时不可用等瞬时状态会显示恢复提示并自动重试,成功后 50 个 GirlsLike 模型应在同一次打开中回到“明星 Krea2”分组。Key 无效、缺节点、缺模型等持续故障仍保留为不可用且不循环重试。
  • Scheduler 公共状态面板应展示 “GirlsLike Krea2 明星图像”工作负载;生产验收需确认 girlslike-krea2 仅统计实际路由 Worker,模型目录为 50/50 ready,并覆盖 Scheduler 冷启动后浏览器旧 unreachable 快照的自动恢复。

生产登录页重定向验收

  • 生产运行时验收会跟随最多 3 次登录页重定向,并只接受最终返回 HTTP 200 且仍为同源 /login(可带 cache-busting 查询串)的地址;外域跳转、非登录路径或非 200 继续失败关闭。

共享画布媒体跨账号恢复

  • 协同初始快照、轮询更新和 SSE 实时操作中的图片、视频、音频节点,只要带有持久化 storageKey,都会恢复为当前账号可鉴权访问的同源媒体地址,不再沿用资源创建者浏览器专属的 blob: 地址或过期直链。需用被分享账号打开包含大量图片和视频的画布,确认首次加载、刷新、实时新增媒体和视频拖动播放均正常,拥有者本地缓存命中行为保持不变。

50 个明星 GirlsLike Krea2 文生图与单图编辑

  • Proxy 公开 50 个稳定的 krea2-girlslike-{alias} 模型 ID;同一 ID 在零参考图时走文生图,在一张参考图时走用户指定的 Krea2 v2.1 编辑工作流。客户端覆盖服务端人物 alias、LoRA 路径、训练 trigger 或权重时返回 HTTP 400。
  • 提示词会幂等加入 human-spaced 人物标签和真实训练 trigger,例如 ym 自动成为 girlslikekrea2 for Yang Mi, 杨幂, {用户提示词};HanGaIn 等大小写文件名和特殊训练 trigger 均由白名单保留。
  • 画布和图片工作台的模型选择器新增可搜索“明星 Krea2”分组,支持中文名、英文名和缩写;模型 ID、尺寸、编辑输出模式会进入现有节点 metadata、异步任务、刷新恢复、审计与重试链路,不新增数据库字段。
  • 0 图文生图和 1 图编辑使用同一模型 ID,2 图在本地和 Proxy 均提前拒绝;批量张数按实际拆分任务汇总报价,报价未返回时不放行提交,避免默认 3 张编辑被错误报价为单请求或显示 0 积分。
  • 生产验收需先确认 Scheduler 能力矩阵只把新端点路由到具备全部 50 个 LoRA、LoRA stack 节点与官方 Krea2 Edit 节点的 Worker;再分别用 ym 完成一次 1024x1536 文生图和一次单图编辑,核对最终提示词、模型/CLIP 连接、输出可解码、刷新与重试仍保留 krea2-girlslike-ym。同时覆盖 50 项模型目录、未知 ID、路径覆盖、mask/quality 等不支持参数、0/1/2 张参考图和 32px 尺寸校验。

VDE GPU 清理显式停用契约

  • RunPod 执行容量已从当前 8-GPU 拓扑退役时,VDE API 与 Worker 必须同时清空 GPU_CLEANUP_BASE_URL、GPU_CLEANUP_TOKEN;需要 GPU 清理的创建、重试和 Worker 路径继续以 gpu_cleanup_not_configured 失败关闭,不会静默转到 CPU。
  • 生产验收只在两个 VDE 容器均处于相同停用状态、Scheduler 明确禁用 runpod:8188、video-clean 工作流本身无错误且候选列表为空时接受 explicitly_disabled;任一容器残留 URL/Token、混合启停或重新出现候选都会令验收失败。

Krea2 姿势 LoRA 文生图与单图编辑

  • 画布生图节点的“提示词库”已接入 Spicy SFW/NSFW 数据源;普通文生图与 Krea2 姿势 LoRA 零参考图读取 normal / spicy,连接一张参考图后提示词库切换到 scene_edit_sfw / scene_edit_nsfw。需分别在零参考图和单参考图状态打开提示词库,确认 NSFW 分栏、筛选、提示词回填及姿势 LoRA 生成参数均保留。
  • Proxy 新增只读姿势目录 GET /v1/krea2/poses,并在现有 POST /v1/images/generations 与 POST /v1/images/edits 中接收稳定姿势 ID 和 0–2 强度;浏览器只看到稳定 ID,GPU 文件路径只存在于服务端白名单。
  • Krea2 文生图会在基础 KNP LoRA 后串接所选姿势 LoRA;Krea2 v2.1 单图编辑会在基础模型栈后串接所选姿势 LoRA,并把主采样、融合、放大和 Differential Diffusion 的模型输入统一重连到新节点,原 CLIP 链不变。Scheduler 根据最终图中的精确资产需求自动排除缺少权重的 Worker。
  • 画布“图像设置”浮层新增可折叠的姿势引导面板,以 7 个紧凑选项和 0–2 滑杆管理姿势与强度;启用后设置按钮直接显示姿势摘要,匹配的 NSFW 图片 Skill 会自动带入推荐姿势。未连接参考图时显示“文生图 · Krea2”,连接一张时显示“单图编辑 · Krea2 v2.1”;选择姿势和 0↔1 参考图变化都不再改写节点模型,兼容工作流只在生成快照中解析。多参考图时选项置灰、所有画布生成入口提前拦截,关闭 LoRA 后普通多图编辑保持原行为。参数继续保存在节点 metadata、工作流 Skill、异步结果和重试配置中。
  • 生图工作台新增始终可见的“Krea2 姿势 LoRA”面板,完整列出 7 个姿势并支持 0–2 强度;零参考图提交时使用 Krea2 文生图,一张参考图提交时使用 Krea2 v2.1 单图编辑,选择/关闭 LoRA 及增删参考图均不改写用户当前模型,超过一张时在提交前明确拦截。需确认生成历史预览与按原参数重试均保留姿势 ID、强度及实际请求模型,匹配的 NSFW Skill 只带入推荐姿势与提示词。
  • 生产验收需逐一覆盖 anal、deepthroat、spooning、cowgirl、doggy、missionary、titsjob 的文生图与单图编辑,确认输出可解码、任务实际命中的 Worker 具备对应资产、刷新/重试保留参数;同时验证未知 ID、路径字符串、单独强度、NaN/Infinity、越界强度和不支持模型均返回 400,省略姿势字段保持原行为。

异步生成状态与结果自动核对

  • 图片、视频和 Seedance 的任务状态查询由 GET 改为 POST;Web BFF 完成登录、画布归属与任务归属检查后,再以 GET 查询内部 Proxy。需验证外层 CDN 即使仍错误强制缓存 GET,浏览器轮询也能在任务完成后收到终态,不再长期停在 pending。
  • 管理后台生成列表改为 POST,原 GET 只返回 405;列表刷新会以最多 20 条为一批、全局去重且最多等待 2 秒的方式核对已绑定任务。Proxy 已有明确终态时会先保存结果详情,再结算或释放积分;超时、404 和不明确状态继续保留,不按年龄误判成功或失败。
  • 管理后台的图片、视频结果通过鉴权后的 POST 媒体接口读取;服务端按任务归属从内部 Proxy 获取媒体,避免已脱敏的供应商签名 URL 失效,也避免再次走会被 CDN 缓存的私有 GET。视频仅在管理员点击后加载。
  • 已完成图片的生成耗时优先使用 Proxy 持久化的真实完成时间。生产样本中 3 条 Qwen Image 3.0 Pro 任务实际约 61–96 秒完成;修复后应显示对应耗时和各 1 张结果预览,而不是继续累计十几分钟。
  • 状态文案区分:未绑定 held 为“等待提交”,已绑定 held 为“生成中”,unknown 为“提交状态待核对”,终态为“成功”或“失败 / 已释放”;无 URL 时显示对应阶段说明。
  • 需覆盖刷新/离开生成页后再进入、弱网、多个并行任务、Proxy 重启恢复、管理员自动刷新、图片预览、视频终态、Seedance 终态,以及未登录/非管理员 POST 访问。

账户与画布私有数据 CDN 隔离

  • 账户初始同步和画布持久化读取改用 POST,原 GET 读取只返回 405;即使外层 CDN 错误强制缓存 GET,新请求也不会把任一账号的身份、积分、流水或画布项目存为公共对象。
  • 全局鉴权代理对私有页面、API、鉴权错误和登录流程统一加上 Cache-Control: private, no-store, max-age=0, must-revalidate、CDN-Cache-Control: no-store、Surrogate-Control: no-store 与 Vary: Cookie;账户与画布路由本身也显式应用同一策略。
  • SessionProvider 和账户页在写入 Zustand 前校验 user.id 及客户命名空间,不匹配的响应被丢弃并记录 account_identity_mismatch,不再把其他账号覆盖为当前用户。
  • 生产需用两个不同账号分别验证首页账户菜单、我的画布和 /api/account、/api/storage/canvas:POST 只返回当前账号数据,GET 为 405,未登录 POST 为 401,所有私有响应均不得出现 CDN HIT/Age。

MiniMax H3 首尾帧图生视频

  • 视频创作台与画布新增 minimax-h3-fl2v,必须按连接顺序提供 2 张图片(第 1 张首帧、第 2 张尾帧)并填写提示词;沿用 MiniMax H3 的 480/720 档、5–15 秒、比例、Seed、24fps 与原生音频设置。
  • 画布与视频创作台新增 minimax-h3-l2v 尾帧模式,必须提供 1 张尾帧图片并填写提示词;请求独立路由到 Scheduler 的 L2V 执行图,沿用 H3 的分辨率、时长、Seed、24fps 与原生音频设置。需分别实测 FL2V 与 L2V,确认输入语义和收束画面正确。
  • 画布与视频创作台新增 minimax-h3-r2v 参考图模式,接入 vps66 现有 04_R2VA_参考视频_Qwen3.5_Turbo.json,支持 1–4 张图片作为人物、场景、风格或物体参考且不固定为首帧。需在空闲 GPU 窗口实测 1 图与 4 图生成,记录原工作流 SHA、总耗时、排队、GPU 执行时间、显存峰值与输出校验。
  • 视频创作台每次展开模型选择器都会强制刷新默认 GPU 渠道可用性,已在后台就绪的 minimax-h3-fl2v 不再被浏览器旧的“不可用”缓存隐藏。
  • Proxy 将两张图片分别转发为 Scheduler 的 first_image / last_image,Scheduler 固定路由到 vps66 GPU1,并对发布工作流裁剪、写入首尾帧、分辨率、时长和种子。需在生产画布验证双图顺序、首尾过渡、竖屏输出、音轨与刷新后的任务恢复。

我的画布旧缓存越权展示

  • 画布列表合并旧版 user_app_state.projects 时,会检查项目是否已进入正式 canvas_projects 以及当前账号是否存在成员关系;已属于其他账号且未共享给当前用户的旧缓存项目不再显示。
  • 生产只读核对确认 tim ku 旧缓存含 11 个由 Jx L 所有、但 tim ku 没有成员关系的项目;修复后这些项目应立即从 tim ku 的列表消失,未迁移的个人本地草稿和真实共享画布仍保留。

协同画布自身账号识别

  • 协同读取接口显式返回当前鉴权用户 ID,前端同时按 client_id 和 user_id 排除自身 Presence;同一账号打开多个标签页或刷新产生新连接时,不再把另一个标签页显示为远端的 tim 用户。
  • 需用 tim 与另一真实账号同时进入同一画布:tim 多开标签页只显示一次且不显示自己,另一账号应显示其数据库 display_name,光标、选区、定位按钮和退出清理保持正常。

OpenCode Spicy 长请求心跳

  • 网站模式调用 OpenCode Spicy 后立即开始流式返回兼容 JSON 的空白心跳,并每 10 秒续传,最终结果仍保持原 JSON 协议;画布助手和提示词工作台无需等待无数据连接超过 HAProxy 空闲超时。
  • POST 转发不再因连接异常自动整单重试,避免同一模型任务重复执行。需用超过 370 秒的隔离模拟请求验证入口连接持续存活、客户端最终可解析结果;同时覆盖上游 4xx/5xx、360 秒 Web 超时和工作台错误提示。

模型选择器供应商品牌标识

  • ML/MuleRouter 的 Wan、W3.0、Berry 路由改用 MuleRouter 品牌标识;百炼国内站、新加坡国际站与 Workspace 路由改用阿里云百炼品牌标识,不再与底层 Wan/Qwen 模型家族图标混淆。
  • 图标容器调整为 36px 圆角方块并增加留白,需检查画布、图片工作台、视频工作台及配置页在深浅主题、窄屏和长模型名下的清晰度与对齐。

PixVerse / Vidu / Kling 停用

  • PixVerse 3 个、Vidu 4 个、Kling 2 个视频模型全部标记“平台已停用”,从视频工作台、画布和配置默认模型选择中移除;配置诊断仍保留模型及停用原因。
  • Proxy 同步进行服务端阻断,旧画布或旧浏览器配置直接提交时应返回模型已停用,不应继续占用 Key、积分或创建供应商任务。

模型选择器执行通道分组

  • 画布、图片工作台、视频工作台和配置弹窗共用的模型选择器改为“GPU 算力模型 / API Key 模型”双通道分组;选项显示品牌图标、模型名、真实供应商/区域和 GPU/API 徽标,当前选择也保留紧凑执行类型提示。
  • GPU 组覆盖 ComfyUI 调度工作流(Krea2、Comfy、Muse、MiniMax H3、LTX 本地工作流),其余供应商调用进入 API Key 组;需验证图片/视频/文本/音频各能力、不可用模型、长模型名、窄屏、深浅主题及画布缩放手势不受弹层影响。
  • 首次打开模型选择器会绕过 Proxy 旧探测缓存并主动刷新默认渠道;需验证新模型上线、GPU 工作流从缺模型或断线状态恢复后,在同一次打开中由不可用列表回到对应 GPU/API 分组。

Wan3 新加坡路由标签

  • wan3.0-video、wan3.0-video-1、wan3.0-video-2 均按真实生产配置标注为百炼新加坡,并分别显示“国际站 · 主路”“Workspace · 第二路”“国际站 · 第三路”;仅修改展示标签,不改变模型 ID、Key 或请求路由。
  • 需检查画布、视频工作台及所有共用模型下拉框,不应再出现 Wan3“百炼国内站”标签,并分别实际提交一次确认三路仍命中原生产端点。

协同监控持续上报

  • 画布客户端把同步延迟、SSE 重连、Outbox 和冲突计数合并进每 5 秒 Presence 心跳,服务端同次写入 Redis 指标;只要画布仍在线,协同监控不应在 120 秒后回到全零。
  • 需同时打开普通画布与管理员“协同监控”,验证 5 秒内出现活跃客户端/画布行、最后上报持续刷新;关闭画布后 Presence 约 20 秒消失,指标最迟 120 秒自动清理。

管理后台生成结果预览

  • /admin/generations 遇到生产 OSS 内网结果地址时改走管理员鉴权的同源预览接口,浏览器不再直接访问无法解析的 *-internal.aliyuncs.com 地址;接口只读取数据库已记录的结果,并限制为 HTTPS 阿里云 OSS 内网域名。
  • 需验证 Krea2 图片编辑历史记录和新记录均显示缩略图,展开后可预览原图;同时覆盖视频 Range 播放、非管理员 403、未登录 401、非法 operation/index、外部公网结果仍走原地址。

配置弹窗渠道信息布局

  • 平台托管渠道只展示接入方式、调用协议和凭据管理摘要,不再用四个灰色禁用输入框模拟可编辑配置;可用模型和刷新入口保持不变。
  • 不可用模型改为单列自适应列表,模型 ID 和较长诊断原因均可换行。需验证桌面端不同窗口宽度、浏览器缩放、深浅主题,以及超长 GPU 缺模型信息不会重叠或产生横向滚动条。

ML 与百炼视频模型区分

  • ML/MuleRouter 的 W3.0、W3.0 Pro/Prime/Prime Pro、Berry 1.0/Pro 均改为带 -spicy 后缀的独立模型 ID,并在下拉框显示“ML · Spicy”;百炼 wan3.0-video* 三路均显示各自的新加坡国际站/Workspace 标识。
  • 旧画布、本地配置和历史任务中不带 -spicy 的 ML ID 会自动映射到新 ID;需验证旧配置恢复、六个 ML 模型提交/轮询、三个百炼 Wan3 路由,以及生成记录中的模型 ID 不再混淆。

桌面端顶部导航鼠标操作

  • 顶部功能导航在窗口宽度不足时显示左右翻页按钮;普通鼠标在导航区域滚动滚轮可横向浏览,触控板横向手势保持原行为。需验证 1280px、1440px、浏览器 150%/200% 缩放、深浅主题以及左右边界按钮显隐。

OpenCode Spicy 真实 Skill 加载

  • OpenCode Spicy 镜像从仓库根构建,并把 skills/livestream-chain-prompts 的 SKILL.md 与三个参考文件安装到全局 Skills 目录。镜像内执行 opencode debug skill 应列出 livestream-chain-prompts,不能只有前端菜单预设。
  • 网站聊天模式在任务匹配时应加载并遵循已安装 Skill;直接询问“你有哪些 Skills”时应如实包含「伪直播连环提示词」。选择该 Skill 并输入场景想法时应先执行 Phase 1 导演结构表,等待确认后才扩写 Phase 2。

管理后台生成详情

  • /admin/generations 新增提示词、生成结果两列,并可展开查看完整提示词、规范化模型参数与最多 12 个结果预览;搜索同时覆盖提示词。
  • 新增 generation_details 表,以计费 operation_id 关联请求与结果审计;只保留提示词、模型、尺寸/时长等标量参数以及结果 URL、状态和错误,不保存输入图片、Data URL、Token 或供应商密钥。旧记录保持“未记录”,新请求从上线后开始积累。需分别验证同步生图、异步生图、视频成功/失败、结果轮询、分页搜索和外链失效状态。

AI Film 智能尾帧颜色精确匹配

  • 智能尾帧的 YUV→RGB 转换改为复刻 AVFoundation(QuickTime/预览)实测约定:未标记色彩空间的视频按宽度 ≥720 使用 BT.709、以下使用 BT.601 并显式指定矩阵,limited range 统一展开为 full range;带 bt709/bt601 标记及 full range(yuvj420p)源同样按对应规则转换。不再依赖 FFmpeg 默认猜测(本机 6.1 对未标记 720p 默认 BT.601,与实测基准偏差约 24 dB)。10/12-bit 源经 yuv444p16le 中间格式转换,避免精度损失。
  • 输出 PNG 在 IHDR 后内嵌 CoreMedia BT.709/BT.601 ICC profile(iCCP chunk),颜色管理浏览器与 QuickTime 渲染一致;JPEG 输出保持原样不嵌 ICC。
  • FFmpeg ≥7.0 支持的 chroma siting(in_chroma_loc)按 AVFoundation 实测取 topleft(8-bit)/ left(10/12-bit);当前生产镜像 ffmpeg 5.1 无该选项时自动省略 siting,矩阵与 range 规则仍生效,两代 FFmpeg 输出已验证逐位一致(PSNR=inf)。
  • 保留尾部窗口解码 + -update 1 覆盖写策略,仍提取“最后可解码帧”;带尾部音频、低帧率场景已验证。需以真实生成视频对比 QuickTime 打开的同一尾帧颜色:肉眼应一致、PNG 保持无损 RGB、输出节点 metadata 仍带 ai-film-tail-v1 策略,并覆盖未标记 720p/480p、标记 bt709、full range 与 10-bit 源。

vps66 GPU3 Huihui Qwen3.8 27B

  • vps66 新增独立 Ollama 服务,只暴露 GPU3,并部署 huihui-ai/Huihui-Qwen3.8-27B-abliterated-GGUF:UD-Q8_K_XL;ecs110 通过受控回环隧道访问,不开放公网 Ollama 端口。
  • 画布 OpenCode Spicy 模型选择新增“Huihui Qwen3.8 27B Abliterated · vps66 GPU3”,服务端通过独立 vps66-ollama provider 调用。需验证文本对话、工具调用、长回复、连续 session,以及推理时仅 GPU3 增加显存占用。

10 卡 GPU 调度与管理员实时监控

  • 每张物理 GPU 现在保留独立的持久排队归属;派发前先按工作流节点和模型资产过滤,再按同用户占用、运行任务数、排队长度、GPU 利用率及空闲显存排序。同一用户连续提交批量任务时,应优先分散到不同可用卡。
  • GPU/ComfyUI 探测失败后进入指数退避并从候选池摘除,退避结束探测成功后自动重新加入;管理员后台“GPU 调度”每 5 秒显示登记卡、可调度卡、实时利用率、显存、运行/排队数量以及模型、用户、GPU 三者的任务归属。
  • 需以 10 张物理卡验证:混合模型只能进入具备依赖的卡;单卡断网不会阻塞其他队列;恢复后无需重启调度器;同一批次在空闲卡间分散;非管理员状态接口不返回用户任务归属。

画布 OpenCut 编辑入口与安全会话

  • 图片、视频和音频节点悬浮工具栏均提供“OpenCut 编辑”;单选时发送当前媒体,多选时同时发送已选图片、视频和音频,文本/配置/空媒体节点会被忽略。浏览器会先同步打开等待页,避免异步请求完成后被弹窗策略拦截。
  • 只有画布 owner/editor 可以创建编辑会话;服务端从 PostgreSQL 画布文档重新读取节点及持久媒体,不接受客户端传入媒体 URL。会话 token 只以 SHA-256 入库、15 分钟过期,并区分 created/opened/exported/expired/cancelled 状态。
  • 未配置 OPENCUT_BASE_URL 时应明确提示“OpenCut 编辑器尚未配置”,不创建伪会话;生产地址只接受 HTTPS。当前固定验证基线为 OpenCut v0.3.0 / f4bd689f51cf12a4dd0a32f602f761be314d9686,桥接服务上线后需继续验证导入、保存刷新、浏览器导出、OSS 回写、Range/CORS 与原节点保留。
  • cut.xshow.live 只能以完全匹配的 Origin 调用 Bridge,其他 Origin 和缺失 Origin 都返回 403;会话 token 放在 URL Fragment 中,桥接页读取后立即清除地址栏,媒体读取必须携带 Bearer Token。媒体端点只允许访问会话 node_ids 中仍存在且具备 storageKey 的节点,支持 Range,并在 15 分钟后失效。
  • OpenCut 独立镜像固定上游 SHA,不在运行时跟随 main;桥接页导入后将媒体按选中顺序加入素材库和时间线。需验证多视频串行排布、图片/音频混合、刷新后 OPFS 恢复、跨账号越权、非法 nodeId、过期 token、Range 分片和浏览器历史中不出现 token。
  • OpenCut 生产 Compose 已补齐上游 SSR 环境校验需要的 Marble 与 Freesound 变量;未启用对应可选服务时使用显式禁用占位值,首页、健康接口和 Bridge 均需保持 200,且日志不得出现环境变量 ZodError。
  • 生产反向代理下创建会话时使用 AUTH_PUBLIC_ORIGIN 写入 Fragment 来源,Bridge 应接受 https://ic.xshow.live,不得把容器内部请求地址误判为非法来源。
  • 全局认证代理仅对 OpenCut Bootstrap 与会话媒体路由跳过 Cookie 登录检查,让 Route Handler 自己执行 Origin、Bearer、节点白名单与过期校验;画布创建会话接口继续要求登录。
  • 任一媒体节点的“OpenCut 全画布”入口会收集当前画布全部已持久化图片、视频和音频,空媒体与文本节点忽略;会话支持最多 500 个媒体并对超限返回明确错误,不再静默只保留前 50 个。
  • Bootstrap 媒体地址使用公网 AUTH_PUBLIC_ORIGIN 且不暴露 storageKey;Bridge 每批最多并发读取 6 个媒体,单个失效对象应跳过并继续导入其余素材,媒体错误也必须返回正确 CORS。
  • OpenCut 素材库名称复用画布引用顺序,分别显示“图片1 / 图片2”“视频1 / 视频2”“音频1 / 音频2”;空节点不参与编号。编辑器顶部提供“导回画布”,默认导出完成后通过原 15 分钟 Origin/Bearer 会话写入 OSS、media_objects 与协同操作历史,并在原画布右侧新增“OpenCut 成片”视频节点;刷新、跨设备和协作者均应看到同一节点,过期会话不得继续写入。

Skill 广场与生图工作台参数贯通

  • 从 Skill 广场的“生图”分类点击一键脱衣或任一 NSFW 图片 Skill,应跳转到生图工作台并显示“已应用:Skill 名称”;一键脱衣选择 muse-v35-undress,其他 NSFW 图片 Skill 继续选择 krea2-v21-edit,提示词完整显示在输入框中。
  • 点击生成后,生成记录中的提示词和实际请求必须与输入框一致;换用不同 Skill 时提示词必须随之变化,不能复用上一条提示词。AI 换脸和预置姿势也应覆盖旧输入并显示当前已应用 Skill。
  • 非生图 Skill 不应被生图工作台静默接受;直接传入不支持的 skill 参数时应显示明确提示。画布原有的一键脱衣和 NSFW 预设仍需使用同一份共享定义,行为保持一致。

工作台添加到素材反馈

  • 图片和视频生成结果点击“添加到素材”后,按钮应先显示“添加中”,成功后显示绿色勾选和“已添加”,同时出现“可在我的素材中查看”的成功提示;成功按钮不可重复点击,刷新后已持久化结果仍应识别为已添加。
  • 上传或保存失败时应显示包含原因的错误提示,按钮恢复为可点击状态以便重试;已有 storageKey 的图片应直接复用持久化对象,不应再次上传同一图片。

画布移动/框选工具切换

  • 底部工具栏首个按钮现在是明确的双态工具:移动态显示手掌,框选态显示鼠标箭头;点击按钮或按 V / S 可切换,悬浮说明、aria-label、按钮选中态和画布光标应同步变化。
  • 移动态左键拖动空白处平移,原地长按约 320ms 后可临时框选;框选态左键拖动空白处立即框选。两种模式下空格加左键和鼠标中键均保持平移,Ctrl/⌘ 加空白拖动仍可立即框选;输入框获得焦点时 V/S 不应误切工具。

Agent 对话与小型画布工作流生成个人 Skill

  • 画布助手可从“最近对话”“当前选区”或“对话 + 选区”生成可编辑草稿。提炼完全由 Web 服务内的确定性规则完成,不调用 OpenCode Spicy 或其他外部 AI;浏览器网络面板中不应出现由该操作触发的外部模型请求。
  • 对话来源只读取当前登录用户在当前画布已持久化的 Agent 历史,最多取最近 24 条用户/助手文字并限制单条及总字节数;图片、视频和附件引用不会进入草稿。需验证刷新后仍可提炼、不同用户的会话不能串读、只有媒体而没有可用文字时返回明确提示。
  • 工作流来源允许选择 1–30 个节点,只保存选区闭包内的节点、相对位置和内部连线。模板保留提示词、模型和生成参数等白名单配置,同时移除媒体内容、storageKey、临时/签名地址、任务 ID、生成状态/耗时及凭据;组、批次、节点 mention 和 references 只保留并重映射模板内关系。需验证图片/视频节点保存后不携带原媒体,选区外连线与引用不会进入模板,凭据样式文本被脱敏。
  • 草稿可在保存前编辑名称、摘要、分类、标签、触发词和指令;保存后写入当前用户的 PostgreSQL user_skills,刷新和跨设备后仍出现在画布助手与 Skill 广场,另一个账号不可见。
  • 复用助手 Skill 只把可复用指令填入当前 Agent 输入框;复用工作流会在当前视口附近创建全新的节点与内部连线、重映射所有实例 ID 并选中新节点,不复制原媒体,也不自动运行图片或视频生成。需连续复用同一 Skill 两次,确认两个实例互不引用且不会产生付费生成任务。
  • 修改接口以 expectedRevision 做乐观并发检查并递增 revision;使用旧 revision 更新或归档应返回冲突。归档只写入 archived_at 并保留记录,随后不再出现在个人列表和画布助手中,不执行物理删除。

画布素材 @ 候选缩略图

  • 网站与本机 Agent 输入 @ 后,图片候选优先使用持久化 storageKey 的媒体展示地址,不再把 image:... 字面键或其他浏览器留下的 Blob URL直接交给 <img>;尚未持久化的本地图片仍沿用当前会话预览。
  • Justin spicy-cc 中现存的 infinite-canvas/media 与历史 gy-infinite-canvas/media 两类媒体对象均可读取;缩略图地址升级缓存版本,媒体失败响应改为 no-store,不会继续缓存旧 400;生产展示继续通过 Type A 签名直连 CDN,Agent 字节读取仍走同源鉴权接口。需验证旧画布与新画布的 @ 列表、画布节点、发送前芯片、刷新历史、图片详情及跨账号协同成员访问。

本机 Agent 离线输入

  • 本机 Agent 尚未连接、正在重连、协议过旧或 OpenCode 能力尚未确认时,输入框仍可正常编辑并保留草稿;只有实际请求执行期间才锁定编辑。未连接时点击发送会切换到设置页并显示明确提示,不再表现为整个对话框无法输入。

网站 Agent 画布引用图片

  • 网站 Agent 选择支持图片的在线模型时,聊天模式和工具模式都会把用户主动引用的画布图片读取为临时附件并通过 --file 交给模型,不再只显示缩略图却让模型看不到图片;请求结束、失败或超时后临时文件均删除。
  • 单轮最多 10 张图片、解码后合计不超过 28MiB,仅接受 JPEG/PNG/WebP/GIF;无效 Base64、类型或超限返回明确错误。需验证单图反推视频提示词、多图引用、刷新后的 OSS 图片、超限提示、模型失败详情和临时目录清理。
  • 模型附件读取使用已鉴权的同源字节响应,不再跟随展示用 CDN 重定向而被浏览器 CORS 拦截;持久化副本临时不可用时会继续尝试当前页面仍有效的 Blob URL。需复验画布中已经显示缩略图的历史 OSS 图片可直接发送给当前支持图片的在线模型。
  • 网站工具模式不再强迫每条请求先调用一次工具;只需看图写提示词时可直接回答,需要修改画布时仍可自主调用工具。生产 HAProxy 为 /api/opencode-spicy 使用独立 370 秒后端超时,覆盖 Qwen3.8 Max 多模态慢请求;非 JSON 网关错误会显示具体 HTTP 状态,不再退化成笼统失败。

画布媒体 Blob 修复与 OSS 直源 CDN

  • 两个历史批量生图根节点已从其已持久化主子图恢复 storageKey,项目 JSON 修复前快照保存在生产备份目录;刷新及跨设备打开后应继续显示原图。
  • 已鉴权媒体入口对完整图片和视频改为生成阿里云 CDN Type A 签名的 OSS 对象路径,CDN MISS 直接回源 Justin spicy-cc 私有 OSS,不再经过 Next.js 与 Proxy;Range 请求、签名拒绝及跨账号成员访问需线上复验。
  • 媒体签名与浏览器/CDN 缓存窗口提升至 24 小时,CDN 节点按不可变对象缓存 7 天;画布 JSON、协同 SSE、评论和 Agent 对话继续走鉴权动态接口,保持 no-store/no-cache 与 SSE 禁止代理缓冲,不混入公共媒体缓存。
  • ecs110 已恢复通过系统 DNS 解析 media.xshow.live,需持续观测阿里云内网 DNS 的偶发超时;生产验收同时检查系统与 Web 容器解析、首次 MISS、再次 HIT、视频 Range 206 和回源 Host。

系统用户名与操作者名称编辑

  • 账户菜单新增“编辑用户名称”,用户可同时修改唯一的 3–32 位系统登录用户名和 1–80 字符操作者名称;保存后当前会话、本地账户状态、Presence、成员列表、评论及历史记录读取新名称,下次登录改用新用户名。需验证用户名重名冲突、旧用户名登录失败、新用户名登录成功,以及两个浏览器中的协同光标、在线成员和新评论展示。

Canvas Agent 0.7.2 与 OpenCode Spicy 能力探测

  • GZ Canvas Agent 0.7.2 的 /config、/health 与已鉴权 SSE hello 均应返回 protocolVersion: 7、capabilities.opencodeSpicy: true 和 capabilities.openCodeHistory: true,且任何公开响应都不包含 token;OpenCode 启动器缺失时应单独显示 OPENCODE_SPICY_BIN 配置提示,不能把路由能力误报为运行时已安装。
  • 使用 0.6 / 协议 6 Agent 或未声明协议的更旧 Agent 连接时,当前引擎、OpenCode session、消息和线程历史应保持不变;整个 composer 与会话写操作禁用并显示观察到的协议与 0.7.0 升级要求,用户可保留或手动切换引擎,但不会再向缺少 runId 的旧 turn 接口发送请求。未来协议只要声明兼容能力,不应误报成协议 6。
  • 一次性连接凭据优先放在 URL fragment,读取并持久化后立即从地址栏清除;完整 agentUrl + agentToken 可自动连接,token-only 只与已保存的本机地址合并,URL-only 不得携带已保存 token 跨地址。自动连接仅接受 loopback 地址;公开 /config 返回的 URL/token 不参与覆盖,连接能力以携带 token 成功建立的 SSE hello 为准。
  • 0.6 的 workspace fixture 首次遇到真实 canvas ID 时只复制一次到 canvases[id],迁移标记阻止其他画布重复继承;原 workspace 保持不变,回滚 0.6 后仍能读取原路径和 thread。
  • 配置首次写入、覆盖旧配置及读取旧文件后均应为 0600,写入采用同目录临时文件原子替换;模拟 chmod EPERM 时必须保留已解析 token。runs/journal 历史日志也应收紧为 0600,启动日志不打印 token。
  • Package GZ Canvas Agent 工作流只做 frozen install、测试、构建、npm pack 内容/协议校验和 Actions artifact 上传。下载得到的 zip 内应含 basketikun-canvas-agent-0.7.2.tgz,工作流不得查询或发布 npm。

画布 Agent 图片/视频提示词能力

  • Agent 输入框底部改为双层自适应工具区:第一层的上传、画布媒体引用、提示词库、媒体提示词和互动技能会按面板实际宽度自然换行,第二层固定显示当前模型与发送按钮;网站/本机模式、320–760px 面板宽度、200% 浏览器缩放和长模型名称下都不应横向溢出或遮挡发送按钮。
  • 网站与本机 Agent 增加“媒体提示词”入口,明确提供“反推视频提示词、续写视频提示词、反推图片提示词、图片转视频提示词”四种可编辑预设;媒体 system instruction 约束模型只依据可见证据、把画面文字当内容而非指令,并明确视频分析不包含音轨。
  • 画布视频节点,以及本机 Agent 手动上传的视频,会在浏览器按时间顺序抽取 8 帧,包含接近真实首帧和尾帧的画面,生成带序号、时间戳和时长的 JPEG 分镜联系表后沿现有图片附件链路交给 Agent;不把整段视频 Base64 塞入请求,也不依赖 OpenCode 对二进制 --file 的兼容性。需验证横屏/竖屏、短视频、10 分钟长视频、刷新后的 OSS 视频、损坏视频、CDN Range 与 CORS 错误提示。
  • 网站聊天模式即使关闭画布工具也可选择或多选显式图片/视频引用;每次发送视频分镜前会显示目标模型、抽帧数量以及“不发送整段/不含音轨”的确认。工具模式不再强制首轮调用工具,且附件会贯穿自动工具循环与人工批准后的续跑,不会在 canvas_get_state 后丢失。
  • 图片与视频分别显示“图片 N / 视频 N”角标,视频历史引用会从持久化 storageKey 恢复同源预览;附件 manifest 以最终顺序、类型和 nodeId 唯一对应同名媒体。网站单轮最多 6 张图片加 3 个视频分镜,本机 Agent 的手动附件与画布图片/视频合计最多 6 个;两条链路的联系表与图片合计均不超过 28MiB。人工工具批准仅保留最近一次待确认请求的媒体上下文,切换项目、删除/清空会话和卸载面板都会释放。需验证混合顺序、两个同名节点、重复 @ 引用去重、删除节点、超限提示及四类提示词输出。
  • OpenCode Spicy 模型列表保留 qwen3.8-max 入口;当前视频节点分析使用对所有图像模型兼容的分镜路径,而不是向不支持原生视频的模型伪装成视频附件。

Agent 消息复制与输入历史

  • 网站 Agent 与本地 Agent 的用户、助手和工具消息显示“复制”,复制内容与界面展示文本一致,画布引用会使用可读的 @名称,复制后给出成功提示。
  • Agent 输入框在未展开素材 @ 候选时支持 ↑/↓ 浏览当前会话已发送的用户消息:首次 ↑ 取最近一条,连续 ↑ 查看更早内容,↓ 返回较新的内容,越过最新一条后恢复浏览前尚未发送的草稿;关联画布节点、素材引用和当前未刷新会话内的本地图片附件随消息一并恢复,切换画布/会话/引擎不会串历史。
  • 编辑后的新输入会退出历史浏览;多行文本只在光标位于开头/末尾时切换历史,其余位置保留原生上下移动,中文输入法和素材 @ 候选的方向键选择保持原行为。

参考图反推提示词

  • 文本模型携带 Base64 参考图时,计费代理接受不超过 32MiB 的 JSON 请求;2MiB 以上图片不再因旧的 1MiB 上限返回 400,字符串型服务错误也会原样显示。

OpenCode Spicy 发布切换重试

  • Web 转发遇到服务窄重启的瞬时连接失败时最多进行四次指数退避重试,约三秒切换窗口内不再直接向用户显示请求失败。

OpenCode Spicy 长提示词附件

  • 超过内联限制的画布上下文会写入临时附件,用户指令放在 --file 之前,避免 OpenCode 把指令误判为第二个文件路径;执行结束后附件仍会清理。

Agent 多媒体多选引用

  • Agent 输入区新增“引用图片/视频”多选入口,可同时选择多个图片与视频节点并逐项移除;画布 Ctrl/⌘ 多选或框选的视频节点也会出现在引用区。

Agent 引用图片缩略图

  • 在线与本地 Agent 的引用图片标签优先使用持久化媒体地址;发送后及刷新恢复历史对话时都应显示缩略图和“图片 N”角标。

OpenCode Spicy 请求稳定性

  • Web 到 OpenCode Spicy 的短暂连接故障会自动重试一次,长提示词执行允许最长六分钟;上游失败时画布显示具体错误详情,便于判断模型、额度或输入问题。

协同冲突明细

  • 顶部“冲突 N”改为可点击入口,新发生的字段冲突会显示节点、JSON 字段路径、服务端原因与发生时间;有关联节点时可直接定位,也可清除当前会话记录。
  • 同一批操作发生字段冲突时只移除服务器胜出的同节点同字段,本批其他字段和其他节点操作重新进入 Outbox,刷新服务器快照后继续补交;需双账号验证标题冲突与位置、尺寸、其他节点同时修改时只有标题采用服务器值。

协同 Presence 与邀请管理

  • 单标签页退出事件只移除对应 clientId,服务端发现同账号仍有其他活跃标签页时立即广播最新替代 Presence;相同心跳不触发光标重渲染,避免光标延迟后重复弹出。需双账号、多标签页、刷新、关闭标签页和弱网验证同账号始终只显示一个最新光标。
  • 共享弹窗新增邀请记录,所有者可查看全部邀请,编辑者只查看自己创建的邀请;两者均可撤销权限范围内尚未使用的邀请,邀请成功领取后原 token 立即失效。需验证 editor/viewer 权限、重复领取、过期与撤销链接。
  • 千节点协同差异扫描的同序快速路径改为线性索引,并以 1000 项拆成 5 个 200 项幂等批次的回归测试锁定顺序;需双账号验证 500~1000 节点移动、粘贴和删除后的 revision 连续与最终一致性。

多人协同 Redis 运行环境

  • 生产运行验收现在强制检查 Web 的 REDIS_URL 及 Redis 服务名解析,避免协同接口因运行环境遗漏而持续进入“立即重连”。

W3.0 Pro 与图片评论修复

  • MuleRouter W3.0/Pro 待处理任务在 Proxy 窄重启后从持久化 model 自动恢复对应查询路由,已完成或失败的上游任务会立即回写终态,不再因轮询 500 一直累计“生成中”耗时;需在任务运行中重启 Proxy 后验证刷新恢复。
  • MuleRouter W3.0 异步任务返回 FaceDetectionSuspect 时,视频节点显示清晰的人脸输入修正说明,不再展示原始 Python 字典;需用被上游拒绝的人脸图和正常人脸图分别验证失败提示与成功生成。
  • MuleRouter w3.0-video/w3.0-video-pro 已按当前供应商协议在请求顶层显式发送 prompt_extend: false,关闭默认提示词扩写;需验证两种模型的参考、首帧和首尾帧请求均被上游接受,且成片保持用户原始提示词。
  • 图片节点悬浮工具栏根据窗口宽度自动收起文字,并限制在可视区内横向滚动,避免长工具条超出屏幕。
  • 协同评论支持上传不超过 10MB 的 JPEG/PNG/WebP/GIF 图片;附件先持久化到 OSS,再随评论保存引用,同画布成员可查看缩略图和原图。
  • 多人画布“立即重连”会同时重置退避、重新拉取服务器 Revision、补交 Outbox 并刷新 Presence;没有本地待提交操作时也会真正发起同步,不再永久停留在离线提示。

v0.10.14 文档站与画布悬浮说明

  • 画布底部工具栏已补齐所有图标的可见悬浮名称和原生 title 回退,尤其覆盖此前没有说明的“生成分镜”“分镜转视频”和“互动视频 Skill”;顶部 GPU 状态与 Agent 入口也补充用途说明。

  • 画布文档默认地址切换为 https://ic-docs.xshow.live;文档首页、快速开始、功能介绍、节点手册和快捷键从生产版 v0.10.14 重新整理,移除“仅浏览器保存”“无账号后台”等旧版描述。

  • README 已改为当前多人协同生产架构,并使用仓库内版本化截图,避免依赖失效的外部图床。

  • 个人持久历史基础:迁移为每条 canvas_project_operations 增加 inverse_operations/action_kind/target_revision,新增 canvas_project_user_history 的个人 undo/redo revision 栈;普通提交事务内生成最小字段反向操作、追加本人 undo 栈并清空 redo 栈。需验证新旧节点、删除、连线、项目设置和字段 Patch 的正反操作完全恢复且不包含整画布快照。

  • 个人撤销/重做链路:新增画布历史 GET/POST API,工具栏、菜单和 Ctrl/⌘+Z、Ctrl/⌘+Shift+Z、Ctrl+Y 使用当前账号的数据库栈;隔离 PostgreSQL 已验证 normal → undo → redo 生成 revision 1/2/3、最终标题恢复、时间线 action_kind 正确且刷新可重新读取 canUndo/canRedo。需双账号验证只能撤销本人操作以及同字段后续远端修改时冲突提示。

  • 画布版本时间线与审计:画布菜单新增版本时间线,展示 revision、操作者、操作类型、字段操作和时间;owner 可把当前文档事务式恢复到历史 revision,恢复本身作为可撤销的新 revision 广播给在线成员。管理后台新增“画布审计”,跨画布查看编辑、撤销、重做和恢复记录。需验证 owner/editor/viewer 权限、包含节点/连线/项目字段的跨版本恢复、恢复后撤销以及另一账号实时收到恢复结果。

  • 版本时间线第二阶段:历史记录按 50 条 cursor 分页,返回服务器当前 revision 与是否还有更早记录;owner 恢复前先由服务器重建目标 revision 并展示预计节点、连线和画布设置变化,恢复失败显示机器可读错误详情。管理员审计新增画布名称/ID/操作者检索、操作类型筛选和可展开字段摘要;接口不再把节点正文、提示词或媒体内容返回到审计/时间线页面。需验证 100+ revision 加载、筛选分页组合、并发新 revision 后恢复预览失效重算及敏感正文不出现在响应中。

  • 多人字段级冲突:已有节点改动发送 JSON Pointer node.patch,节点内保存总版本与字段路径最近 revision;两个用户同时改标题和位置时合并,同时改同一路径时后提交方收到 409、停止重复重试、重新载入服务器胜出版本并显示累计冲突数。新增节点和旧客户端 node.upsert 保持兼容。需双账号验证提示词、标题、位置、尺寸、metadata、删除与离线恢复的同字段/异字段组合。

  • 多人画布弱网恢复:协同提交与 revision 拉取使用 12 秒超时,失败重试由固定 2 秒改为 750ms 起步、指数增长、带 ±25% 抖动且封顶约 37.5 秒;浏览器 online 时重置退避、清除旧定时器并同时补交 Outbox 与立即拉取远端。需验证断网、半开连接、超时、恢复联网、多标签页和连续编辑期间不重复提交、不丢操作。

  • 画布指南逻辑回归:键盘处理器与测试共用 canvasKeyboardAction 映射,自动验证 Ctrl/⌘+Z、Ctrl/⌘+Shift+Z、Ctrl+Y、全选、复制、粘贴、Delete/Backspace、Esc、编辑态和 Alt 组合屏蔽;指南测试同时锁定 50 步历史实现、连线双击处理和共享说明组件。浏览器端仍需人工逐项验证真实鼠标/触控板事件与操作系统差异。

  • 完整画布指南:左下角“操作说明”和顶部快捷键入口共用同一份分区内容,覆盖画布平移/缩放/重置、长按与快捷框选、追加/全选/多选移动、撤销/重做、复制粘贴、删除/Esc、媒体拖入、锚点连线、连线双击说明、右键菜单和标题编辑,并提示输入框聚焦时暂停画布快捷键。需验证两个入口内容一致、弹窗滚动、窄屏布局、深浅主题以及逐项操作准确性。

  • 画布新手操作说明:左下角缩放工具条常驻“操作说明”文字入口,首次使用当前浏览器时自动打开;内容明确区分普通左键平移、原地长按约 320ms 后框选、Ctrl/⌘ 立即框选、空格加左键或鼠标中键平移,以及拖动单个/多选节点。顶部快捷键入口同步使用相同核心说明。需验证首次与再次进入、关闭弹窗、深浅主题、窄屏以及各项手势与说明一致。

  • MuleRouter Wan3.0 提示词保持:画布 w3.0-video 与 w3.0-video-pro 请求统一显式发送 prompt_extend: false;需分别验证参考模式、首帧、首尾帧和 Pro 模型的实际请求及成片提示词一致性。

  • Wan3.0 提示词保持:画布中的 wan3.0-video、wan3.0-video-1、wan3.0-video-2 Workspace 请求统一显式发送 prompt_extend: false,不再依赖供应商默认值。需分别验证参考生视频、首帧和首尾帧模式的实际任务请求与成片提示词一致性。

  • 多人 SSE 连接隔离:事件分发逐订阅者捕获关闭/写入异常并移除故障监听器,流取消、请求中止、心跳写入失败统一幂等清理;单个浏览器刷新或断线不再中断同进程其他协作者。需用 5~20 个浏览器会话验证频繁刷新、关闭标签页、断网重连、15 秒心跳、连续拖动和其他会话事件无缺失。

  • 大型协同操作分批:粘贴、批量移动、框选删除等产生的大量操作按原顺序拆成每批最多 200 项,每批使用独立幂等 operationId 串行提交,避免超过服务端 500 项上限后 Outbox 永久重试。需用两个账号验证 451、500、501 和 1000 节点的批量添加、移动、删除,观察同步进度、revision 连续性、刷新恢复和最终节点/连线一致性。

  • 多人协同离线 Outbox:待提交操作和已发送但未确认的幂等批次按用户、画布写入 IndexedDB;断网刷新后先恢复服务器快照,再重放本地变更,并沿用原 operationId 自动补交,成功后清理。需用两个账号验证断网移动/编辑/删除、请求提交后断响应、刷新、恢复网络、重复 SSE 事件及最终 PostgreSQL revision/文档一致性。

  • 图片详情加载:详情弹窗不再直接依赖可能失效的节点 content,有 storageKey 时优先读取同源稳定媒体地址,失败后自动回退当前实时地址,全部地址失效时显示明确占位。需验证刷新前后生成图、上传图、旧签名外链、Blob 缓存、多人共享画布及媒体确实不存在的节点。

  • 图片/视频节点生成时间:每次生成结束后把最终耗时同时写入节点 generationElapsedMs 和尝试历史,成功节点左下角固定展示“生成于 HH:mm · 用时 …”,刷新和多人同步后继续保留;旧节点存在尝试历史时也可回读耗时。需验证生图、生视频、失败重试、批量生成、异步任务跨刷新恢复及另一账号打开共享画布。

  • 大型画布多选拖动:拖动开始时一次建立选中节点的位置索引,鼠标移动期间只在动画帧内执行单次线性节点平移和分组命中检测,移除每个鼠标事件的平方级数组查找与帧外预览构造。需在 500~1000 节点画布验证单节点、多选、分镜组、批次子节点拖动,拖入/拖出分组、点击打开节点及持续快速拖动的帧率。

  • 大型多人画布差异扫描:节点和连线数量、顺序未变化时,协同变更检测沿稳定数组顺序比较并只序列化引用发生变化的实体,不再为每次拖动/输入创建四个全量 Map;新增、删除和重排自动回退 ID 索引算法。需在 500~1000 节点画布验证单节点持续拖动、多选拖动、长文本输入、添加/删除/重排节点和连线,并对比主线程耗时与内存分配。

  • 多人节点操作 SSE 增量同步:常规节点移动、文字修改、连线和项目字段操作在小于 PostgreSQL NOTIFY 安全上限时直接随 SSE 下发,接收端按连续 revision 原位应用,不再先请求 collaboration?after=;事件过大、初始快照未完成或 revision 存在缺口时自动沿用操作表补拉。需用 2~10 个账号验证连续拖动、同时编辑不同节点、同节点冲突、连线标签、弱网丢事件、刷新恢复和协同 GET 请求数量。

  • 媒体持久化断线重试:新图片和视频不再按 4MB 大小分成“单次 BFF PUT”和直传两条链路,统一使用上传凭据→流式上传→回执落库;流式上传遇到网络断连或 502/503/504 时对同一 Blob 最多重试 6 次,缓存缺失修复仍保留原覆盖写入语义。需验证小图片、大图片、视频、弱网中断、发布切换、并发重复保存、刷新读取及 PostgreSQL/OSS 元数据一致性。

  • 画布拖动与长按框选兼容:空白处左键移动超过 4px 立即平移画布,保持基本静止 320ms 后才进入框选;Ctrl/⌘+拖动仍可立即框选,空格+左键和中键继续平移。需验证快速拖动、缓慢拖动、原地长按后框选、单击取消选区、节点拖动以及触控板操作。

  • 画布 NSFW 生图 Skills:有内容的图片节点“图片 Skill”弹窗直接列出 Registry 中全部 9 个 NSFW 预设,不再只提供跳转 Skill 广场;选择后使用当前图片作为参考图,以 krea2-v21-edit 执行预设编辑提示词与负面提示,并把 imageSkill、模型和提示词保存到节点及 PostgreSQL 协同文档。需逐个验证 9 个预设的选择、立即生成、失败详情、重试、刷新恢复及多人同步,并确认常用图片 Skill、姿势和角色资产入口未回退。

  • 画布框选、连线说明与展开编辑关闭:空白区域按住左键拖动即可框选相交节点,框选后拖动任一选中节点可整体移动;画布平移调整为按住空格+左键或中键。双击连线可填写最多 120 字说明,标签显示在线上、随 PostgreSQL 画布文档和协同操作保存,并进入 Agent 画布结构;提示词与文本节点展开弹窗的关闭图标隔离底层画布指针事件,另提供“完成并关闭”。需验证普通框选、Shift/Ctrl 追加框选、跨屏多选移动、空格平移、连线硬转/淡入淡出标签、刷新与多人同步,以及弹窗叉号/遮罩/Escape/底部按钮关闭。

  • 多人 Presence 增量推送:光标、选区、编辑锁和拖动锁写入 Redis 后直接随 SSE 事件增量下发,其他客户端不再为每次光标移动请求完整协同文档、操作记录和全量成员;退出事件即时移除成员,20 秒过期清理、5 秒容灾拉取及超过通知大小限制时的完整拉取回退继续保留。需用 2~10 个账号连续移动、拖动、编辑、快速刷新、断网重连及 200 节点多选,观察协同 GET 数量、数据库查询、光标延迟和成员过期。

  • Redis Presence:光标、选区、编辑节点和拖动节点改为 Redis 独立 client key + 20 秒 TTL 与项目有序索引,协同全量读取也从 Redis 返回;PostgreSQL 不再承受高频 Presence 表 upsert/delete,只继续承担持久操作与事件唤醒。需在 Redis 重启、20 人连续移动、标签页异常关闭和正常退出下验证自动过期、即时删除、内存上限及画布持久内容不受影响。

  • 大型画布视口裁剪:节点、SVG 连线、分镜组外框与标题统一按当前视口加 600px 屏幕缓冲区挂载,屏外元素不再持续参与 React/SVG 渲染;选中连线、当前节点关联连线和正在创建的连线保持可见。需在含 500~1000 个节点及大量跨区连线的画布验证平移、缩放、框选、连线选择、分镜组拖动与内存/帧率变化。

  • 画布媒体 CDN:已在 Justin 的 spicy-cc 账号开通并接入 media.xshow.live 海外 CDN 域名,以 ic.xshow.live 为 HTTPS 源站,配置独立 CNAME、证书、回源 Host/SNI 和强制 Range 回源;用户先经原 /api/storage/media/... 完成账号/共享画布权限校验,再跳转至按小时稳定、最长两小时有效的 HMAC 签名 CDN 地址。CDN 源站入口再次校验签名,图片保留 512/1024/1600 WebP 分级,视频保留 Range,边缘缓存最长一小时;域名或签名未配置时原 BFF→Proxy→OSS 内网链路继续工作。需验证首次与二次打开含大量图片/视频的画布、Range 分片、跨刷新、跨设备、共享成员权限、签名篡改/过期、CDN 故障回退及海外节点命中率。

  • 画布网站模式 OpenCode Spicy 新增 GLM 5.2 与 DeepSeek V4 Pro:模型选择器、当前模型标题和两种请求路径(纯聊天、画布工具调用)统一使用同一模型清单;服务端 /v1/models 已确认两模型均在白名单。需分别选择两个模型进行普通提示词聊天和开启工具调用后的画布操作,确认模型切换、回答、错误详情及会话历史隔离。

  • 画布图片/视频节点生成耗时:首次视频生成与批量视频现在和图片生成一样写入 generationAttempts,成功节点右上角独立显示“生成耗时”,生成中实时读秒,失败节点显示本次用时;计时记录随画布文档写入 PostgreSQL,刷新后仍可查看。需验证单张图片、批量图片、单个视频、批量视频、失败重试和刷新恢复,确认耗时不会被左上角长模型名截断。

  • 网站 OpenCode Spicy 对话专用持久化:对话变更 250ms 后按用户、画布和 session 写入 canvas_agent_histories,页面重新挂载时从 PostgreSQL 恢复最近会话;请求使用 keepalive,降低发布、刷新或关闭页面前最后一轮只留在画布整体状态中的概率。需验证聊天后刷新、Web 窄部署、关闭标签页后重开、不同画布和不同用户隔离。

  • OpenCode Spicy 工具调用开关:网站模式标题栏新增“工具调用”开关,默认关闭;关闭时只发送最近聊天内容到独立 chat workspace,不附画布快照、图片引用、工具定义或 session 续接,也不进入工具执行循环,适合编写和优化提示词。开启后恢复原画布 Agent 工具链,“工具确认”仅在开启工具时可用。需验证开关关闭时连续聊天不产生任何画布读取/修改,开启后读取状态、创建节点和确认流程仍正常。

  • 多人画布光标去重与延迟跟随:同一用户刷新或断线重连时只显示 last_seen_at 最新的 client,100ms 高频 Presence 不再并发倒序写回,光标动画缩短为 100ms。需用两账号验证连续移动、网络限速、快速刷新、重复标签页、离开画布及断线重连。

  • 画布视频首帧与播放预热:视频节点进入视野前 900px 开始解析地址并使用 preload=auto;IndexedDB 缓存读取最多等待 80ms,超时立即通过支持 Range 的持久媒体地址流式加载。需验证刷新首帧速度、滚动画布临近加载、点击播放等待时间、慢 IndexedDB、HTTP 缓存及大量视频并发。

  • 画布首帧持久媒体读取:带 storageKey 的参考图在生成前直接读取 IndexedDB Blob,缓存缺失时通过已鉴权同源媒体接口恢复,不再使用展示用 object URL 或旧 OSS/data URL。需验证上传后立即生成、刷新后生成、同一图片连接多个视频节点并发生成、共享画布成员读取以及清除浏览器缓存后的云端恢复。

  • 画布视口与 Agent 面板布局:详情页严格占满浏览器可视区域,Agent 面板展开后完整显示在右侧并压缩画布,收起后释放宽度;底部工具栏、缩放控件和小地图始终留在屏幕内。需验证刷新自动连接、反复展开/收起、拖动面板宽度及不同浏览器缩放。

  • 画布右上角操作区完整显示:画布标题区域可在空间不足时收缩,连接状态、GPU 调度器、积分、配置、主题、版本、GitHub、快捷键、账号及 Agent 入口保持完整宽度,不再被右侧边界裁掉。需验证 Agent 面板展开/收起、不同窗口宽度、长画布名称及浏览器缩放。

  • 画布低缩放视频占位:缩放低于 40% 时不下载视频,但节点使用当前画布主题展示视频图标和“放大后加载视频”,不再出现整片纯黑节点;放大后原位切换为真实播放器。需验证深浅主题、全景缩放、逐步放大、缓存命中和视频加载失败。

  • 画布刷新节点位置稳定:协同初始化采用服务端当前 document 与 revision 后跳过已包含在 document 中的历史 operation audit rows,避免节点在刷新后依次经过旧位置;批次子节点只在用户本次展开/折叠时播放动画,历史节点首次挂载保持静止。需在线上用有大量拖动历史和批次节点的画布验证刷新、重新进入、另一成员在线更新及后续实时拖动同步。

  • 画布提示词原生光标定位:普通输入区和“编辑完整提示词”弹窗在聚焦时隐藏引用高亮覆盖层,文字、换行、选区与光标统一由原生 textarea 渲染;失焦后恢复 [Image N] 等素材引用高亮。需在不同缩放比例下验证长中文、英文、标点、手动换行、滚动后的点击定位、Backspace/Delete、拖选以及中文输入法候选上屏。

  • 画布视频刷新优化:视频节点仅在进入当前视野或临近视野 600px 且画布缩放不低于 40% 时创建播放器并读取 metadata;缩略全景和画布外的大量视频不再随刷新并发请求。当前浏览器 IndexedDB 已缓存的视频优先生成本地 object URL,避免再次下载,未缓存视频继续使用带 Range 与私有缓存的持久媒体地址。需在线上验证含大量视频的画布缩略全景刷新无批量转圈、放大后的按需加载、已缓存视频断网播放及共享视频权限。

  • Wan3/W3.0 透明 PNG 自动处理:画布或视频创作台连接含 Alpha 透明通道的 PNG 时,Proxy 自动以白色背景铺底并编码为无 Alpha 的 RGB PNG,再上传 OSS 和提交模型;非透明 PNG/JPEG 及尺寸、比例、20MB 限制保持不变。需用全透明、半透明边缘和普通 PNG 分别验证预览背景、重试、生成提交及输入临时文件回收。

  • MuleRouter W3.0 双模型:视频创作台与画布新增 w3.0-video、w3.0-video-pro,统一使用 Justin 的 MULEROUTER_API_TOKEN;两者支持文生视频、首帧、首尾帧及图片/视频/音频参考,基础版支持 480p/720p/1080p,Pro 支持 1080p/2K/4K,异步任务按各自提交 URL 查询并保留上游错误。需分别验证两模型三种输入方式、音轨开关、2–30 秒/智能时长、失败重试、刷新恢复和管理员密钥归属。

  • 画布刷新加速:已有本地缓存时优先从 IndexedDB 立即恢复画布,不再让页面空白等待登录鉴权与 PostgreSQL 全量读取;云端画布随后在后台按更新时间合并并回写两端。首次设备或无本地缓存时仍等待云端数据,避免误判画布不存在。需在线上分别验证常用画布刷新首屏速度、另一设备修改后的后台合并、首次设备直达画布链接及断网刷新。

  • AI Film 智能尾帧防回退与颜色保真:画布工具栏显示“智能尾帧”,创建任务显式携带 strategy=ai-film-tail-v1,服务端持久化该策略并强制输出无损 RGB PNG,Media Worker 只调用内置 ai-film-post/scripts/extract_tail_frame.py 并拒绝缺少策略的隐式尾帧任务;输出图片节点显示“AI Film 智能尾帧”并保存策略 metadata。需用带尾部音频、低帧率、普通 SDR MP4 和带颜色元数据的视频分别验证最后可解码画面、颜色、节点标题、任务 spec 及续拍引用。

  • Wan3.0 模式名称与刷新恢复:画布摘要、设置面板标题、配置节点和生成结果统一显示“I2V 首帧生视频 / 首尾帧生视频 / R2V 参考生视频”;设置面板只按当前激活模型选择,不再在当前模型为 wan3.0-video* 时回退到全局保存的 HappyHorse 模型。需分别选择三个模式并刷新页面,验证模型仍为 Wan3.0、模式名称与输入约束一致,切换 HappyHorse 后再切回也不会串面板。

  • 共享画布提取尾帧:媒体任务创建会先校验当前用户为画布 owner/editor,并允许读取已登记到该画布的其他成员视频,不再只按任务发起者本人筛选 media_objects。需由成员 A 上传视频并同步到共享画布,成员 B 点击“提取尾帧”,验证任务创建、尾帧图片节点、积分结算,以及未共享的其他用户媒体仍被拒绝。

  • 画布提示词放大编辑与删除定位:生成面板提示词输入框右上角新增带文字的“放大编辑”按钮;按钮层级高于素材引用高亮输入层,并隔离画布拖拽/平移事件,点击可稳定打开弹窗。弹窗不受画布缩放影响,支持 60vh 大编辑器、滚轮、纵向拉伸、正常回车换行和实时保存;素材引用高亮移除会改变字符宽度的内边距与字重,避免视觉光标和实际 Backspace/Delete 位置错开。文本节点正文仍保留与“生图”并列的“展开”入口。需在不同画布缩放比例下验证按钮点击、中英文逐字删除、选区删除、引用整枚删除、中文输入法、弹窗换行和内容保存。

  • Wan2.7 首尾帧新加坡路由:wan2.7-i2v-2026-04-25 从北京视频账号池迁移到百炼国际新加坡站,单图仍提交首帧、双图按连接顺序提交首帧/尾帧,并固定携带关闭输入/输出数据检查的绿网头;任务查询继续使用同一新加坡 Key 与 endpoint。需验证单首帧、首尾帧、720P/1080P、2–15 秒、失败详情和刷新恢复。

  • 画布 Agent 引擎切换:Codex 或 OpenCode Spicy 的历史加载、残留运行状态不再禁用引擎选择器;切换引擎会结束旧界面的等待状态并进入所选引擎。需在线上验证加载历史、请求异常中断及正常空闲状态均可切换。

  • OpenCode Spicy 本机基线同步:生产启动器不再扫描并终止同用户的其他 proxy.py,每次调用只清理自己的代理进程;网站画布模式不再把已序列化的最近对话同时塞进续接的 OpenCode session,避免历史重复和旧助手行为污染。服务器仍保留动态 Canvas MCP。需在同一画布连续发送、创建新对话和两个账号并发调用,确认上下文不重复、会话互不终止且工具调用正常。

  • 画布 Agent 对话刷新恢复:Codex 与 OpenCode 对话均按用户、画布和线程保存到 IndexedDB;页面挂载后无需等待 Agent 连接即可先恢复本地历史,随后再用服务端线程补齐;active thread 缺失、线程详情短暂读取失败或服务端消息为空时也使用本地副本,切换画布和连接清理前会先落盘。需分别验证两种 Agent 在连接与未连接状态下刷新、切换画布、断线重连、多个线程以及不同用户隔离。

  • 多人画布同步延迟优化:持续拖动不再因尾部防抖而等到松手才提交,拖动期间每 80ms、普通编辑每 120ms 推送一次,远程光标节流由 350ms 降至 100ms;同一节点、连线和项目字段的待发操作会合并为最新状态,降低连续操作的请求体与积压。需用两个账号验证持续拖动可实时跟随、文本编辑反馈、多人同时移动、弱网恢复及待同步计数。

  • 多人画布成员管理:所有者可在共享弹窗直接把成员切换为编辑者/查看者并移除成员,操作带加载、确认和结果提示;所有者角色保持不可修改。需验证权限切换后对方当前页面写权限及时收敛、移除后接口拒绝及列表刷新一致。

  • 多人画布成员定位:协同成员头像改为可访问按钮,点击后优先定位其世界坐标光标,没有光标时定位其首个选中节点;超过 4 名成员显示剩余人数,目标没有光标或选区时给出明确提示。需在不同缩放和平移状态下验证定位中心、选区回退、键盘操作及成员离线变化。

  • 多人画布节点软锁:Presence 新增正在编辑节点与正在移动节点集合,远端节点显示成员姓名及“正在编辑/正在移动”标识;其他成员按下已占用节点时会看到提示且不进入拖动,活动结束后立即释放。需用两个账号验证文本编辑、节点拖动、多选拖动、断线 Presence 过期及释放后接管。

  • 多人拖动平滑同步:拖动过程的持久字段 Patch 从约 80ms 调整为 250ms 合并写入,松手时取消等待并立即提交精确落点;非本地选中节点收到远端位置后使用 140ms 插值移动,减少跳动,同时光标 Presence 仍保持 100ms。需在 20–200ms 延迟和 1–5% 丢包下验证单节点、多选、分组拖动、松手最终坐标、冲突与数据库写入量。

  • 超大画布视口渲染:节点、连线和分镜框继续按世界坐标视口 + overscan 虚拟化;节点专属引用与配置输入只为可见节点计算,图片改为浏览器懒解码,视频在视口外随节点卸载、低缩放不解析媒体地址。需用 1000 节点(含图片/视频/长连线)持续平移缩放,记录 DOM 节点数、主线程长任务、内存、视频 Range 请求和交互帧率。

  • 协同可观测性与压测:浏览器每秒合并上报最近同步延迟、SSE 重连累计、Outbox 堆积和字段冲突,Redis 按 client 保存 120 秒 TTL;管理后台“协同监控”展示活跃客户端/画布、延迟 P50/P95、重连、堆积、冲突和客户端明细。新增 scripts/load-test-canvas-collaboration.mjs,只允许 loadtest-* 画布,使用 20 个登录 Cookie 建立 SSE/Presence、播种 1000 节点并以 250ms 字段 Patch 压测,输出 JSON 与 P95 < 1000ms/零失败门槛。需在 ecs110 隔离环境执行并保存结果。

  • 多人画布离线同步反馈:协同状态区分正在连接、同步中、已同步和离线编辑,展示待同步操作数量;提交失败会保留同一 operation ID 的批次并每 2 秒重试,浏览器恢复在线时立即补交,避免短时断网后必须继续编辑才触发同步。需断网移动/编辑多个节点,验证本地操作保留、待同步计数、手动重连、自动恢复和服务端幂等记录。

  • MuleRouter 双 Key 展示:管理员模型密钥页分别显示当前执行 wan2.7-i2v-spicy 的主账号和未接入执行路由的备用账号,避免两个 Key 被误认为同一个;备用账号不计入模型绑定。需核对两行指纹不同、完整密钥显示审计正常且主路生成保持原 Key。

  • 管理后台模型密钥归属修正:HappyHorse 三个视频模型及其生图模型现在归入独立的“百炼国内 HappyHorse / RICKIE_CN_KEY”,SmartStudio 只列出实际使用其 Key 的 zimage-spicy、qwen-image-edit-spicy、wan22-spicy;百炼国际/国内 Chat、三个 Wan3 Workspace 也按代理真实环境变量逐路拆分。需核对每行密钥指纹与 Proxy 实际变量一致,且 SmartStudio 行不再出现 HappyHorse。

  • 画布 Wan3.0 模式辨识:同一模型 wan3.0-video 的输入方式明确显示为“R2V 参考 / 首帧 I2V / 首尾帧 I2V”,配置节点标题同时携带模型与模式;生成中和失败结果节点也保留对应模式徽标,避免超时或重试时看不出本次任务使用的媒体协议。需分别提交三种模式并验证配置、读秒、失败与重试状态的模式标识一致。

  • OpenCode Spicy 超长提示词:服务端超过 128 KiB 时改用临时文本附件传给 OpenCode,避免 Linux ARG_MAX 导致 Argument list too long;启动异常会返回结构化 502,临时文件在调用结束后清理。需在生图/视频工作台分别用包含大段文本的提示词验证生成、会话续接和回填。

  • 管理后台模型与密钥中心:新增 /admin/models,管理员可查看 MuleRouter、百炼、Chat、Wan、OpenCode Spicy 等当前部署配置的模型绑定、脱敏密钥和指纹;主动显示完整密钥会禁用缓存、记录审计并在浏览器 30 秒后隐藏。支持新增、编辑、停用和删除自定义供应商,自定义密钥以 AES-256-GCM 加密保存。需验证普通用户不可访问页面/API、环境配置只读、密钥显示审计、刷新后明文消失及自定义配置增删改。

  • 视频创建发布窗口恢复:视频创建请求始终携带稳定 operation ID;若 Web 发布切换返回没有 BFF operation 标识的网关 502,客户端等待 1.2 秒后仅重试一次且复用同一 ID;若响应带 BFF operation 标识则保留“结果待核对”语义,不重复提交供应商任务。需在提交瞬间窄重建 Web,验证节点恢复生成且账单和供应商任务均只有一条。

  • 画布 Wan3.0 输入模式:视频设置按钮摘要应直接显示“多模态参考/首帧/首尾帧”;配置节点应展示模式说明,并按连接顺序把图片标为“首帧、尾帧”或“参考图1…N”,参考模式同时显示参考视频/音频数量;模式与连接数量或媒体类型不符时应在节点内提示并禁用生成。

  • 画布失败视频复用:配置节点已有直属空失败视频结果时再次点击生成,应原位复用该结果节点、立即清除旧 404 并显示生成中/读秒,不再在被选中的旧错误节点下方叠加一个不可见的新任务节点。

  • 画布 Wan2.7 模型入口:画布视频模型选择器会合并实时探测结果与已保存的能力列表;旧账号或旧浏览器配置也应显示并可选择 wan2.7-i2v-2026-04-25,连接 1 张首帧或 2 张首尾帧后可生成视频。

  • 视频任务重启恢复:本地 Proxy 在发布、重启或任务映射恢复期间短暂返回 404 时,前端会在 2 分钟可见性恢复窗口内继续显示生成中并轮询,不再立即把多个节点写成“视频任务查询失败(404)”;超过窗口后仍会显示真实错误。需在视频生成中窄重启 Proxy,验证节点持续读秒并最终恢复结果。

  • Wan2.7 I2V 视频创作台:新增百炼北京 Workspace 模型 wan2.7-i2v-2026-04-25,1 张连接图按首帧提交,2 张按连接顺序提交 first_frame / last_frame;支持 720P/1080P、2–15 秒、固定 30fps、可选水印,prompt_extend 固定关闭。请求通过既有 MAAS 北京 Key/Base 配对、OSS 临时输入、异步 task 轮询和持久任务恢复链路。需在视频创作台与画布分别验证单首帧、首尾帧、刷新恢复、失败重试、720P/1080P 以及水印开关。

  • 共享画布生成任务计费与恢复:编辑者提交图片或视频生成时携带当前画布作用域,服务端校验成员角色后从画布所有者账户预扣积分,避免新加入协作者个人余额为零时直接返回 402;所有者、编辑者和查看者可在当前共享画布继续查询已有异步任务,只有所有者和编辑者可创建或取消任务,画布外用户仍返回 404;图片任务结果地址保留画布作用域。需用“所有者有积分、协作者余额为零”的两个账号验证协作者生成视频和图片均进入读秒/轮询,刷新双方页面后任务状态和结果一致。

  • 多人画布协同第二阶段:Presence 现在携带画布世界坐标鼠标位置和实时选区,其他成员会看到带稳定身份色与姓名的远程光标、同色节点外框;光标尺寸在不同缩放级别保持不变,移动时 350ms 节流写入,静止时仅 5 秒心跳。节点操作和 Presence 写入会通过 PostgreSQL LISTEN/NOTIFY 唤醒鉴权 SSE 连接并立即补拉 revision,常态 500ms 轮询已降为 5 秒容灾补拉;SSE 带 15 秒 heartbeat 和 Nginx 禁缓冲响应头,断线由 EventSource 自动重连。需用两个账号验证操作延迟、移动、缩放、平移、多选、离开画布、SSE 重连/兜底、viewer 光标以及 5~10 人同时移动时的数据库连接与通知负载。

  • 云端画布引用素材读取:视频生成与失败重试优先根据 storageKey 走已登录同源媒体接口,不再优先请求节点中残留的 OSS 地址而触发浏览器 CORS Failed to fetch;同源请求网络失败或非 2xx 时显示“参考图片读取失败”及状态码。需验证旧画布 OSS 图片引用、多人共享图片引用、视频首次生成和失败重试。

  • 画布失败节点重试反馈:点击图片、视频、音频或文本失败节点的“重试”后立即进入生成中并开始读秒,引用素材恢复和旧 metadata 引用解析均纳入统一异常处理;提示词或参考图片丢失时直接显示节点错误,不再静默停在原错误页。需验证崩溃后视频重试、慢 OSS 引用恢复、丢失参考图、缺失提示词、重试成功及再次失败。

  • 画布视频生成即时反馈:点击生成后,源视频/配置节点会在解析和恢复已连接素材前立即进入生成中状态并开始读秒;素材恢复失败也会进入节点错误态,不再停留在“空视频节点”且没有反馈。需用含 OSS 图片引用的视频任务验证点击后立即出现动画与读秒、任务提交后继续计时、恢复失败显示具体错误、停止生成恢复空闲态。

  • 画布文本滚动与提示词输入区:节点生成提示词文本框高度由 96px 增至 144px;画布原生滚轮拦截会放行标记为交互区域的提示词输入框、文本节点、弹窗和下拉菜单,使长文本可直接用鼠标滚轮滚动,同时画布空白区域仍保持滚轮缩放。需验证图片/视频生成面板和编辑/只读文本节点的内部滚动,以及空白画布缩放。

  • 多人画布协同首版:新增独立画布项目、owner/editor/viewer 成员、72 小时邀请链接、实体级节点/连线增量操作、在线成员 Presence 与共享媒体引用权限;旧 user_app_state 画布在迁移和兼容保存时自动镜像,不清理旧数据。画布右上角显示协同连接、在线人数和只读状态,所有者与编辑者可创建邀请链接。需在两个不同账号和两个浏览器标签中验证邀请加入、不同节点并发移动、节点删除/连线修改、刷新恢复、viewer 修改回滚、断线重连、同一操作重放幂等、成员媒体预览,以及非成员访问项目和媒体均被拒绝。

  • Skill 广场首版:新增全局导航与 /skills 页面,统一 Registry 收录 AI 换脸、预置姿势、角色资产、视频尾帧和四个 Spicycam 互动视频 Skill,支持搜索及按生图、视频、画布、助手入口筛选;生图工作台、视频创作台与画布互动 Skill 弹窗均提供广场入口。需验证桌面/移动导航、筛选搜索、各卡片“立即使用”路由,以及三个创作入口在浅色和深色主题下的布局。

  • Spicycam 四个互动视频 Skill 已接入线上画布页面:底部工具栏新增“互动视频 Skill”按钮,菜单提供待机、打字、简单动作、礼物互动四项;选择有内容的角色图片后可一键创建保留全局视频模型/时长/质量/音频/水印参数的提示词与视频 Config 流程。网站模式助手的输入区同步新增“互动技能”菜单,系统提示可识别四个 Skill,并优先使用当前选中图片创建并执行视频生成流程。需在线上分别验证按钮入口、四项菜单、参考图连线、Config 参数继承,以及网站助手四项指令的工具调用与生成确认。

  • Infinite Canvas Codex 插件新增 spicycam-idle、spicycam-typing、spicycam-action、spicycam-gift 四个画布视频提示词技能:读取当前角色参考图和选区,按真人/动漫模式生成待机、打字、简单动作或礼物互动提示词,创建视频生成流程并触发生成;四者共用镜头锁定、锚点姿态、防穿透、性格与动态时机规范。需在新 Codex 对话加载本地插件后,分别用真人与动漫参考图验证技能发现、提示词节点、参考图连线、模型参数保留及实际视频生成确认链路。

  • 直播角色目录接入:顶部导航新增“直播角色”,通过登录态 BFF 读取 ecs110 Priya 直播项目的在线公共角色,支持按姓名、设定、标签、属性和媒体类型搜索,查看角色图片、视频与完整属性;兼容直播 API 的相对图片路径与 story_video 媒体类型,图片失效时自动用角色视频首帧兜底。图片或视频可逐项加入当前 Infinite Canvas 用户的“我的素材”,自动归类为人物并保留直播角色来源、角色 ID 与标签,之后可在画布和创作台复用、编辑标签或删除。需在生产验证角色总数、图片/视频预览、失效图片的视频兜底、重复导入拦截、两名用户素材隔离,以及 Priya 服务短暂离线时的错误提示。

  • 通用 Prompt 封面补全:GitHub 提示词源缺少封面时会按规范化 Prompt 与带预览图的镜像库精确匹配;远程图统一经只允许 raw.githubusercontent.com、限制响应类型/大小/超时的同源图片代理加载,避免浏览器直连 GitHub 失败。无匹配或远程图片加载失败时显示可辨识的本地预览封面,不再留下“无远程缩略图”空卡。列表卡片、详情弹窗和画布共用选择器统一使用完整图片 object-contain 展示并启用懒加载。需检查 /prompts 与画布提示词弹窗中的横图、竖图、透明图及失效链接。

  • 浏览器 E2E 验收套件(Playwright,web/e2e/):新增 01 Video Dataset 全流程(真实上传、完整流水线切 Shot、批量批准与 Training Example、Recipe/Dry-run/冻结 Snapshot)、02 Drama/CM/Sequence(SSE 实时状态、导入任务取消与重跑、DramaClaw 幂等导入 VDE 的同任务/409 断言、Shot 绑定 CM 角色)、03 本地 Agent 面板(连接、双页两个副作用任务 FIFO 展示、高风险确认拒绝/批准、两次刷新会话恢复不重复;Agent 侧为与 canvas-agent HTTP/SSE 契约一致的桩服务)。配套:Video Dataset 页重新挂载 Training Recipe/Snapshot 面板、BFF 白名单放行 POST sources/dramaclaw/import、start-stack.sh 修复可选 VFE 未配置时静默退出、bun test 固定为 src scripts 范围并在 tsconfig 纳入 e2e 类型检查。需在 ecs110 隔离目录按 web/e2e/README.md 启动真实全栈后人工确认三条浏览器流程与最终结果。

  • 音频分析(VDE):新增 audio_track/audio_segment/audio_event/audio_measurement/audio_review_decision 五表(迁移 c8d2a4e6f019),probe 成功后自动按流登记音轨;新增 durable audio_analysis_v1 任务(PCM 波形 800 桶、EBU R128 响度、SNR、语音/音乐/静音启发式分类、AV offset/drift、≥1s 静音事件,detector+version 幂等替换),POST /api/v1/assets/{id}/audio-analysis(operation_id 幂等、冲突 409)、GET /assets/{id}/audio-tracks、GET /audio-tracks/{id}(段/事件/最新测量)、段增删与测量审核 API;音频职责边界文档 docs/plans/audio-boundaries.md 约定 CM 管声音身份、DramaClaw 管叙事时间线、VDE 管分析与测量、Worker 管合成。需在含真实音频的素材上验证 ffmpeg 分析任务、无音轨素材跳过、测量审核流转与 Training Condition 的 audio 条件引用。

  • DramaClaw 深度集成:/api/dramaclaw/* BFF 重做为白名单代理(16 条读规则、12 条写规则、static 项目媒体),全部方法要求管理员会话;新增 120s/上传 600s 超时、256MB 体积上限、响应头白名单与 499/504/502 错误映射,tasks/stream SSE 不再被超时中断(修复每 120 秒断连)。VDE 新增 sequence_entity/sequence_shot_link 表与 /api/v1/sequences API,Episode 以 drama:episode:<项目 ULID>-<集号> 稳定引用,重导入保实体并递增 import_revision;新增 POST /api/v1/sources/dramaclaw/import durable dramaclaw_import 任务,按 source_uri+checksum 去重导入角色、分集、Beat 与成片媒体(绑定 Sequence ordinal),operation_id 幂等、逐集 checkpoint 可续跑、失败写入 result.failures 报告。需在有真实剧集的 DramaClaw 工程上验证导入、重复导入不重复下载、任务进度 SSE 与取消。

  • CM 角色管理接入:/api/cm/* BFF 白名单扩展到角色、参考图、声音库与媒体管理路由,角色增删改、参考图、声音 enroll 和媒体上下架/回收站等全部写操作要求管理员会话,非管理员写请求在 BFF 层直接拒绝;新增 typed adapter 覆盖 CM 角色/参考图/声音/媒体约 35 个接口并带 fixture 测试。VDE 新增 character_entity 与 shot_character_link 表,角色以 cm:character:<cm-id> 稳定外部引用注册,CM 端改名后重注册保持同一实体 id 和 Shot 绑定;Shot 绑定/解绑支持 main/support/cameo 与顺序,operation_id 重放幂等。需在生产分别以管理员与非管理员验证 CM 写操作、以及 Shot 绑定角色后 CM 改名不破坏绑定。

  • 视频剧情工厂的 VFE 源视频库重做为分栏文件浏览器:支持面包屑逐级导航、子目录卡片、目录树、路径搜索、目录优先的视频列表和固定加载操作区,避免超大目录下文件与层级混杂。

  • 视频创作台新增任意两个 OSS 视频拼接:可从素材库选择两条视频、交换前后顺序、设置转场时长,并保留当前提示词作为成片备注;媒体任务在后台持久执行,返回页面后自动恢复,完成后保存到我的素材。

  • 画布通用分组:工具栏新增“组”节点;普通节点拖入时高亮并吸附,拖出后解除归属,移动组会带动子节点;删除组保留子节点,复制、粘贴与 Duplicate 会重映射组和内部连线,在线/本地 Agent 也可创建 group 节点。需在深浅主题下验证拖入、拖出、缩放组、删除、撤销重做、刷新持久化、复制粘贴及 Agent 创建。

  • 画布资源引用完整性:普通提示词 textarea 在中文 IME 组合期间不会误提交,Backspace/Delete 会整枚删除相邻引用,候选菜单跟随缩放后的真实光标位置;Config 中已断开的 @[node:id] 会以悬空 token 保持可见,生成提交会提示并中止;复制、粘贴会重映射选区内部 token、清理未复制的外部 token,Duplicate 会同步保留有效输入连线;全局资源候选不再同时列出 batch root 与仍绑定它的 child,但直接连接的 child 仍可显式引用。需验证中文输入法回车、前后向整枚删除、长文本滚动和多缩放级别菜单定位,随后覆盖悬空 token 阻断、组内复制粘贴、折叠/展开批次候选及显式 child 连线。

  • 画布 Agent 素材 @ 引用:网站 Agent 与本机 Agent 的输入框可从全画布候选中插入稳定 @[node:id],消息以素材芯片展示,粘贴已有稳定 token 也会恢复引用;发送前会阻止已删除、已失效或非资源节点,图片引用从当前 storageKey/节点内容解析,并与手动图片合计限制为 6 张、28MiB。显式引用的文本正文每个节点最多注入 20,000 字符、每轮合计最多 40,000 字符,超出会标记截断。网站会话把安全 sidecar 随项目历史保存,本机 Codex/OpenCode 会话以用户隔离 localforage 恢复文本与 OSS 缩略图,不写入新增 base64、blob URL 或签名 URL;手动上传图片的历史缩略图仍未持久化。需分别在网站/本机模式验证中英文 @ 搜索、图片/文本/视频/音频、重复引用去重、节点重排后身份稳定、粘贴 token、整枚删除、悬空引用阻断、文本截断标记、6 张与 28MiB 边界、刷新/切换会话/删除会话后的画布引用历史恢复;同时确认原“选中节点自动引用”和网站上传图片到画布的行为不变。

  • VFE 目录树视觉收口:目录节点改为单行紧凑布局,展开箭头、文件夹、名称和缩写计数保持同一行;根目录使用低饱和选中态,并优化层级缩进、滚动密度和深色主题。

  • 视频数据处理工厂增加逐阶段数据检查器:源视频、去水印/字幕衍生版本、镜头边界、训练片段、Qwen3.7 Plus 标注正文和冻结导出包均可展开查看;训练片段从合并步骤拆为独立可追踪阶段。

  • Wan3 连贯续拍素材包:视频创作台“准备续拍”不再要求先从人物素材库手选图片;系统会在 ecs110 后台从当前参考视频自动提取最后 2 秒动态片段、最后一帧及 2–4 张等距人物参考帧,全部持久化到 OSS,并把人物帧归档到人物素材后自动载入 Wan3。需用包含同一人物多个镜头的横竖屏视频验证截帧数量、缩略图、刷新复用和续拍人物一致性。

  • 提示词库与人物提示词合并:顶部导航移除独立“素材库”,统一在“提示词库”内通过“图片 Prompt / 人物 Prompt”切换;原图片 Prompt 与 Character Manager 人物相关提示词的数据源和筛选能力均保留,旧 /asset-library 地址继续兼容。需检查桌面与移动端切换、筛选、复制和旧链接访问。

  • 人物提示词素材首屏性能:人物素材查询不再同步统计超大表精确总数,首批降为 24 组并按需续载;列表使用 CM/VFE 的 480px 缩略图,卡片与详情明确并排展示原图和对应 Krea2 生成图,只有打开详情才加载完整图片。需检查首次打开、连续滚动、筛选切换、原图/Krea2 对应关系及大图预览。

  • GPU 调度器用户归属:所有 Comfy 入队路径由 Web 登录会话注入稳定用户 UUID 与数据库显示名,Web→Proxy、Proxy→Scheduler 分别使用独立 HMAC、60 秒时间窗和一次性 nonce,浏览器伪造、过期、篡改、重放或直接 API 调用只会记为“未归属 / API 调用”且不阻断任务。状态缓存只保留内部聚合,响应按查看者即时脱敏:管理员查看安全显示名,普通用户只见“我/其他用户”,公开 JSON 不含用户 UUID;移动端按“模型 · 用户归属 · 运行/等待数量”紧凑换行。需分别以管理员、普通用户和直连 API 提交任务,验证 Krea/Qwen/FaceSwap/MiniMax/LTX 及工作流面板归属、角色切换和旧 Scheduler/旧 Proxy 兼容。

  • GPU 调度器状态自愈:状态代理分别缓存成功快照与短时失败,网络超时、HTTP 429/5xx、无效响应或空 GPU 清单在最近成功后的 120 秒内显示带快照时间和最近探测时间的“旧快照”,超过期限恢复真实不可用;未配置及 401/403 鉴权失败不使用旧快照。探测、BFF、浏览器采用 4/8/12 秒递增超时预算。需在调度器面板验证“刷新”会发送强制探测,断开再恢复调度器连接后页面可在 5 秒重试或重新聚焦时自动恢复,连续挂起请求会在 12 秒内结束且后续刷新仍可执行。

  • GPU 调度器能力矩阵:状态抽屉新增“工作流可用性与有效路由”,对每个登记 GPU 分开显示实际部署能力(可用、配置不全、探测失败、不可用、未知)与当前有效路由(路由顺序或未路由),未路由机器也保留真实能力结果;已知但本次未上报的工作流不会从矩阵消失。资源卡同时展示 ComfyUI / Python / PyTorch 版本、节点与模型资产数量区间、实例报告覆盖率和探测时间/旧探测标识;空闲只表示无任务,不再作为健康绿灯。缺项数量对所有登录用户可见,具体清洗后的节点/模型名仅管理员可见,异常项支持悬停、键盘聚焦和点击查看;窄屏横向滚动时工作流首列保持固定。能力读取使用独立脱敏 Proxy/BFF、30 秒短缓存与 20/25/30 秒递增超时,不拖慢 10 秒显存/队列轮询;抽屉打开时每 60 秒及重新聚焦自动读取,管理员“刷新全部”会请求带冷却的全实例深度探测。浏览器传输失败后在 300 秒内保留带探测时间和状态灯告警的 last-good 快照,关闭后立即重开不会复用已取消请求。需打开生图、视频和画布三处调度器抽屉,确认 RunPod 与 VPS141 的能力/路由差异、双路由和仅 VPS 路由、Identity/LTX 缺项、运行时摘要、普通用户/管理员明细差异、旧快照、深浅主题、触屏与窄屏矩阵均显示正确。

  • Kling 文生模式校验:选择 kling/kling-v3-video-generation 后,即使全局配置此前停留在 Omni 参考模式,页面也会将基础模型统一归一化为“文生”并按相同模式校验;填写提示词且积分充足时生成按钮应可点击。需切换 Omni 参考模式与 Kling V3 基础模型后验证按钮不会再因隐藏的旧模式被锁定。

  • 生图终态缓存收口:服务端记录已经成功、失败或取消时,会按日志 ID 与上游 task ID 清除浏览器 image_pending_tasks 中的旧恢复快照,不再在刷新后把已完成任务重新渲染成 98% 的“正在创建图片”。需在曾出现长时间假进度的浏览器刷新 /image,确认旧 pending 卡片消失,生成记录仍保留对应成功结果。

  • 剧情工厂列表兼容:DramaClaw 章节接口升级为带 total_chars、billable_chars、count 和 chapters 的统计对象后,Web 会提取其中的章节数组;工程、上传、章节、分集、节拍、角色、身份和任务列表也统一进行运行时数组归一化,异常响应不再触发整页 Invalid attempt to spread non-iterable instance。需在 /drama 打开已有章节的工程,确认页面正常加载且章节表展示 34 条记录。

  • GPU 显存遥测容错:中央调度器的 VRAM 探测失败仍按 0 MiB 参与派发并保持故障闭锁;最近一次成功不超过 120 秒时,代理输出 known=false、显式 stale/last-known 字段,画布显示“遥测重试中 · 最近成功 HH:mm / 上次空闲 X GB”但不绘制当前进度条,冷启动或超过期限才显示“遥测暂不可用”,异常期间每 5 秒重试。需断开并恢复一次 RunPod 反向隧道,确认旧值只作带时限提示且从不参与派发,恢复后自动显示真实空闲显存。

  • 2026-08-10 本地统一栈:根 Compose 已真实构建并启动 Web、生成代理、PostgreSQL、Redis、Video Dataset migration/API/Worker、隔离网络中的 VFE SSH tunnel 和 DramaClaw 1.0.4;canvas、generation-proxy、video-dataset /readyz、vfe-tunnel、dramaclaw /healthz 均通过启动验收。登录态下 /image、/video、/video-dataset、/drama 及三个 BFF 均返回 200;图像/视频历史各完成一次临时记录写入、读回、删除和确认清除。仍需人工浏览器检查布局、播放、切镜与长任务交互。

  • Canvas Agent npm 发布:推送 main 已不再触发公开发布;只有手动执行工作流或推送与 package.json 版本完全匹配的 canvas-agent-v* Tag 才会发布,需在最终 CI 审核中确认普通 main push 只测试/构建。

  • 远程主线整合:gz/orion_dev 与 gz/fix/justin-oss-binding 的生产加固、Justin OSS、持久媒体任务和 Media Worker 已语义合并到 integration/full-delivery;需在最终多服务本地验收中确认现有画布持久化和图片/视频/音频生成无回退。

  • Video Dataset Engine 基线:独立 clean tree 268a97a3890c09875510127b47a6c0bb460f4c5a 已无 .git、缓存或运行数据地导入 video-dataset-engine/;当前 255 项 PostgreSQL 驱动 pytest 与 Ruff 均通过,仍需最终 Compose/浏览器联调验收。

  • Video Dataset Engine 探测任务:上传会先持久化 asset_probe job,再尽力分发到 RQ;已实现 ffprobe 元数据、数据库 lease、退避重试、dead letter、立即持久取消、过期恢复、Last-Event-ID SSE、请求 ID 和服务鉴权。Alembic migration、API/Worker 镜像、真实 PostgreSQL + Redis + RQ、OSS readiness 与 Next.js BFF 冒烟均已通过;仍需在浏览器用真实大视频验收上传、探测与断线恢复。

  • Video Dataset Engine 切镜与 Shot 编辑:scene_detect 任务已用真实 PySceneDetect 与 RQ 验证两段边界;Clip/Shot 查询、原子 split/merge、revision 冲突保护、不可变 snapshot 和 audit 均已实现。需在 /video-dataset 时间线验证断线续订、并发编辑提示和人工交互。

  • Video Dataset Web 与 Compose:新增受会话保护且仅服务器持有 service token 的白名单 BFF、分页素材页、上传/重探测、SSE 自动续订与重挂载恢复、任务取消、自动切镜和 revision-fenced Shot split/merge;根 Compose 已真实运行 schema migration、VDE API、CPU Worker 和 Redis,资产/Variant/Export 改存 Justin OSS 独立前缀,/livez 与依赖 DB/Redis/Worker/OSS 的 /readyz 分离。生产构建、专项测试、Compose 和 BFF 冒烟通过,仍需浏览器多服务验收。

  • Video Dataset 清洗审核模型:新增独立的 overlay detection、quality measurement、caption annotation 和 review decision 表;分析写入已加入 Clip revision、live lease、job/Shot 复合外键、同 Asset Variant、operation payload 与并发幂等 fencing。旧行迁移会保留非 object JSON、创建 provenance job,并按历史 revision 保守回填;Shot merge 改为退役而非删除,保留完整分析历史。255 项完整 pytest、Ruff、空库升级 → 降级 → 再升级及 Alembic drift check 均通过;审核页面仍在后续 backlog。

  • Video Dataset Shot 清洗任务:新增 revision-fenced shot_analysis durable job;OpenCV 抽样检测字幕、水印、Logo 与黑边并保存技术、运动及描述性视觉统计,检测到覆盖物时由 FFmpeg 生成 SHA-256 定址的不可变 clean Variant,再保存 Visual/Motion Caption 与完整处理器版本。opencv-v2 analyzer 可对已有 Shot 显式重算,UI 只展示当前 revision 最新目标的指标,并明确角色一致性需等待 CM 身份绑定和真实模型。未检测到覆盖物会跳过清洗副本;取消、超时重试、陈旧 revision、无覆盖物和真实 FFmpeg 输出均有测试。需用真实多类型素材验证启发式阈值、视觉统计和清洗质量。

  • Video Dataset 人工审核:新增 Shot analysis 聚合、Caption 修订、批准/拒绝/退回 API,Caption/review revision 与操作 ID 提供并发和重试保护;Variant 媒体接口支持浏览器 Range。/video-dataset 审核窗可对比原始/清洗视频、叠加当前 Clip revision 的 mask、查看分项指标,并人工创建/修订 Visual、Narrative、Motion、Audio Caption 后提交完整审核历史。VDE 265 项 pytest、Web 36 项测试、TypeScript 与生产构建通过;仍需真实浏览器验证大视频 seek、视觉清洗质量和并发冲突提示。

  • Video Dataset 训练导出领域与页面:新增 Training Example/Condition、版本化 Recipe、Dataset Snapshot/Item/Rejection 与 Export/Item 模型及 API;repository 和 PostgreSQL trigger 强制 active approved Shot、同 Asset Variant/Condition、最新 Caption、当前 Clip revision、Recipe revision、操作幂等与冻结 provenance。/video-dataset 审核窗可为 approved Shot 创建全部 task contract 的 Training Example,训练导出面板支持 Recipe JSON 版本、dry-run 统计、全量分页 rejection、Snapshot split/状态、任务取消/重排、manifest/LTX/VACE Export 和 tar 下载。VDE 265 项 pytest、Ruff、隔离空库迁移、训练迁移降级/再升级和 Alembic drift check,以及 Web 36 项测试、专项 Prettier、TypeScript 与生产构建均通过;仍需真实浏览器验收。

  • Video Dataset Snapshot/Export Worker:Recipe dry-run 返回完整拒绝原因,Snapshot 以 checksum、外部实体和完整 Sequence 的传递闭包 cluster 防止 split 泄漏,并冻结 Recipe、Variant checksum、实际 Variant 尺寸/FPS、Caption、Condition、处理器版本、媒体区间和拒绝原因;durable Worker 支持 lease、取消、重试、过期恢复及 immutable content-addressed tar。项目内 LTX/VACE 小样本、mask/reference/caption/统计/拒绝清单和单 Range 语义均已通过测试,Web 白名单 BFF、任务恢复和下载交互已接入。仍需真实 LTX/VACE consumer、浏览器下载和大 OSS 对象验收;当前 source Variant 通过冻结 source_range_ms 表达 Shot 区间,Range 响应仍会先 materialize 完整存储对象。

  • 画布媒体持久化:新生成图片/视频只有在同步写入 Justin spicy-cc/infinite-canvas/media 成功后才记为完成,PG 保存稳定 storage key,读取时按需获取新 URL;历史 IndexedDB Blob 会先 HEAD 实际 OSS 对象,缺失时使用 repair PUT 自动补传。需用新浏览器验证同一记录可跨会话加载,并核对旧桶无副本记录的占位提示。

  • 媒体持久化 500 修复:将 next.config.ts 的 experimental.proxyClientMaxBodySize 提升至 512MB,解决 happyhorse 图生视频(>10MB)上传时 body 被 Next.js proxy 截断导致 RequestContentLengthMismatchError 的问题;同时为 media storage API 的 PUT/GET/HEAD 路由添加 try/catch,避免异常直接返回原始 500。需在画布中用 happyhorse 生成较长视频验证持久化不再失败,并确认已有视频/图片可正常加载。

  • Codex App 插件文档:新增插件安装教程,区分 AI 自动安装、手动安装和本仓库开发调试安装;同步优化插件 README 与技能说明。

  • 配置与用户偏好:每个模型渠道新增 OpenAI / Gemini 调用格式选择,默认 OpenAI,切换默认格式时同步更新默认 Base URL;渠道 Tab 增加紧凑醒目的提醒,说明模型是否可选需要到“模型”Tab 选择。

  • Gemini 调用格式:支持拉取 Gemini 模型列表,并用于文本问答、在线 Agent 工具调用、基础生图和图生图请求。

  • 音频和视频生成:选择 Gemini 调用格式时先给出不支持提示,仍需使用 OpenAI 兼容渠道。

  • HappyHorse 多图参考:在视频创作台和画布分别验证 happyhorse-1.1-r2v 可按顺序接收 1–9 张图片,界面与实际请求的 [Image 1]、[Image 2]… 编号一致,中文“图片1”写法会自动转换;同时验证 i2v 只能使用 1 张首帧图,i2v/r2v 仅展示并传入官方支持的 720P/1080P、ratio 枚举和 3–15 秒时长,帧率固定显示 24fps,不提供无效选择;画布生成张数会按多任务生成对应数量的视频节点,配置节点切换生图/视频模式时会自动切到对应默认模型,手动选择的比例优先于上游图片继承比例,video-edit 只能使用 1 个视频并附加最多 5 张参考图,超限或混入不支持的媒体时生成按钮会显示明确原因。

  • 生成服务启动链路:根 docker-compose.yml 是唯一服务图,local/deploy 文件仅作兼容引用;scripts/start-stack.sh 管理 Web、代理、PostgreSQL、Redis、Video Dataset API/Worker、可选 VFE SSH tunnel 与 DramaClaw。Web 会等待核心依赖真实 ready,并通过内部服务名访问 /v1/images/generations、/v1/images/edits 和 /v1/videos;缺失模型密钥或上游网络异常时显示首个真实原因,而不是裸 500 或“全部视频生成失败”。

  • 生成模型就绪检查:访问 /v1/live 确认本地代理进程可用,再访问 /v1/providers/status?refresh=true 与 /v1/ready,确认探测会实际区分 Key/权限、上游网络、额度和 OSS;主动停用模型列在 disabled,可换 Key 恢复的模型列在 optional_unavailable,二者不影响项目就绪;启用后仍故障的核心模型列在 unavailable 并返回 503。前端选择器的可选择区只保留 ready=true 的模型,wan2.7-image 仍归入生图模型,旧浏览器里的不可用选择会自动回退。

  • 默认渠道模型状态:配置页、画布、图片页和视频页只允许选择实测或探测可用模型,同时在所有共用模型下拉框底部通过合法的 Radix SelectGroup 保留置灰的不可用模型并展示 Key invalid、远端输出 500、远端工作流连接失败等简短原因,打开下拉框不得再触发 SelectLabel must be used within SelectGroup;更换有效 SMARTSTUDIO_API_KEY 并重启代理后点击“拉取模型”,三个 SmartStudio 模型应从不可用区自动恢复为可选择状态。

  • HappyHorse/Wan 视频协议:分别验证 HappyHorse i2v、r2v、视频编辑和 Wan 2.7 r2v;参考媒体统一通过 infinite-canvas/generated OSS URL 中转,HappyHorse i2v 不发送无效 ratio,并在提交前将参考图解码、纠正方向、规范化为 20MB 内 JPEG,i2v 最小边补足 300 像素、r2v 最小边补足 400 像素,极端首帧比例在本地直接说明;临时输入签名覆盖百炼 24 小时任务有效期,代理不再提前清理排队任务;Wan 2.7 使用当前官方的 resolution、ratio、duration、prompt_extend、watermark 参数,HappyHorse 全系列使用与北京 Key 一致的北京端点。

  • 生成失败错误:分别用安全提示词、无权限 Key、额度不足、不可下载的参考媒体、非法 HappyHorse 图片尺寸和会触发供应商审核的输入验证;画布图片与视频节点应显示首个真实原因,百炼异步错误同时保留 InvalidParameter code 与详细 message,创建阶段的内容审核拒绝为 422,异步任务审核失败也应明确显示 DataInspectionFailed,媒体下载失败为 502,批量生成不再只显示“全部图片生成失败”“全部视频生成失败”或裸 500。

  • 图片模型调用方式:无参考图时验证 qwen-image-2.0-pro 和 wan2.7-image;已停用模型只能出现在画布下拉框的不可用分组且不能选择;可用的 qwen-image-edit-* 等编辑工作流在没有参考图时应立即提示先连接图片,不再静默改用另一个文生图模型。

  • 逐模型真实生成:在宿主机运行 python3 scripts/test-generation-models.py;测试器使用 test-image/ 内两张安全人像,逐个调用 /v1/models 公开且就绪的生图、编辑和视频模型,每个模型只生成 1 个最低必要规格样本,成功产物以模型名保存,未就绪或失败模型在 test-report.json 和 README.md 中保留供应商原始错误及根因分类。测试器不读写 PostgreSQL,也不修改画布。

  • 数据隔离:本地及部署 Compose 冷启动后确认 PostgreSQL 不发布宿主机端口,部署 Web 强制连接当前 Compose 的 postgres/infinite_canvas,不读取宿主机或 /mnt/cypher 项目的 PostgreSQL;主画布写入 infinite_canvas;生成内容只写入 Justin spicy-cc 的 persona-video/、infinite-canvas/assets/、infinite-canvas/canvas/、infinite-canvas/media/ 授权前缀;把主画布 DATABASE_URL 改为远程主机或其他数据库名时应拒绝连接。

  • 独立画布恢复:分别执行单画布恢复和 node scripts/restore-local-canvas.mjs --all,确认工具只读取当前目录快照、只操作工作目录匹配的 Compose PostgreSQL、只上传到 infinite-canvas/media;已有且非空的当前画布保持不动,缺失或空节点画布从快照补回。全量恢复后应有原快照中的 11 张画布、439 个节点、434 条连线和 256 个引用媒体;浏览器 IndexedDB 中更新时间更晚的空画布不得覆盖 PostgreSQL 中包含节点的画布。

  • 生成结果重新生成:选中或悬停成功的图片、视频、音频节点,验证节点内出现“重新生成”按钮;右键生成结果也可重新生成,且继续使用该结果保存的模型、提示词、尺寸或视频时长等参数。失败节点仍显示“重试”,文本生成结果可从悬浮工具栏或右键菜单重新生成。

  • Video Dataset 分析与审核一致性:analyzer 升级为 opencv-v3 并将任务类型版本化为 shot_analysis_v3,Worker 拒绝 analyzer_version 不匹配的任务;Shot 分析接口只返回当前 Clip revision 最近一次成功任务的 overlay 与指标,Caption 只展示当前 revision 各类型的最新一条;Caption 追加与审核写入的乐观锁改为按 Clip revision 隔离,跨 revision 并发编辑不再互相阻塞;视觉统计的饱和度均值/方差改为按像素加权的正确合并算法;审核弹窗可看到结果所属的 processing job。需在 Web 审核流中验证重算后旧结果不再混入、并发编辑 Caption 与审核时冲突提示正确。

  • Video Dataset 美学评分:Shot 分析新增 aesthetic 指标组(analyzer 升级为 opencv-v4),包含 Hasler-Süsstrunk 色彩丰富度、清晰度、曝光平衡、对比度、饱和度均衡五个可解释 0-1 分项及加权总分,以 opencv-aesthetic-heuristics assessor 与版本化 provenance 持久化;审核弹窗会直接展示新指标组,重算后旧版本结果不再混入。需用真实素材验证各分项阈值与观感是否一致;角色一致性评分仍需等待 CM 身份绑定与真实模型。

  • 本地全栈一键启动:scripts/dev.sh 已成为根 Compose 的兼容入口;up 纳管 web(:3000)、proxy(:8001)、vde-api(:8010)、vde-worker、dramaclaw(:8780)、PostgreSQL 与 Redis,migration 自动应用且按真实 readiness 启动 Web,status 查看同一 Compose 项目,down 停止整栈。真实冷构建和四项 HTTP readiness 已通过,仍需逐页人工确认画布、素材、提示词、剧情工厂和长任务交互。

  • Video Dataset 审核闭环增强:新增 POST /clips/{id}/reviews/bulk 批量审核,按 operation_id + Shot 派生确定性子操作 ID,服务器端读取当前 review/Caption fencing revision,重复提交幂等返回,非本 Clip 或已退役 Shot 按条跳过并返回原因;GET /clips/{id}/shots 支持 review_status 过滤。时间线页新增状态下拉过滤、任意多选与批量批准/拒绝(保留合并仍限两条相邻),审核弹窗标题栏支持上一条/下一条队列导航,人工审核区新增画面质量、运动表现、色彩美学三项 1–5 分项评分并随 details.scores 写入审核历史展示。VDE 269 项 pytest 通过;仍需真实浏览器验证批量审核交互、状态过滤与队列导航。

  • 旧 VFE 数据迁移与提示词库接入:VFE saved_frames 已全量只读迁移进本地 prompt_catalog_items(provider=vfe,共 109,739 条、其中视频 891 条,与源库对账一致;导入脚本支持 keyset 分段并行、断点幂等重跑与 TCP keepalive);提示词中心新增来源(GitHub/vfe)、类型(图片/视频)、分类与双语标签筛选,大结果集的分类/标签 facet 走 5 分钟内存缓存与单飞合并,冷查询约 12 秒、热查询百毫秒级。需在 /prompts 实际切换 vfe 来源、标签与分页确认数据与缩略图正常。

  • VFE 原片源库接入:Video Dataset 新增 /sources/vfe/videos 游标分页和 /sources/vfe/import;服务端限制路径、扩展、目录响应体、下载大小、重定向和容器签名,流式导入后复用 SHA-256 内容寻址、来源幂等和 asset_probe。Compose 内部 SSH tunnel 已实读 804,168 条源视频,浏览器首屏加载 50 条;真实导入 209,350-byte MP4 后 asset_probe 成功,同路径重试 created=false,尺寸变化返回 409 vfe_source_changed。仍需用长视频继续验收切镜、审核、冻结与导出。

  • 素材库(Character Manager 接入):新增 /asset-library 页面与白名单 BFF /api/cm/*(只放行 asset-library 的 tags/images/stats/serve 只读路由);页面展示 16,018 张已标注素材,支持正常/NSFW 切换、标签中英文搜索与场景/姿势/服装/镜头等维度标签云筛选,缩略图直读 OSS。需在浏览器验证标签筛选、翻页与图片加载。

  • Wan3.0 内测模型接入:代理新增 wan3.0-video(文生视频与最多 10 张参考图,前端 15 秒轮询、30 分钟超时),配置页与画布视频模型列表已可见;已改用国际站公共端点 dashscope-intl.aliyuncs.com + 新 Key(2026-08-06 实测:直连与代理 :8001 端到端各成功生成一条 MP4 并下载校验通过,maas workspace 方式因 Key 不属目标 workspace 已弃用,原 Kevin/Justin 四套 workspace Key 留作备用)。需在画布中实际选择 wan3.0-video 生成视频确认交互与回收。

  • MiniMax H3 本地工作流接入:视频创作台与画布已加入 minimax-h3,支持纯文本或 1 张首帧图、480/720 档、5–15 秒、16:9/9:16/1:1/4:3/3:4、可选 Seed,固定 24fps、原生立体声音频、H.264 与单条输出;代理任务映射可跨重启恢复,调度器会分别裁剪并探测 T2V/I2V 两条真实执行图,当前 vps141:8188 的 20 类节点与 4 个模型依赖均为 ok。单测、类型检查、生产构建、Compose 重建和无生成浏览器验收已通过;仍需人工各执行一次最低规格 T2V/I2V,确认实际 MP4 音轨、时长、比例和 OSS 历史恢复。

  • MiniMax H3 DaSiWa 输入路由已按 1 图(I2VA/L2VA/REF2VA)、2 图(FL2VA/REF2VA)、3–4 图(仅 REF2VA,超过 4 图提示精简)完成单测覆盖,并在 vps66 真实 GPU 上分别通过 I2VA、同角色双图 FL2VA、三图 REF2VA 生成与抽帧视觉复验。异角色首尾帧 FL2VA 虽技术链路成功但出现身份融合,已明确判为质量失败;FL2VA 模型提示、输入错误和画布视频工具箱现统一强调同一角色与身份融合风险。隔离全栈的 1680px 桌面任务入口与 Agent 布局、390px 移动端流程菜单/视频工具箱/Agent 回归均通过;生产发布后仍需验收拓扑变化时模型实时筛选、任务进度、OSS 回写与刷新恢复。

  • Krea2 v2.1 编辑运行时兼容:中央 Scheduler 已把单图流程收敛为一次带完整用户提示词的 Krea edit,关闭默认 HMNSFW 风格 LoRA,并移除会再次改写提示词的 tiled diffusion 与 face detailer;随后只做确定性 1.5× 模型放大。RunPod 已补齐并锁定 v2.1 UNET 与上采样模型,保留原 T2I 同名权重不覆盖;定向任务实际分配到 RunPod 并成功生成 1536×1536 PNG,/view 返回 200 且解码通过,门颜色指令 gain 0.6579、保护区相似度 0.9675。精确 Scheduler 提交 a48923483c76dd5d4eb05595e5ed5a7975335e58 已部署,生产中 VPS141/RunPod 两候选均为 ok;仍需在生图工作台确认 OSS/PG 历史回写。

  • A100 调度池退役与 RunPod 接力:香港 4×A100 与韩国 A100 已全部从生产调度中移除。RunPod RTX PRO 6000 经既有回环隧道加入中央 Scheduler;本次已在空队列下补齐 Krea2 v2.1 的锁定 UNET/上采样资产,并把 krea2-v21-edit、krea2-v21-multi-edit 同时恢复为 VPS141/RunPod 双候选。生产 capability 对两端点的两台候选均报告 ok、无缺节点/模型,精确镜像健康且重启计数为 0。vps141 的 8188/8189 继续共享物理 GPU 资源锁;Identity 与 LTX 的既有缺项保持不变。

  • 图片/视频工作台 Spicy 提示词分流:保留外层“Spicy 提示词库”,并按工作台上下文展示内层 SFW/NSFW;图片文生图读取 normal / spicy 素材图片与 Prompt,图片编辑读取 scene_edit_sfw / scene_edit_nsfw,视频读取 scene_video_sfw / scene_video_nsfw。Web 全量测试 101 项通过、4 项按既有数据库条件跳过,TypeScript、生产构建和 Compose 重建通过;登录态浏览器已逐项确认六个请求返回 200,未触发真实生成。仍需人工检查长 Prompt 卡片的阅读体验和移动端布局。

  • Krea2 v2.1 多参考编辑:1–4 张图片仍按图片1底图、图片2/3/4 分阶段处理;Scheduler 现在会把完整用户指令注入每个实际启用阶段,固定 seed、关闭默认风格 LoRA,静态裁掉未选分支,并保留最终全局指令 pass 与确定性放大。RunPod 三图定向实测成功,完整 endpoint 输出经 /view 解码为 1536×1536 PNG:橙色门 gain 0.9354、明确紫色屋顶指令 gain 0.5098、保护区相似度 0.9239、屋顶外紫色泄漏 0.37%。模型的第二图训练语义是“底图场景 + 人物/主体参考”,不是通用颜色/材质解析槽;任意物体属性应在提示词中明确写出,不能把 ref_boost 当属性路由。仍需在工作台分别用 1 张和 4 张参考图验收阶段旁路、OSS 持久化与 PG 历史恢复。

  • Wan3.0 视频第三路 wan3.0-video-2:代理新增 WAN3_2_BASE_URL / WAN3_2_API_KEY(新加坡站,只能走公共国际站端点 dashscope-intl.aliyuncs.com,workspace 专属端点返回 Endpoint.AccessDenied),三路的 provider、Key、提交与查询 URL 统一由 WAN3_ROUTES 映射,模型清单、就绪检查、wan3-2 连通性探测和任务轮询已接入;前端配置页、画布与视频创作台模型下拉框可见 wan3.0-video-2,首帧/尾帧模式、15 秒轮询、30 分钟超时与多模态参考规则按 wan3 家族统一判定。新 Key 已直连该端点验证可创建 wan3.0-video 任务。需重启代理后在画布实际选择 wan3.0-video-2 生成一条视频,确认参数传递、绿网请求头、结果回写与临时输入回收,并核对另两路未受影响。

  • 工作台不限并发生成与逐任务取消:视频创作台与生图工作台不再是「一个任务跑完才能提交下一个」。生成按钮只在参数非法时禁用,每次提交把任务卡片追加到结果区顶部,多个任务卡片并列共存、各自显示实时耗时(整页只用一个 1 秒 tick 驱动,避免 N 个定时器),失败或已取消的卡片各自用原任务参数重试而不是当前表单,预览历史记录时正在进行的卡片不会被清掉。代理新增异步生图任务链路 POST /v1/images/generations/tasks、POST /v1/images/edits/tasks、GET /v1/images/tasks/{pid},与原同步端点共用同一份实现体(同步端点语义不变,画布调用方零改动);生图产物先存 OSS 换稳定签名 URL 再落任务状态,因此刷新页面后正在跑的生图任务会自动恢复并继续计时(未完成任务记在 localforage image_pending_tasks)。取消按通道能力分派:8020 调度器任务打 POST /v1/tasks/{task_id}/cancel(排队中真停、已在 GPU 上跑的会摘队列并只在命中本任务时 interrupt),百炼系打 tasks/{id}/cancel(官方只允许取消 PENDING),生图同步类模型只中断请求并停掉代理内的后台协程,seedance/SmartStudio/MuleRouter 返回不支持。UI 必须诚实区分:真取消提示「已取消,未开始的排队任务不会计费」,否则提示「任务已在上游运行,无法真正取消;已停止本地等待,费用可能仍会产生」并在卡片标注「已放弃等待(上游仍在运行)」。生成记录新增「已取消」状态。注意生图记录改为每张一条(原来一批多张合并成一条)。需人工验收:连点 5 次生成确认卡片并列且各自计时独立;取消排队中的调度器任务后 GET /v1/tasks/{tid} 变 CANCELLED 且其他任务照常完成;取消正在 GPU 上跑的任务确认另一实例任务未受影响;生图跑到一半刷新页面确认卡片恢复;取消已 RUNNING 的百炼任务确认出的是 warning 而不是 success;失败卡片改一次表单后重试确认用的仍是原参数;画布批量生图、视频生成与媒体批处理取消三条路径回归。8020 调度器改动尚未部署到 vps141,部署前调度器类模型的取消会降级为本地放弃。

  • /video-dataset 的页面标题与全局导航名称统一调整为“数据处理”,避免与“剧情工厂”混淆。

  • 视频创作台新增“尾帧参考图”持久化展示区:自动截取的尾帧在 OSS 与“我的素材”中保存后,会在工作台以缩略图横向陈列,刷新页面后仍可恢复;支持大图预览、设为首帧、设为尾帧、下载和删除。需分别用横屏、竖屏参考视频验证后台截帧完成后即时出现、刷新恢复和再次用于视频生成。

  • 视频参考素材 AI 编排:视频创作台的参考图缩略图可点击打开自适应大图预览;提示词区新增“AI 结合素材优化”,固定调用 qwen3.7-plus 国内下绿网通道,将图片与参考视频首帧按页面顺序交给多模态模型,并在最终提示词中明确使用“图片1 / 图片2 / 视频1”等编号描述人物身份、场景、动作连续性、镜头运动与节奏。需用两张人物图和一个参考视频验证编号顺序与实际提交顺序一致,切换横竖图确认预览不裁切。

  • Wan3 自定义时长:视频创作台与画布共用的 Wan3 设置面板在“智能 / 2s / 5s / 10s / 15s / 20s / 30s”快捷项下增加 2–30 秒整数输入,输入值继续经过模型合同与参考视频总时长约束后提交。需分别输入 7 秒、23 秒验证请求采用自定义时长,并确认超出范围时归一化而不是发送非法值。

  • 视频参考图误删恢复与排序提示:参考图删除后保留最近一张的“撤销删除”入口,并按原索引恢复;缩略图底部原先不易辨认的白色圆点改为带悬停说明和无障碍标签的深色左右箭头,位于首尾时隐藏无效方向。需连续删除、撤销并调整三张参考图顺序,确认编号与最终请求顺序同步。

  • 视频创作台提示词区视觉收口:按 frontend-design 的克制工具台方向,将会挤压标题的横向长按钮改为独立信息头和三列紧凑工具栏;标题、输入要求、素材编号提示形成稳定层级,按钮统一为“AI 优化 / 提示词库 / 我的素材”,窄中栏不再逐字换行或溢出。需在 1024、1280、1440 宽度及浏览器 125% 缩放下确认标题完整、按钮可读、结果栏不被挤压。

  • 视频参考区窄栏适配:参考视频标题与“自动尾帧”开关独占首行,开关文案禁止竖排;准备续拍、素材库、上传组成自适应工具栏。生成中卡片的取消操作改为带水平安全边距和层级的“取消任务”按钮,避免结果栏缩窄时被边框裁切。需在 1024 宽度与 125% 缩放下确认两处完整可见。

  • 视频创作台“AI 结合素材优化”会先把站内参考图和视频预览转换为模型可读取的数据地址,再提交 qwen3.7-plus 下绿网;同时移除误判正常短提示词的固定字数门槛。

  • Wan3 视频时长选择改为稳定的四列布局,“智能”不再竖排;自定义时长允许连续输入 10、11 等两位数,失焦或回车后再按 2–30 秒校验。

  • 剧情工厂角色资产批量生图会持久化项目、Skill、模型、角色状态与异步任务 ID;离开页面或刷新后再次进入会恢复同一任务、收取完成结果并上传角色资产,不再把后台进度重置为 0。

  • “我的素材”删除改为 PostgreSQL 原子删除并持久化删除标记;只有云端确认后才提示成功,失败会恢复卡片,其他标签页或旧 IndexedDB 快照也不会再把已删除素材合并回来。

  • 数据处理训练片段与 Qwen 标注链路:第 5 步训练片段的 FFmpeg 输出同时锁定 CFR 24fps、24k 视频时基和目标帧数,不足约 2 秒的短切镜会仅在训练副本末尾补帧到 49 帧,后置校验兼容 23.976/24fps 的标准探测舍入,并在异常时回显实际帧率;交给百炼读取的临时 OSS 签名地址会从同区内网域名转换为同桶公网读取域名,服务器自身上传下载仍保持内网。需从失败处重新排队现有任务,确认四个 Shot 均满足 F % 8 == 1、宽高为 32 倍数并继续完成 Qwen 标注与冻结导出。

  • 数据处理的去水印/去字幕步骤不再把启发式零命中笼统显示为“已跳过”:阶段标题与详情会说明检测器、候选/命中/清理数量及真实原因,并明确提示零命中仍需人工抽查;后端也会把启发式零命中标记为需要复核。

  • 数据处理去水印/去字幕 GPU-only:新建 Asset Pipeline v2 在读取素材前确认 Scheduler 存在通过专用 Bearer 数据面探测的 RunPod candidate;VDE 仍以 multipart 交给内网 Scheduler,Scheduler 再用 1 MiB raw chunks、内容 SHA-256、稳定任务目录把视频送到 RunPod,其他 Comfy 工作流继续使用原 multipart 上传。相同幂等键和内容会复用任务与输入,不同内容返回冲突且不会删除原 PENDING 输入。结果严格校验 RunPod CUDA、逐帧 coverage、全量 metrics 与截断样本标记:cleaned 仅在二次 CUDA 复检无残留后下载并校验 artifact,confirmed_absent 只接受完整覆盖和零命中,uncertain 同时支持低置信零命中与修复后仍有高置信残留两种诚实形态,均不采用清理副本并继续字幕阶段;UI 计数来自全量 metrics 而非样本数组长度。远端明确 transient FAILED、task 404 或不可变 artifact 校验失败会递增持久 generation,timeout/network 复用同 task;自动重试受 max_attempts 限制,手工重排还会把首个未完成 v2 GPU stage 再加一代。生产 Compose 已把 VDE Worker /tmp 改为磁盘 bind,验收要求可用空间至少为 8 GiB 输入上限加 20 GiB 输出上限再加 1 GiB。需部署后用含水印与硬字幕视频验收三态 manifest、总量计数、幂等重提、衍生 Variant、人工复核文案与 OSS 内网读写。

  • 生产 VDE API 默认通过 Docker host-gateway 访问 ecs110 宿主机的 VFE 源视频服务 8899,不再因未注入 VFE_BASE_URL 显示 “VFE source service is not configured”;部署后需验证 VFE 目录接口真实返回数据。

  • qwen-image-3.0-pro 默认加入生产模型目录,并由新加坡国际站 Key 与主动探测决定是否可选;生产验收会要求该模型实际返回 ready=true,避免功能开关在重建后把模型静默隐藏。

  • 视频创作台的普通参考图与自动尾帧参考图统一改为可缩放大图预览,缩略图显示明确的放大图标;点击后直接进入支持滚轮缩放、旋转和翻转的全屏预览,不再停留在不可继续放大的静态 Modal。

  • 视频创作台参考视频卡片新增明确的放大入口;点击缩略视频会打开大尺寸播放器,可直接播放、拖动进度和全屏查看。

  • 生图工作台参考图和生成结果统一提供明确的放大入口;点击后可查看原图并使用缩放、旋转等预览工具。

  • 生图工作台新增“AI 换脸”和“预置姿势生成”两个专用 Skill:换脸自动切换 ComfyUI FaceSwap 并强制图片1为底图、图片2为脸源;姿势生成自动切换 Krea2 Edit,提供正面站姿、侧身回眸、自然行走、自然坐姿、动态战斗、单膝跪姿六个预置动作,并把姿势约束写入实际生成请求。

  • 画布已有内容的图片节点新增“Krea2 固定编辑”Skill:点击后自动回填工作流固定提示词、切换到 Krea2 v2.1 Edit,并立即以当前图片为参考图生成结果;Skill 同时进入统一 Registry 的生图与画布分类。需验证按钮只出现在已有图片内容的节点、点击后无需再次提交,并确认新结果节点保留参考连线与固定提示词。

  • 画布已有内容的图片节点把固定编辑、预置姿势生成和角色资产套图统一收入口“图片 Skill”:姿势选择六种预设后直接生成,角色资产选择三视图、表情九宫格或三行设定表后按固定比例直接生成;Skill 广场的两个入口也会明确跳到画布。需验证三类 Skill 都使用当前图片作为唯一参考并创建连线结果节点。

  • 画布项目列表会根据服务端实际协作者数量标注“共享画布”;只有成员数大于 1 的项目显示标识,个人画布不显示,悬停标识可查看当前用户是所有者、可编辑或仅查看角色。需分别用所有者和受邀账号核对共享项目标识及个人项目不误标。

  • 数据处理与剧情工厂的主站 BFF 统一增加有界超时,浏览器只读请求遇到网络瞬断或 502/503/504 会按短退避自动重试,写操作保持单次提交,避免服务短暂抖动被表现成整页崩溃或重复创建任务。

工作台运行稳定性

  • 数据处理与剧情工厂增加独立异常边界;单页运行异常不再拖垮整个站点,可直接重新连接并重新读取服务端状态。
  • 浏览器运行时错误和未处理 Promise 异常增加去重上报,生产日志可按用户、页面和错误栈定位反复崩溃根因。
  • 数据处理和剧情工厂的只读请求在短暂 502/503/504 时自动重试,写操作保持单次提交,避免重复创建任务。
  • 生图工作台 AI 换脸参考图上传改为逐张追加并即时反馈:第二次上传会明确显示为‘脸源’,单张失败不会清掉已上传的底图,达到两张后提示已就绪,并阻止继续添加超出模型上限的图片。需用不同的底图与脸源各上传一次,确认两张缩略图同时保留且可生成。

视频创作台结果预览

  • 生成视频统一放入受控预览舞台,横屏、竖屏和方形视频均按原始比例完整显示;结果卡最大高度受视口限制,不再因竖屏比例撑满整页。

VFE 原视频库加载性能

  • VDE 接入层缓存最近 128 个目录、搜索和分页结果 60 秒,重复打开与返回目录不再重复扫描 82 万条 OSS 目录数据;API 启动时预热默认目录,避免重启后的首位用户承担冷查询耗时。
  • 同一目录上游短暂不可用时最多复用 5 分钟内的最近结果并标记为旧数据,避免目录闪空;导入视频仍实时校验源文件,不使用目录缓存替代媒体校验。

VFE 原视频预览

  • 数据处理的原视频目录为每条视频增加“预览”,通过管理员鉴权的 BFF 和 VDE Range 流式接口播放,支持进度拖动、原比例展示与全屏;无需先导入和探测。
  • 预览响应强制 private, no-store,不会把源视频公开缓存或暴露 VFE 源站地址。

VFE 原片可恢复迁移

  • Video Dataset Engine 新增 video-dataset-vfe-migrate,按 scan → import → reconcile → report 四阶段维护原子 JSON checkpoint;扫描仅通过只读 VFE API,保存旧路径、目录/分组、mtime、源字节数及 pending review 参考,不修改旧系统,也不会把历史素材自动标记为 approved。
  • 导入按来源路径与内容 checksum 幂等复用 Asset,单项失败写入 checkpoint 后继续;对账独立核对文件数、字节数、checksum、数据库行、持久存储原片和 Range 播放容器签名。需在真实 VFE 先执行小批 dry-run 与故障续跑,再执行全量迁移并保存最终 report;回滚边界为停止控制器并保留旧 VFE 只读源,目标侧导入记录不覆盖或删除旧数据。

画布桌面端与移动端浏览器回归

  • 390px 小屏下 Agent 使用全屏覆盖层,桌面拖拽宽度手柄隐藏;收起后面板进入不可见零宽状态并释放画布触控。顶部栏缩短间距、限制标题宽度、隐藏桌面账户状态与协同浮层,Agent 保留图标入口。
  • 移动端隐藏会覆盖底部横向工具栏的桌面缩放/帮助条,触控画布仍可缩放;真实隔离 PostgreSQL + 候选 Web 的 Chromium 回归已验证底部“流程”可点击、Agent 宽度 390px、无页面横向溢出和收起恢复。桌面 1280px 回归同时验证 Agent 面板在 440px/320px 宽度下无工具栏溢出。E2E 画布列表读取已同步 POST 可见性协议。

CI 门禁

  • PR 与 main 推送自动运行五项检查:Web(typecheck / 单元测试 / 生产构建)、Generation Proxy、Media Worker、Video Dataset Engine(pytest + ruff)和 Canvas Agent 构建。向任意分支发 PR 即可在检查页看到结果。

  • Web 单元测试通过 web/bunfig.toml 预载占位 DATABASE_URL,本地直接 bun test 即可运行,不需要真实数据库。

  • 根 Compose 的对外端口支持环境变量覆盖(WEB_HOST_PORT 等),配合 docker-compose.verify.yml 镜像改名可以在同一台机器上隔离验收,不干扰生产容器和镜像。

  • 多服务隔离验收脚本 scripts/verify-local-stack.sh 已在 ecs110 通过一次完整冷启动:PostgreSQL、Redis、Web、Proxy、Media Worker、VDE API+Worker(共 8 个核心容器,Media profile)全部真实构建、启动并通过 readiness。主机没有 pinned DramaClaw 1.0.4 基础镜像时,可用 DRAMACLAW_VERIFY_IMAGE=<已有镜像> 复用现有 DramaClaw 镜像。

  • 画布本地 Agent 侧边栏新增 OpenCode Spicy 引擎,可流式对话并复用按 FIFO run 绑定的画布 MCP 操作与确认链路;历史页现已接入 OpenCode 原生 session 列表、消息读取、按 session 恢复和删除,新建对话会清空 active session 并在首次发送时创建独立会话。需在桌面端真实启动器验证 Codex/OpenCode 历史隔离、切换恢复、删除、刷新和多画布 session 归属。

  • 生图工作台和视频工作台新增 OpenCode Spicy 助手,可读取当前提示词、按用户要求优化并一键回填。

  • OpenCode Spicy 工作台助手及画布“网站”模式 Agent 均改为服务器端调用,登录用户无需启动本机 Canvas Agent 或填写连接 token;网站模式支持当前模型目录中的 Qwen、Huihui、GLM 与 DeepSeek 模型,每一轮模型决策先经过 OpenCode Spicy,再由浏览器执行结构化画布工具并回传结果继续循环。需验证各模型的首轮只读、节点增删改、工具确认、连续多轮和长回复。

  • OpenCode Spicy 服务器侧栏支持在 Qwen 3.7 Plus 与 GLM 5.2 间切换文本模型。

  • 新增真实服务端 OpenCode Spicy:容器运行原始 opencode-spicy 启动器、DashScope 代理、模型专用 system prompt 与 OpenCode session,Web 通过登录态 BFF 调用。

  • 通用提示词图片镜像:上游内置通用 Prompt 来源的封面和参考图已按原始 URL 哈希同步到 Justin spicy-cc/infinite-canvas/prompt-images;首页与通用提示词库通过 IC 服务端从该 OSS 前缀读取,不再由浏览器访问 GitHub/X 图片域名。需检查首页、提示词列表及详情预览图片,并核对代理拒绝越出该前缀的对象 key。

  • 工作台参考图素材入口:生图工作台和视频创作台的“参考图”工具栏新增“我的素材”,弹窗固定只显示图片素材;已有站内 OSS 素材直接复用稳定 storageKey,外部 OSS 历史素材缺少 key 时改由鉴权服务端导入 spicy-cc,避开浏览器跨域读取失败;点击会先关闭弹窗,成功后写入参考图序列并明确反馈失败原因,同时保留模型格式及数量限制。需分别选择一张站内图片和一张外部 OSS 历史图片,确认即时预览、排序、删除和实际生成请求均正常。

  • Qwen Image 3.0 Pro 下绿网路由:停止在普通新加坡/Wan Key 之间轮转,固定使用已开通下绿网权限的 MAAS_JUSTIN_SG_API_KEY,并在每次请求携带 X-DashScope-DataInspection 关闭输入和输出检查;Base URL 默认与 Justin 的 WAN3_1_BASE_URL 配对,也可由 QWEN_IMAGE_GREEN_BASE_URL 显式覆盖。需在隔离环境验证文生图和图片编辑均由 Justin 账号受理,且不出现 Header.AccessDenied、DataInspectionFailed 或 Key 跨 Workspace。

  • 画布图片组收回与素材导入:收起批量图片组时,不再只隐藏直属的前三个结果,而会同时隐藏由这些结果继续生成的全部后代节点及连线,展开后完整恢复;“我的素材”图片只有 storageKey 时自动重建站内地址,外部 OSS 历史图片由服务端导入 spicy-cc 后再创建画布节点;鉴权媒体下载以数据库真实 MIME 覆盖 OSS 通用类型,避免 PNG 被 Wan3 误判为不支持格式,并显示明确导入失败提示。需验证三层生成链收起/展开、站内及外部 OSS 图片导入,以及导入图片连接 Wan3 后可提交。

  • 画布素材秒插:从“我的素材”选择图片后立即使用现有预览地址和素材宽高创建节点,不再等待 OSS 搬运及整图下载;缺少站内 storageKey 的外部历史素材在节点出现后后台导入 spicy-cc,完成时无感切换为站内地址,失败则保留节点并显示错误。需分别用站内素材和外部历史素材测试点击后即时出现,并确认后台完成后可作为生成参考图。

  • 画布图片分级加载:普通画布节点按显示宽度与设备像素比请求 512、1024 或 1600px 的 OSS 实时 WebP 缩略图(质量 82),放大预览、下载和模型输入仍读取原图;鉴权响应使用按 Cookie 隔离的私有缓存,缩略图缓存一天、原图缓存一小时,并保留视口外节点不渲染的既有策略。需在包含数十张大图的画布观察首次传输体积、二次打开缓存命中,以及放大和生成仍使用原始清晰度。

  • 画布视频节点新增“提取尾帧”Skill:有内容的视频节点悬浮工具栏可一键创建尾帧抽取任务,Media Worker 调用内置 ai-film-post/scripts/extract_tail_frame.py 从视频末尾安全窗口输出无损 RGB PNG,完成后在原视频右侧创建并连线“视频尾帧”图片节点,可直接作为后续视频生成的首帧或尾帧参考。需在画布分别用横屏、竖屏视频验证任务进度、尾帧内容、颜色、图片比例和后续连线生成。

  • 画布视频生成任务刷新续跑:供应商返回任务 ID 后立即把任务 ID、供应商和模型写入视频节点;页面刷新后直接恢复轮询同一个远端任务,成功后继续存入 OSS 并回写节点,不再统一显示“页面刷新后生成已中断”。需在视频任务运行中刷新页面,确认没有重复创建任务,原节点最终正常显示视频。

  • 多人画布协同评论:新增画布级和节点锚点评论、回复、作者编辑/删除、owner 删除、editor/owner 解决与重新打开、成员 @ 提及、未读角标、点击定位节点,以及节点删除后的“原节点已删除”保留态。每个节点的悬浮工具栏固定提供“评论”入口,点击后评论面板直接锁定该节点,图片节点不受快捷工具配置隐藏。评论独立持久化并通过现有 PostgreSQL/SSE 协同事件实时更新,刷新后仍保留。需用 owner/editor/viewer 三类账号验证权限、跨浏览器实时性、未读计数、回复和软删除、节点评论入口、节点定位与删除节点后的评论保留。

  • Canvas Agent 服务端历史:Codex 与 OpenCode Spicy 对话按用户、画布、模型和线程写入 PostgreSQL,浏览器 IndexedDB 继续作为离线缓存;恢复时比较服务端与本地保存时间并采用较新版本,删除线程会同步删除服务端记录。需分别在两种 Agent 下验证强制刷新、关闭重开、清空浏览器缓存、跨浏览器登录、模型切换和线程删除。

管理员生成记录

  • 每个画布节点的 generationAttempts(模型、状态、开始/结束时间和耗时)继续随画布文档持久化到 PostgreSQL,刷新后可恢复。
  • Scheduler 图片和视频生成完成后,画布节点同时保存总用时、排队、GPU 执行和结果处理耗时;节点角标直接展示四段指标,刷新画布后仍保留。结果处理按“总用时-排队-GPU 执行”计算,包含完成状态探测、结果传输、OSS 持久化和节点回写。需分别验证图片、视频、批量生成和重试任务。
  • 管理后台新增“生成记录”,按用户、能力、模型、状态展示全平台服务端模型调用,并显示创建时间、完成时间、实际生成耗时和供应商任务 ID。
  • 生成记录第一页每 10 秒自动刷新,切回标签页或窗口时立即同步;并发查询只接收最后一次响应,接口显式禁止缓存,避免新任务被旧响应覆盖。需保持页面打开并连续提交任务,确认新记录在 10 秒内出现且状态会继续更新。
  • 生成审计复用服务端计费生命周期,不保存提示词、素材、API Key 或签名 URL;页面和接口均要求管理员身份。

NSFW Skill 广场

  • Skill Registry 新增 NSFW 分类(Flame 图标),集中展示一键脱衣与 9 个 NSFW 图片/视频预设;支持 image/video/canvas 三个 surface,在 Skill 广场中可直接查看和跳转。
  • 画布图片节点保留“一键脱衣”按钮,沿用原 krea2-fixed-edit Skill ID,实际模型使用 default::muse-v35-undress,确保已有 URL 和 Skill 深链兼容。
  • 需验证:Skill 广场分类筛选正确显示情色分类卡片、搜索能命中 9 个 NSFW 关键词、点击跳转正常;画布选中图片节点后"一键脱衣"按钮触发图片编辑成功返回;9 个情色 Skill 在画布内点击能进入生成配置流程。

多人画布高频同步降载

  • 远程节点操作仍立即同步;远程光标与选区 Presence 通知在客户端按 100ms 合并,评论通知不再触发无关的画布文档拉取,避免多人连续移动时形成协同请求风暴。
  • 本地画布差异计算改为复用不可变节点引用,仅对引用确实变化的节点和连线做深比较,不再每 80ms 深拷贝并序列化整张画布。需用大型画布和 5~10 个在线成员验证拖动跟手度、光标延迟、评论刷新、节点操作即时性和服务端请求量。

画布图片 Skill 与 NSFW 分类

  • 图片节点的 Skill 入口改为与互动视频 Skill 相同的卡片选择弹窗,先查看说明并选择能力,再明确应用;预置姿势与角色资产继续进入各自的二级设置,不再使用容易误触的悬浮下拉菜单。
  • Skill 广场新增独立 NSFW 分类筛选,将一键脱衣和 9 个 NSFW 图片/视频预设集中展示,并支持通过 category=NSFW 直接打开。需验证深浅主题、图片节点三项 Skill、分类与生图/视频/画布表面组合筛选。

画布视频重复加载优化

  • 视频节点设置 src 后不再额外调用 load() 发起第二次请求;邻近视口的视频改为只预载 metadata,用户播放时再按 Range 读取正文,避免多个节点同时下载完整视频。
  • 同一 storageKey 的 IndexedDB/持久地址解析请求和结果在页面生命周期内复用,节点卸载重挂时保持同一个 URL;鉴权媒体响应继续按 Cookie 隔离,并改为一年 private, immutable 浏览器缓存。需验证反复缩放、拖出/拖回视口、选中节点、协同更新、刷新页面和多个相同视频节点的请求次数与首播速度。

画布 CDN 冷加载降载

  • 画布图片的 512/1024/1600px 预览请求保持走 CDN 签名缩放端点,返回 WebP,不再被完整媒体直链覆盖而下载 OSS 原图;放大、下载和模型输入继续读取原始文件。
  • 视频节点的邻近视口预加载范围由 900px 收窄至 240px,减少打开大型画布时同时触发的 metadata Range 冷回源。需在图片和视频密集画布中验证首屏请求数量、传输体积、节点清晰度及滚动到邻近节点后的加载时机。

Krea2 Identity v1.2 姿势编辑与 Muse V3.5 一键脱衣

  • 生图工作台和画布“预置姿势生成”改用 krea2-i1.2-edit,后端路由到 vps66 上已确认的 Krea2 Identity Edit v1.2 工作流。
  • “一键脱衣”改用 muse-v35-undress 固定提示词接口,调用方至少上传一张目标主体图,可选第二张身份/身体参考图;省略第二张时服务端保留来源工作流的中性占位参考,并可选择保持原比例或恢复原像素尺寸。
  • 两个模型均进入统一 Scheduler 能力探测、显存估算、任务审计与计费链路;仍需在生产环境验证 vps66 八卡路由和实际成图。

画布伪直播连环提示词 Skill

  • 画布 Agent 的 Skill 菜单新增「伪直播连环提示词」内置 Skill,网站与本机 Agent 模式都会将完整的读图锚定→导演规划→写手扩写指令填入输入框,并保留导演表格需用户确认后才进入扩写的分阶段流程。
  • Skill 广场的画布与助手分类均可搜索并打开该 Skill;深链进入画布后会自动填入内置指令,不会误当成个人 Skill 向服务端查询。
  • 验收时请分别测试无图场景和带多张画布引用图的场景:有图时应输出图片角色分配、封闭物品清单和真实图片编号;导演表格的前后动作应连续,末段应回到首段开场状态,确认后才输出全部【段N】提示词。

MuleRouter Prime 与 Berry 视频模型

  • 视频创作台与画布新增 w3.0-video-prime、w3.0-video-prime-pro、berry-1.0、berry-1.0-pro,统一复用 MULEROUTER_API_TOKEN;四个模型均支持文生、首帧、首尾帧和图片/视频/音频参考,普通版支持 480p/720p/1080p,Pro 支持 1080p/2K/4K,时长支持 2–30 秒或智能模式。需分别验证四个模型的提交、轮询、刷新恢复、参考媒体限制、音轨、种子和分辨率。
  • 默认渠道会分别探测每个 MuleRouter All-in-One 任务端点,不再以 wan2.7-i2v-spicy 单一路由状态代替全部模型;需验证单个端点故障时仅对应模型置灰并显示真实原因,其他 MuleRouter 模型仍可选择。

MuleRouter 0827 缺失工作流接入

  • 对照 Muleroute_API_地址汇总0827(w3.0).html 的 13 个模型逐项检查,保留已有 W3.0、Wan2.7、Qwen 编辑等接入,仅新增 z-image-spicy、face-swap、head-swap、wan2.2-i2v-spicy、w2.2-i2v-lora、wan-animate、flashvsr 七个缺失模型。
  • 新模型已进入画布模型选择、MuleRouter 独立端点探测、统一异步任务/OSS 结果链路、积分计费白名单与管理员凭据模型清单;供应商错误详情继续原样透传,不把失败任务写成成功媒体。
  • 参数按官方 OpenAPI 约束接入:Wan2.2 两路为单首帧、480p/720p、5/8 秒;Wan-Animate 为一图一视频并支持动作驱动/人物替换;FlashVSR 为单视频并支持 720p/1080p/2K/4K;换脸/换头均按“目标图 + 来源图”顺序提交。
  • 待生产逐模型验收提交、轮询、刷新恢复、结果解码、积分扣减和端点级置灰;w2.2-i2v-lora 当前先接通无 LoRA 权重的基础工作流,后续如需自定义权重再补专用 URL/scale 编辑器。

画布直播角色可见编排入口

  • 直播发布权限账号进入画布后,底部工具栏固定启用“直播角色编排”入口,不再要求先同时选中图片和视频才可打开。
  • 有选区时仅编排已选持久化媒体;无选区时自动载入当前画布全部持久化图片、视频和音频。
  • 编排面板醒目展示 Loop、送礼、Action、Typing、Preview 与 BGM 槽位;送礼可设置 key、Emoji、原始价格,Action 可设置 key、Emoji、等级和复杂动作。
  • 需验证空画布入口可见、无选区自动载入、多选优先、各槽位字段、创建/更新角色、发布状态与 demo 直达链接。

SeedVR2 超分工作台与 Skill 广场入口

  • 生图工作台的 AI 图像 Skills 新增“SeedVR2 4× AI 超分”,会自动选择 seedvr2-upscale、填入固定说明并要求且仅允许上传 1 张待超分图片;默认生图模型清单也补充该模型,输出继续复用现有持久任务、OSS 和生成记录链路。Skill 广场同步新增“媒体工具”卡片,可跳转生图工作台直接应用,并保留画布图片节点原有超分入口。需验证工作台卡片、模型选择、零图/多图拦截、单图生成、刷新恢复、历史记录、Skill 搜索与深链应用。

YOLOv8 头像定位裁切工具

  • 原“头像生成”能力明确调整为生图工作台里的“头像裁切”工具:上传 1 张人物图后,由 GPU 工作流定位主要人脸并输出 512×512 居中头像,不再把它描述成通用生图模型。
  • GPU 能力矩阵对该工具显示“YOLOv8 人脸定位 · 512×512 居中裁切”,不再展示容易误解的“0 模型”;工具继续走 Scheduler 八卡能力路由、异步任务、OSS 结果与统一计费链路。需验证单图限制、实际裁切、无脸输入反馈、八卡路由和刷新恢复。

Krea2 Turbo v2.5 LoRA Stack

  • 生图工作台的 Krea2 Turbo v2.5 编辑 LoRA 不再把明星身份和 NSFW 姿势混在重复槽位中,改为固定两层 Stack:第一层选择明星身份,第二层选择 NSFW 姿势,各层独立设置强度并可留空。
  • 请求仍按界面层级顺序发送有效 LoRA,先应用明星身份、再叠加姿势。需验证搜索、清空、强度、刷新后的配置恢复和最终 Scheduler payload 顺序。
  • 面板明确显示“可选 0–2 层”和当前已选择层数;两层都留空时提交普通单图编辑,不再显示“至少启用 1/6 个”或“最多 6 个”的旧槽位提示。

Qwen Image 3.0 Pro 长耗时编辑

  • 新加坡站同步编辑请求的读取等待由固定 180 秒扩展为默认 600 秒,避免正常长任务在约 3 分钟时被 Proxy 提前判为失败。
  • 上游超过等待窗口时返回简洁的 504 超时信息,不再把 Python/httpx 调用栈展示给用户。需验证一笔耗时超过 3 分钟的编辑可正常完成,并确认真实超时任务的错误卡片只显示可读提示。

GPU API 图片工具箱文档补全

  • 图片类能力矩阵及三级菜单补充 FLUX.2 Klein 精准换头、精准换头 Pro,并统一换脸 Pro 的 FLUX.2 命名;换头接口分别使用 head-swap 与 head-swap-pro。
  • krea2-turbo-v25-edit 明确归类为图像编辑工作流,输入为原图、编辑提示词与可选的明星身份/姿势 LoRA Stack,不再按生图能力描述。需验证文档导航、请求示例和完整 Python 调用可复制执行。
  • GPU API 主文档已按当前 BFF 契约将图片/视频任务查询改为 POST,并补充 multipart、真实媒体 MIME、零文件文生视频、Identity Edit 必填 prompt、SCAIL-2 音轨、动态模型目录、同步超时、MiniMax 图片驱动分辨率、404 兼容语义和 image_output_local_black_collapse。需用脚本复制执行文生图、无文件文生视频、图片编辑与含音轨视频,并验证错误码展示。
  • 最新生产模型回归作为单次问题复现摘要记录,不冒充正式 P50/P95;Scheduler 候选已补齐节点 792 输入并修复 image_b,需以真实最小请求验收;双图黑块回归修复后,还需在无其他任务占卡的隔离窗口重新执行冷启动、至少三次热运行、排队/GPU 耗时与逐卡显存采样。

视频组合接口并发提交

  • 视频创作台的 SCAIL-2 组合任务去重身份加入具体模型,video-face-swap、video-undress、video-person-swap 使用相同源视频、人物图、提示词和种子时仍视为三种不同任务,可分别并发提交。
  • 同一模型、同一输入的重复点击继续复用正在运行的任务;刷新恢复同时兼容旧版 scail2:v1 与新版 scail2:v2 任务标识。需并行启动视频换脸、视频脱衣后确认视频换人按钮仍可点击,并验证同模型重复点击仍被拦截。
  • 视频组合接口已保存 BFS 中间图后,最终视频完成时直接复用该中间图记录,不再用同一稳定键重复上传而触发 OSS 409,避免上游数分钟已完成但工作台持续显示数十分钟“生成中”。需验证已有卡住记录自动恢复为成功,以及新建视频换脸、视频脱衣均只保存一次中间图并正常结束计时。

v0.12.2 视频任务创建 408 恢复

  • 视频创作台上传参考媒体时,若请求在进入计费 BFF 前被请求体超时以 408 中断,会保留同一 operation ID 自动重传一次。
  • 响应已经携带 x-ic-operation-id 时不会自动重传,防止对已建立的计费操作重复提交。

Krea2 BFS 换脸与换身体

  • 默认图像模型与画布图片 Skill 新增 krea2-bfs-v1(Krea2 BFS 换脸)和 krea2-bodyswap-v1(Krea2 换身体),均严格接收两张有序参考图。
  • BFS 的图1为目标底图、图2为脸部身份参考;换身体的图1为目标姿势/场景、图2为人物身体参考。两个工作流均支持可选提示词与随机种子,并进入 Scheduler 能力探测、显存准入、任务审计和计费链路。
  • 已导出固定 API JSON 与接口文档;需在生产画布分别验证两图顺序、提交/轮询、结果回写、刷新恢复及 vps66 工作流能力状态。

图片换人单阶段与 BFS 双阶段并存

  • 保留 krea2-identity-edit 作为 Krea2 Identity Edit 单阶段图片换人,并新增 krea2-person-swap-v1 作为 BFS 换头后再执行 BodySwap 的双阶段组合接口。
  • 生图工作台“图片工具箱”与画布 Skill 同时展示两个独立入口;两者均严格使用图片1场景底图、图片2人物身份图,双阶段入口单独标注组合流程。需分别验证提交、8 GPU 调度、结果回写与刷新恢复。

视频换人复用 BFS 双阶段图片换人

  • video-person-swap 的新首帧预处理固定使用与 krea2-person-swap-v1 相同的两阶段身份约束:先 BFS 完整换头(脸和头发),再 BodySwap 替换身体身份与比例,随后才进入 Wan2.1 SCAIL2。
  • 视频提示词只控制后续视频生成,不再污染静态首帧换头/换身体提示词;中间结果仍为完成两个阶段后的新首帧。

BFS 双阶段背景保持触发词修复

  • 恢复 BFS/BodySwap LoRA 必需的 head_swap: 与 body_swap: 触发词,同时保留源首帧姿势、服装、构图、光线和背景约束,避免参考人物图背景被当作生成场景。
  • 修复同时作用于 krea2-person-swap-v1 和 video-person-swap 的首帧预处理。需使用背景差异明显的源视频与参考人物图确认中间首帧继承源视频背景。

视频相同输入主动重新生成

  • 视频创作台检测到相同输入任务仍在运行时,主按钮改为可点击的“重新生成”;点击后使用上一任务 operation ID 的后继 ID 创建独立计费与上游任务,不再只复用旧任务。
  • 普通首次提交和提交中的瞬时防抖保持不变,避免一次点击产生多个请求。

BFS/BodySwap 参考尺寸对齐

  • 视频与图片双阶段换人不再让源底图使用竖版尺寸、身份参考使用独立 1024×1024;头部和身体参考现在统一对齐源底图的宽高,再进入 Krea2 fit 链路,减少参考图构图和背景覆盖源场景。
  • 生产 Scheduler 候选同时保留并发加入的 toolsbox-pose-edit 能力。需重新生成背景差异明显的样本,确认中间首帧保留源视频背景。

Krea2 非 H3 工作流复验

  • Scheduler 30f8e8b7ecbfd63f96a0d9daedbb60711926aed8 的 krea2-t2i 已完成一次真实生成:seed 42、768×768、12 steps,输入为桌面红色纸飞机与盆栽;实际查看 PNG 后,主体、颜色与构图符合输入,无明显拼接或结构异常。任务约 18 秒完成,服务端排队 5532ms、执行 10735ms;调度卡为 RTX PRO 6000 Blackwell。输出 SHA-256 50bd87a79a63677a2fc503328ff95fb31fe2e8f1fb6dc04f548ee54167f55a19,548098 字节。

  • 完整输入、任务响应、PNG 和解码记录保存在 ecs110:/home/gy/qa-evidence/canvas-krea-canary/。这只证明该文生图分支,尚未覆盖人物身份、图片编辑或视频;未采集 200ms 显存序列,因此不作为性能基准。

  • 本轮 Krea2/LTX capability 返回 8/8 实例依赖通过;LTX 的旧缺节点记录不再作为当前事实,仍须真实生成与视觉验收后确认可用。

  • krea2-v21-edit 单图编辑已完成真实同源复验:沿用上述红色纸飞机 PNG,仅要求改蓝色,seed 42、source_exact;输出 768×768,人工对照确认飞机变蓝且主体形状、位置、桌面、盆栽、窗户和光线基本保留。任务 26 秒完成,排队 5673ms、执行 19168ms,未返回错误;输出 SHA-256 84e76ec7cccc56729a50561bca4ddd9e4f7880933fd3bb390cbe4f3a8a0711c8,585653 字节。证据位于 ecs110:/home/gy/qa-evidence/canvas-krea-edit-canary/。该结果不代表人物身份、姿势 LoRA、多图编辑或其他编辑接口通过。

LTX 文生视频真实复验

  • Scheduler 30f8e8b7ecbfd63f96a0d9daedbb60711926aed8 的 ltx-video 文生视频分支已执行真实请求:seed 42、3 秒、landscape、fast,内容为红色纸飞机在明亮摄影棚自然滑行。任务成功,H.264/AAC、768×512、24fps、73 帧、3.041667 秒,181130 字节;输出 SHA-256 924898bc4bb325e4bb4979a2a4aa8c523b97fbdc7b9cdd93e13440833bfb1f38。

  • 效果验收未通过:逐帧抽查 0/14/28/42/56/72 帧,飞机翼面与折叠形状变化明显,未达到自然稳定滑行。只确认技术链路成功,不代表模型效果或人物视频可交付。排队 3637ms、执行 407166ms;日志确认包含大型模型加载和卸载,尚未区分纯推理时间,未采集显存峰值基准。

  • 输入、完整任务响应、原视频及关键帧对照保存在 ecs110:/home/gy/qa-evidence/canvas-ltx-canary/。后续核对原工作流参数和模型契约,再做同源固定输入对照;本轮没有替换工作流、模型或生产配置。

  • LTX 参数修复候选将音频 frames_number 与请求视频 frames 同步,不改变模型、LoRA、采样器、sigma 或工作流接线。ecs110 隔离容器:基线 test_ltx_frame_contract 12 个子项失败;修复后与 test_scail_video_contract 合跑 7 项通过。Open Code Review delegation 复审本轮修改与测试,无高置信度遗留问题;原有 .DS_Store 未纳入修改。尚未生产发布或完成候选 GPU 效果复验。

  • 候选 0659ac78e3e6fbd3cbe9a3bbe907e9d374cf476d 已在独立 Scheduler 完成同提示词/seed/尺寸/时长 GPU 复验:73 帧、3.041667 秒、H.264/AAC,执行 30562ms,输出 SHA-256 59251193c01e7aec2b2122317310b97a863e64e88de5956275c8f9253690f1b0。六帧对照仍有纸飞机形状变化,不能称效果已修复;本次为热模型运行,不与前次冷启动 407 秒直接比较。候选全量 282 项测试和基线 281 项均有相同 2 个既有失败(工作流计数、face-swap RunPod 候选),新增合同测试通过。证据位于 ecs110:/home/gy/qa-evidence/ltx-frame-0659ac7/;隔离服务结束后清理,生产保持原版本。

  • Scheduler 发布门禁基线已校正:工作流清单含 DaSiWa 共 32 个(仍逐一校验 JSON 与 SHA256SUMS);历史提交 8fe9e75 已将 face-swap 从 RunPod 改至 vps66,测试现在明确断言仅 vps66:8189,不新增 GPU 路由。修正两条过期断言后,ecs110 隔离容器全量 python -m unittest discover 为 282 项通过(8.788 秒);OCR delegation 复审无高置信度问题。LTX 效果验收结论不变,生产仍未替换。

  • LTX 合同回归进一步覆盖文生/图生与普通/高清四模板:对完整输出图做精确比较,确认仅允许请求参数字段变化,参考图节点、两阶段缩放、模型、采样器和其余接线保持契约,原模板不被原地修改。ecs110 隔离全量测试 283 项通过(8.743 秒),OCR delegation 复审无高置信度问题;没有增加生产变更,效果验收仍未通过。

  • LTX 图生视频独立分支实测:同源纸飞机图片、seed 42、4 秒、square/fast,要求飞机静止、植物轻微受风;产物 H.264/AAC、640×640、24fps、97 帧、4.041667 秒,执行 36292ms,372552 字节,SHA-256 49ab8f8bf6fe9285fb596ab1c75e470dad06f06eb941f1d8b7763337a31133c0。六帧对照确认飞机结构与背景稳定;轻微叶片运动及音频尚未独立验收,不外推复杂动作、人物身份或文生视频质量。证据 ecs110:/home/gy/qa-evidence/canvas-ltx-i2v-canary/。帧数修复及合同测试已快进合并 Scheduler 远端 main 51f5228,生产仍运行旧镜像,尚未部署该修复。

  • LTX 发布尝试已回滚:精确镜像 51f522830d5373f921694abb99dd390f9c914ae2 构建完成,渲染 Compose 与原容器全部运行环境值一致;完整生产验证在 disabled video-clean capability must expose no candidates 断言失败。已用持久 rollback.env 恢复 30f8e8b7ecbfd63f96a0d9daedbb60711926aed8,容器 healthy、重启 0,源码检出恢复相同 SHA。旧镜像同样复现该门禁失败,因此只确认运行镜像回滚完成,不声称完整生产验证通过。证据位于 ecs110:/home/gy/qa-evidence/ltx-release-51f5228/。

  • 更正上一条发布诊断:实际拓扑为 8 个 vps66 实例提供 runpod: true 和专用 video_clean_url,因此端点应按 ready 验收;此前显式传入 disabled 是执行者选择错误,不是产品上报不一致。回滚基线按真实 ready 模式验证返回 scheduler_production_check=ok。未修改或削弱生产路由与校验。

  • Scheduler 修复现已按 ready 模式重新窄部署成功:源码/镜像 51f522830d5373f921694abb99dd390f9c914ae2,镜像 ID sha256:f53213e2fd5a7cafc926850fa7237f9585434dc7e39c5b5849333e3d4d5d84ea;scheduler_production_check=ok,容器 healthy、重启 0,运行容器中四模板 × 四时长合同 16 项通过。旧镜像 30f8e8b 与持久 rollback.env 保留,已实际恢复旧镜像并验证后再部署新镜像。LTX 文生视频画面形变仍未解决,本次仅交付音视频帧数合同修复。

H3 素材上传与子模式路由

  • 候选把视频工作台 H3 图片接收容量提升为模型族上限 4 张,上传、粘贴、素材库和参考图追加沿用同一上限;子模式 videoReferenceCapability 与 videoReferenceError 仍保留 0/1/2/4 张严格提交限制。这样新增第二、第三张图片不再在进入状态前被截断,现有 ModelPicker 输入变化逻辑有机会自动路由。非 H3 与强制 Seedance 模式容量保持原合同。

  • ecs110 隔离验证:视频服务与 ModelPicker 共 76 项测试通过,包含 H3 上传容量和超量提交拒绝;类型检查通过,OCR delegation 复审无高置信度问题。尚未完成桌面/移动端实际增删素材回归或发布,不能据此标为交互验收完成。

  • H3 上传路由浏览器回归已在 1680px/390px 两种屏宽通过(2 项,6.7 秒):真实文件输入和图片解码、1→2→3 张分别路由 I2VA/FL2VA/REF2VA、删除回 1 张保留兼容 REF2VA;小屏打开“调整”抽屉操作模型。仅模型发现及存储传输使用测试替身,不代表真实 OSS/GPU 或触屏手势通过。首次测试因未计入 hover 隐藏按钮、未打开移动端设置抽屉失败,修正测试定位后通过,未据此修改产品逻辑。隔离服务已清理。

  • H3 小屏补充触控验收:参考图删除按钮在 md 以下直接显示,桌面继续 hover 显示,避免依赖手机不存在的悬浮动作。Playwright 390px 上下文启用 hasTouch 并使用 tap 删除,不以 hover 代替触控;与 1680px 桌面各重复 3 次,共 6 次通过(20.0 秒),生产构建与类型检查通过,OCR delegation 复审无高置信度问题。模型/存储传输仍为测试替身,未上线。

  • v0.18.3 已仅窄部署 Web:源码 955f7dbe00792e60a5379ebad8de2c3ab1ce385a,发布清单 e7fd8ac9dd04e2f0ee518f7f7ba8a162b3fbafb6,运行镜像与源码 SHA 一致、容器 healthy,scripts/verify-production-runtime.sh 返回 production_runtime_check=ok。精确提交隔离验证为 76 项单元测试、类型检查、生产构建及 6 次浏览器回归通过;生产域名普通临时账户再测桌面 1680px 与触控 390px,2 项通过(7.0 秒)。模型发现与存储传输仍使用测试替身,本条仅验收上传交互、状态及路由,不代表真实存储与 GPU 生成复验。主线 CI 已通过;前一版 Web b0b74da4d0637148ec546949b5137f96d7ba720c 镜像与回滚清单保留,本轮没有实际回退 Web。

Agent 收尾异常隔离

  • 资源释放、确认清理和会话保存分别捕获异常并上报带 runId/canvasId/phase 的脱敏诊断;保留生成任务原有终态,不因收尾错误重放生成。修复前新增两项用例分别复现 releaseRun/onRunFinished 异常外泄,基线 13 pass / 2 fail;修复后 ecs110 隔离完整 Agent 测试 90 pass / 0 fail,TypeScript 构建退出 0。Open Code Review delegation 复审源代码并额外检查测试,无高置信度遗留问题。

  • 证据位于 ecs110:/tmp/ic-agent-resilience/ 的 baseline.log 与 candidate.log。首次全量测试缺少跨目录启动器文件导致两项 ENOENT;补齐同源文件后通过,未修改断言。此项尚未打包发布 Agent,也未替代真实 Codex/DeepSeek 账户及浏览器端到端验收。

  • Agent 0.7.9 候选已完成远程打包验收:90 项测试通过、TypeScript 构建通过,从 tgz 解压后的入口以独立 HOME/端口启动,health 返回 0.7.9 / 协议 7,公开 config 无 token;验收进程已退出。本地候选包 SHA-256 为 d5bfcf6674cd418494a5f2b04514c14900e4af564da060e699bfc6130b266a00,证据在 ecs110:/tmp/ic-agent-resilience/package-verification.json。README 安装示例同步至 0.7.9;OCR delegation 复审版本元数据及相关 diff,无高置信度问题。该验证复用隔离目录依赖,不代表全新用户安装或真实模型会话已通过;Actions artifact 发布结果另行核实。

  • Agent 0.7.9 Actions 打包任务 33933083199 已成功,artifact 9959230679 为真实下载产物;SHA-256 与隔离候选一致(d5bfcf6674cd418494a5f2b04514c14900e4af564da060e699bfc6130b266a00)。在 ecs110 的全新依赖目录分别安装 0.7.9 与上一版 0.7.8,使用同一隔离 HOME 完成 0.7.9→0.7.8→0.7.9 实际启动回退;三次 health、未认证请求 401、已认证 workspace 请求、配置 0600、token 保留及日志不含 token 均通过。全部测试进程已停止,证据 ecs110:/tmp/ic-agent-install079/verification.json,安装日志与两个原始 tgz 一并保留。没有替换用户 Mac 上的 Agent 服务;真实模型账户与浏览器任务仍待验收。

  • Agent 0.7.9 实际 Codex 适配器负向验收:在无登录凭据的隔离 HOME 调用 executeCodexTurn,真实 app-server 启动并到达供应商 Responses 接口,返回明确 401 Missing bearer or basic authentication;记录 23 个事件,测试脚本正常收束(退出 0 表示捕获预期失败,不是模型生成成功)。证据位于 ecs110:/tmp/ic-agent-install079/unauthenticated-turn.json,任务创建的 app-server/MCP 子进程均已退出。未读取或借用其他项目凭据,成功会话仍待有配置的运行环境验收。首次测试脚本因 shell 引号丢失发生语法错误,修正脚本传输后才完成上述真实调用。

  • Agent 前端收尾诊断候选:releaseRun/confirmation/onRunFinished 错误保留当前 activity/waiting,只展示“任务收尾异常”;普通与未知错误仍按执行失败处理,原有 canvasId/runId 隔离及早到事件缓冲不变。安装示例同步至已发布 0.7.9。ecs110 隔离路由测试 13 pass / 0 fail、54 断言,类型检查退出 0;OCR delegation 复审两份源文件并检查测试,无高置信度问题。尚待浏览器事件序列实操、构建与 Web 发布,不能据此宣布线上修复。

  • 前端候选 fc3f4b6ff32fea8f794d906e853be4483431b7f2 已在 ecs110 独立检出并完成 Docker 生产构建,镜像 ID sha256:7ac3c50054a27a86c4b5071170c42e8b13a2eb09d2e31bd5330f9700ed0c5607,日志 /tmp/ic-agent-ui-build.log。未部署。复核 E2E-003 发现其桩服务部分 run/item/confirm/done 事件未携带现行客户端要求的 canvasId/runId,不能把该旧脚本作为当前协议验收证据;需补齐协议后再做收尾诊断事件序列回归。

  • E2E-003 测试桩已统一为 run/item/confirm/done 事件补齐 agent/canvasId/runId,confirm_resolved 从对应确认请求取运行身份,不从当前活动任务猜测。新增真实 HTTP/SSE 合同测试:旧桩 1 fail(缺画布身份),修复后 1 pass、11 断言,覆盖提交→运行→确认→完成事件;测试端口已关闭。OCR delegation 复审无高置信度问题。该测试只证明测试桩协议字段,浏览器交互仍未完成验收。

  • Agent 连接浏览器回归已在精确候选镜像独立栈通过(1 passed,3.5 秒)。首次因新手引导遮挡按钮而中断,第二次因旧桩仅接受 query token、拒绝页面使用的 x-canvas-agent-token 而失败;现测试显式关闭操作说明,连接用例限时 90 秒,桩同时支持现行请求头鉴权。未修改产品鉴权或用 force click 绕过遮挡。任务完成与收尾诊断序列尚未验收;独立服务停止保留隔离数据供续测。

  • 双页面 FIFO 浏览器实操通过(1 passed,10.6 秒):拒绝第一任务后第二任务开始、批准后完成。追加“完成后注入收尾错误”的用例失败,证实活动身份清除后错误被丢弃;候选已补已知同画布同 Agent 任务的收尾日志保留,不修改当前运行状态,也不把旧任务消息插入新对话。类型检查通过,补丁浏览器复验尚待重建镜像;隔离服务已停止。

  • 精确候选 c618226cb1f944536709b873323ac7301128ef31 已完成重建(镜像 ID sha256:78b45b404201d2f4be30056ca90fea072c814ae89626710d42da4b5d9eef4b68)并连续 3 次浏览器 FIFO/收尾诊断回归通过(32.2 秒)。日志文本框同时包含收尾错误、状态“完成”及 waiting=false。首次新镜像回归使用 getByText 查找 textarea 值失败,页面快照已显示完整诊断;改用 toHaveValue 后通过,未额外修改产品逻辑。仍未生产发布,真实模型成功会话与跨任务迟到事件完整矩阵仍待验收。

  • 完整 E2E-003 当前 2 pass / 1 fail:连接和 FIFO/收尾诊断通过,显式进入第二条历史后消息计数各 1,但刷新后未恢复用户消息。旧测试曾在隐藏连接表单等待,现明确选择连接页签;历史按当前空白草稿合同显式进入,桩 resume 从 POST body 读取 canvasId。历史预览包含系统媒体提示前缀,不能用原始用户文字定位预览;测试按确定性桩的第二条历史选择,并仍用实际用户/助手消息验证内容。刷新恢复失败尚未修复,未放宽断言或发布。证据在 ecs110:/tmp/ic-agent-c618/web/e2e/.results/。

  • 刷新恢复追加诊断:提前 await 保存所选历史的候选类型检查、构建通过,但完整浏览器仍 2 pass / 1 fail,故未交付。trace 网络资源显示 thread-2 的用户/助手消息已 PUT 保存,之后 thread-1 又被 PUT 写回,刷新恢复第一会话;“仅 120ms debounce 丢失”不足以解释,需继续检查并发历史加载与保存覆盖。该候选只保留开发分支,不发布;测试使用的隔离服务已停止。

  • 增加 Codex 历史结果回写时的当前会话校验后,完整套件单轮 3 pass;三轮重复为 8 pass / 1 fail,第二轮刷新仍恢复错误会话,故候选未获准发布。不能以单轮通过宣称修复。下一步独立建模显式会话选择与后台保存时间,继续固定用例复验;相关候选仅在开发分支工作区。

  • 会话选择候选改用用户命名空间内的 sessionStorage 轻量指针,按画布/引擎/模型区分,标签页之间不共享选择;显式进入历史和提交成功写入会话 ID,新建对话写入空白选择。历史内容仍使用原 localforage/服务端链路。远程构建后完整 E2E-003 三轮共 9 pass(48.5 秒),刷新恢复及去重通过;尚需补存储不可用与删除选择边界、独立审查和精确提交发布验证,未上线。

  • 会话选择边界候选:读写 sessionStorage 的异常不再传入 Agent 执行链路;删除匹配会话写入空白选择,删除其他会话保留原选择。16 项路由/选择单元测试、65 断言及类型检查通过;重建后完整浏览器 3 pass(18.0 秒),包含新建空白会话后刷新仍空白。删除选择及存储拒绝/配额异常目前只有单元覆盖。OCR delegation 复审源代码与测试,无高置信度遗留问题;仍需精确提交发布验收。

  • 精确提交 596fd1fc5a92297272e0e9e39b7b99d1fce1dbda 在 ecs110 独立检出完成 16 项单元测试(65 断言)、TypeScript 检查与生产镜像构建;镜像 ID sha256:58dc311328278ec0f116c1f6190c0c6abee39afda011b4aa2cc7acbf0e5662b3。该镜像完整 E2E-003 连续三轮 9 passed(52.5 秒),含 FIFO、迟到收尾诊断、显式历史刷新去重与新建空白会话刷新。OCR delegation 本轮 3/3 源文件审查覆盖,附加检查测试与文档,未发现新增高置信度问题。隔离服务已停止;尚未部署生产,真实模型成功运行及其他引擎不在此次桩服务验收结论内。证据:ecs110:/tmp/ic-agent-596-exact/web/e2e/.results/、ecs110:/tmp/ic-agent-596-build.log。

  • Web v0.18.4 已窄部署:源码 f06de72e00be51d75fc384d8fe465377228d961b,部署清单 f21614cf4182a5c2171a486edd68426ce39ee319,运行镜像 ID sha256:267d80dab1da573089c3d7ecf421079a780ddb8e2be709efef2b37fc775a3415。发布候选 16 项单测、类型检查、构建和完整浏览器 3 passed(18.1 秒)通过。生产容器 healthy / restart_count=0,健康后复跑 scripts/verify-production-runtime.sh 返回 production_runtime_check=ok;部署脚本启动后首轮校验退出,未重复部署。公网登录路由 HTTP 302,仅作为路由存活证据。上一镜像 955f7dbe00792e60a5379ebad8de2c3ab1ce385a 已保留。完整生产 Agent 交互、真实模型成功运行及本次回滚演练仍待完成;Priya Live public manifest canary 未运行,不计入本次通过项。

  • v0.18.4 隔离回退再升级演练完成:同一 QA PostgreSQL/Redis 数据卷先运行 955f7dbe00792e60a5379ebad8de2c3ab1ce385a,再运行 f06de72e00be51d75fc384d8fe465377228d961b,两者登录路由均可用;再升级后 E2E-003 3 passed(17.7 秒)。这不是生产回滚演练,也不证明旧版本具有新版本会话修复行为。随后 E2E-004 窄面板与 E2E-007 移动布局共 2 passed(12.4 秒),覆盖工具栏无溢出、工具箱输入不足提示和 Agent 全屏面板。测试均在 ecs110 隔离服务运行,服务已停止;生产未在演练期间切换镜像。生产实际 Agent 成功调用仍待验收。

  • v0.18.4 隔离浏览器扩展验收:E2E-006 和 E2E-008 共 6 passed,覆盖创作模板铺图/任务中心、全局导航和备份弹窗、生图/视频三步式文字与资产折叠、素材/流程菜单、图层/小地图与模型搜索。与 E2E-005 同批执行结果为 6 pass / 1 fail(13.8 秒);E2E-005 在准备阶段因 QA 账户没有带 storageKey 的图片画布失败,尚未执行缩略图加载断言,不能认定功能通过或功能缺陷。后续须在独立 OSS 前缀通过真实上传建立图片节点并复验,不用网络替身冒充持久媒体验收。

  • 持久媒体缩略图真实链路已补验:隔离 Web 原先指向禁用媒体端口,新增同项目 Proxy 镜像与独立 infinite-canvas/qa/agent-thumbnails OSS 前缀,确认端点为同区内网。浏览器生成 128px 中性蓝色方块,经鉴权 PUT 写入媒体,再保存含 storageKey 的 QA 画布;E2E-005 实际持久 URL 与浏览器解码断言通过,准备与验收共 2 passed(5.5 秒)。首次准备传毫秒时间戳导致画布保存 500,改为 ISO 时间字符串后成功,复用已上传对象避免重复素材。生产源码未改;QA Proxy/Web/PG/Redis 已停止。证据位于 ecs110:/tmp/ic-agent-release-f06/web/e2e/.results/;此结果仅覆盖单张中性图片,不代表全部角色素材或真实模型生成通过。

  • Agent 历史删除浏览器边界已补:显式进入第二会话、确认删除、刷新后已删用户消息不再出现且另一历史仍在。既有 v0.18.4 镜像上完整 E2E-003 3 passed(19.7 秒),两项桩合同测试 15 断言通过,类型检查通过。测试桩修复删除请求未取正文 canvasId、new 路径被通用 thread 匹配拦截;新增错画布删除不影响原会话的合同测试。OCR delegation 审查 1/1 源文件并附加审查两项测试,无新增高置信度问题。此轮仅测试变化,不需生产重建;真实本机引擎删除仍待验收。

  • Skill 版本存储开发候选:新增事务内版本快照、revision 递增约束与快照 UPDATE 拒绝;真实隔离 PostgreSQL 连续两次迁移、更新历史不变/归档/失败原子性合同测试通过,rollback 后重应用及合同复验通过。测试命令为 psql -v ON_ERROR_STOP=1,验收输出 skill_version_contract=ok,退出 0。隔离 PG 已停止。未部署;API、版本切换、运行引用保护、冷归档及存量回填非空样本仍待完成。

  • Skill 历史读取开发候选:现有 /api/skills/:id GET 支持指定 revision 与版本列表排他游标,服务 SQL 关联 Skill 所属用户,客户端新增对应方法。真实隔离 PostgreSQL 服务测试验证原始/更新内容、分页边界、跨用户拒绝及缺失版本 404 异常,输出 skill_version_service_contract=ok,退出 0;类型检查通过。OCR delegation 4/4 文件审查无新增高置信度问题。尚未执行 HTTP/浏览器验收、版本选择 UI 或发布,仍不能称完整版本管理已完成。

  • Skill 版本选择 UI 开发候选:个人 Skill 卡片增加历史弹窗,分页加载版本,使用版本链接携带 skillRevision;画布读取指定历史快照,非法/缺失版本报错而不静默回退最新版。加载切换/关闭通过 AbortController 隔离旧请求,沿用现有 Ant Design 主题。远程类型检查通过;OCR delegation 2/2 文件审查已核对链接参数穿过画布入口。尚待候选镜像构建与真实 HTTP/浏览器验收;仅将旧指令/工作流复用到画布,运行 lockfile 尚未接入。

  • 精确候选 c15a948132551fab37758c23374ecc9468948474 已远程构建(镜像 ID sha256:7c94804746afe333620a61d5a67257acd6c35c6bdff717d352acbf4d6af384ed)。新增 E2E-011 使用真实 API 创建 v1、更新 v2,验证旧版本内容、no-store 与非法 revision=0 返回 400,再从历史弹窗在 390px 视口选 v1进入画布,实际输入框为旧版指令;1 passed(6.7 秒),无模型生成。测试 finally 归档新建 Skill,保留版本历史供后续验证;隔离服务已停止。此项尚未发布,也未实现运行 lockfile 与引用保护。

  • Skill 版本数据库边界追加验收:真实服务并发提交相同 expectedRevision,恰好一个成功、另一个为 revision conflict,版本列表仅新增一项;生成 55 个测试修订后两页为 50/5 且无重漏。非空回填测试先停用捕获、写入已有 v7,重复迁移仅产生 v7 快照,未伪造 v1–v6;rollback 保留已捕获版本,finally 恢复捕获并删除仅本次测试 Skill。两个独立脚本输出 skill_version_service_contract=ok 与 skill_version_backfill_rollback_contract=ok,退出 0。OCR delegation 2/2 脚本审查,隔离 PG 已停止。尚未验证运行引用与冷归档,候选未上线。

  • Skill 引用保护数据库候选:新增执行引用表与版本外键,真实 PostgreSQL 合同测试确认引用后的版本、Skill 删除均遭 foreign_key_violation,原快照保留;输出 skill_version_contract=ok,退出 0。pin 服务函数已实现所属用户/画布成员检查与幂等绑定冲突,尚未执行其专用服务测试,也未连接 Agent 提交链路。类型检查通过;OCR delegation 3/3 文件审查。候选未上线,冷归档与运行请求接入继续待办。

  • Skill pin 服务真实隔离 PostgreSQL 验证通过:两个并发相同绑定结果一致且仅一条引用;相同执行改绑 revision 返回冲突,跨用户或无画布成员关系拒绝且未新增引用,删除已引用 Skill 被外键拒绝。新增版本绑定 BFF 与客户端,带登录鉴权、正文限制和参数检查。脚本输出 skill_version_service_contract=ok、类型检查退出 0;OCR delegation 3/3 文件审查。HTTP 路由与 Agent 提交接入尚待验收,测试引用/Skill 已清理,PG 已停止。

  • 本机 Agent 版本绑定传输候选:Codex/OpenCode turn 接口在创建会话前校验可选 skillBinding(skillId/revision/executionId),非法绑定返回固定 400;声明 skillVersionBinding 能力,RunQueue 深拷贝入参并将绑定写入原 JSONL 记录。11 项绑定/队列测试、35 断言和 tsc 编译通过,验证入参修改及重启不改变已入队版本;OCR delegation 4/4 源文件及新增测试审查。绑定是网站持久引用的定位信息,不是凭据或来源证明。浏览器能力检查与发送前 pin 尚待接入,未打包发布,不能称执行锁定全链路完成。

  • 本机助手型 Skill 发送绑定候选:选择个人 Skill 后在画布 Agent store 保存画布/Skill/版本,切换画布、新建对话、成功提交或选择内置 Skill 清除;发送先读取 Agent skillVersionBinding 能力,不支持则阻止提交,再调用网站 pin 并把绑定放入 turn 请求。每次异步返回重验发送代际,pin fetch 支持取消。远程类型检查通过;OCR delegation 4/4 文件审查。尚未浏览器联调,不覆盖网站 Agent 或工作流节点链路,也未打包发布。本次能力范围仅为本机助手型 Skill 来源固定;用户编辑后的 prompt 仍作为显式输入,不能称流程执行强制遵循原 manifest。提交结果不明的引用暂保留,后续需实现对账回收。

  • 精确发送候选 80c2444bae689409ca60672577a9f9b8f8e562f5 构建完成(镜像 ID sha256:6bc87a51ee1fddae4d19231bf4d13ac8107b253f2577cb9f7341f0acd78e7156)。E2E-011 追加真实浏览器发送检查:旧 Agent 能力时 pin 请求数 0、运行数 0;能力启用后 pin 一次、运行一次,收到所选 Skill v1 和执行 ID,随后人工拒绝桩副作用。1 passed(11.0 秒);桩合同 2 pass/15 断言及类型检查通过。网站数据库/API为真实隔离服务,Agent 为桩,不代表真实模型成功执行。OCR delegation 源桩与测试已复审,隔离服务已停止。候选未发布,仍需真实 Agent HTTP 验证及网站模式/工作流绑定、冷归档。

  • 真实本机 Agent HTTP 负向验收通过:隔离 HOME 启动编译后的 Agent,公开能力包含 skillVersionBinding 且配置不泄露 token;Codex/OpenCode 未鉴权请求 401,非法绑定请求 400,运行列表为空。脚本输出 real_agent_binding_http=ok; rejected_routes=2; queued_runs=0,退出 0;进程与临时 HOME 已清理,不调用模型。配置/HTTP/绑定/队列 16 pass、55 断言及编译通过;首次配置快照期望未含新增能力导致 15 pass/1 fail,补充明确期望后通过。此结果不证明合法绑定的真实模型成功执行。

  • Skill 绑定候选补充完整 Agent 回归:隔离快照首次为 89 pass/3 fail,其中一个 SSE hello 精确断言未包含新增能力、两个缺少同仓库启动器测试文件;修正断言并补全隔离目录结构后,完整 11 文件 92 tests / 336 assertions 全通过,退出 0。日志 /tmp/ic-skill-agent-full-test-final.log 位于 ecs110;不是模型推理或生产验收。

  • Skill 版本 PostgreSQL 合同测试追加独立临时账户删除场景,延迟版本外键在删除结束后强制检查,确认 Skill、历史快照与执行引用均无孤儿记录;输出 skill_version_contract=ok、skill_version_account_cascade=ok,退出 0。整个测试事务 ROLLBACK,隔离 PG 已停止。这只验证版本引用的级联,不代表具有画布或其他业务资源的账户可直接删除。OCR delegation 审查 SQL 与能力声明断言,无新增高置信度问题;版本管理候选仍未发布。

  • 工作流 Skill 来源候选:从个人 Skill 或历史版本插入工作流时,每个新增节点的 metadata 记录所选 skillId/revision;每个节点独立复制来源对象,不受随后修改传入对象影响。将这些节点另存为新 Skill 时移除旧来源,避免携带其他拥有者的 Skill 标识。远程专项 5 tests / 39 assertions 通过、TypeScript 检查退出 0;OCR delegation 覆盖四个变更文件,无新增高置信度问题。此字段仅为来源,不是服务器验证的执行引用;实际生成绑定、浏览器刷新后的持久化回归及发布尚待完成。

  • 工作流普通生成入口候选:发现节点的 workflowSkillSource 后,先通过已鉴权 Skill pin BFF 固定所属用户、画布和历史版本,再进入图片/视频/文本/音频生成分支;绑定失败进入现有错误处理,不提交供应商任务。绑定返回后重验 AbortSignal,来源节点记录执行引用 ID。OCR delegation 检查新增异步边界并补齐 projectId 回调依赖。此项尚待浏览器实际提交/取消回归,不覆盖独立重试、角度等旁路入口,也不代表供应商服务端强制执行 manifest;尚未发布。

  • 上述工作流 pin 改动远程隔离 TypeScript 两轮检查均退出 0(第二轮包含回调依赖修正),日志 /tmp/ic-workflow-pin-tsc.log 位于 ecs110;未启动生产服务或真实 GPU 任务。

  • 工作流 Skill 重试候选:独立重试优先沿用结果节点的来源,其次批次根和来源节点,在供应商提交前重新通过所属用户/画布/版本校验并记录新的执行引用;取消后不进入供应商分支。新生成的子节点在登记 attempt 时继承来源和执行引用,已有来源不被后续上游改动替换。远程 20 tests / 63 assertions、TypeScript 检查均通过;OCR delegation 审查三文件,无新增高置信度问题。测试覆盖来源复制/优先级,不等于浏览器端到端验收;历史 attempt 内的绑定快照和旁路专项生成仍待补齐,未发布。

  • 生成记录的 Skill 绑定快照候选:普通生成登记 attempt 时复制当前来源与执行引用;重试登记时不沿用上一轮 executionId,只有重新 pin 成功后才向本次 running attempt 写入新绑定。已绑定或终态记录不会被迟到响应重写。远程专项 21 tests / 69 assertions 和 TypeScript 检查退出 0;OCR delegation 检查四个文件,无新增高置信度问题。这里是画布记录中的快照保护,不是数据库级不可变执行账本;浏览器保存刷新及实际生成关联仍待端到端验收,未发布。

  • 完整候选 c9daefb8120e282671349cf49d28ace746ad1851 使用 git archive HEAD 到 ecs110 /tmp/ic-workflow-c9 构建,镜像 ic-workflow-c9-qa ID sha256:e9d0b6d3ecf38853f5f4f638517aa3b9093bf8d91e629ebfaacb383e51483a51,构建退出 0。真实 Web/PG 上 E2E-011 通过(1 passed,7.9 秒),验证历史版本选择、移动端旧指令复用、旧 Agent 能力阻止提交、支持能力后真实 pin 与 stub Agent turn 绑定;不是工作流普通生成/重试或真实模型验收。测试完成后相对路径清理因切换工作目录失败,已使用绝对 Compose 路径补做停止;后续清理统一使用绝对路径。生产未改动。

  • E2E-012 工作流持久化:真实 Skill API 创建蓝色方块 v1、修改为绿色圆形 v2,再通过旧版本链接插入新画布;浏览器确认蓝色方块仅一个,真实存储 API 确认服务端节点来源为 v1,刷新后内容、数量及来源仍一致。精确 c9daefb8 Web 镜像上最终 1 passed(3.8 秒),退出 0。首次测试缺少必填触发词返回 400,补齐合法 fixture 后通过;OCR 审查进一步将 v2 节点内容改为不同内容,重新测试通过。finally 归档测试 Skill,保留隔离画布以供回归;隔离服务正常停止。未提交生成或使用 GPU,也未覆盖其他账号/租户使用此来源的行为。

  • 任务中心增加可折叠的 Skill 执行来源:显示该 attempt 的版本、Skill ID、执行引用,长 ID 可换行选择;不以节点最新来源填补旧记录,避免把新版本误标到历史任务。沿用画布主题和原生 details/summary 键盘交互。远程任务中心 2 tests / 4 assertions、TypeScript 检查退出 0,OCR delegation 两文件审查无新增高置信度问题;测试只证明行数据取自各自 attempt,展开/收起、窄屏与主题视觉仍待浏览器验收,未发布。

  • E2E-012 增加真实 Skill pin HTTP 边界:同一执行与版本重复请求返回相同绑定;改绑版本返回 409;revision=0 返回 400;不存在的历史版本和画布返回 404;浏览器显式 credentials=omit 返回 401。使用真实网站/PG,未 mock pin;完整用例 1 passed(4.1 秒),退出 0。原有 SQL 合同已经覆盖数据库唯一性,这次覆盖 HTTP 层。OCR delegation 单文件审查无新增高置信度问题。测试 finally 归档 Skill,执行引用保守保留在隔离数据中;并非通过生成按钮触发,仍不算实际生成验收。

  • E2E-013 从真实工作流配置节点的“开始生成”按钮验证提交顺序:先模拟 pin 403,页面显示明确错误且代理 POST 为 0;撤销 pin 拦截后再次点击,真实 pin 成功,代理 POST 恰好 1 次,真实存储 API 读取到 attempt 的 skillId/v1/executionId 快照。供应商 POST 在浏览器层主动 abort,未运行模型或 GPU。精确 c9daefb8 Web 镜像最终 1 passed(4.8 秒),退出 0;测试 finally 归档 Skill,隔离服务停止。首次错误地断言配置节点显示折叠的提示词正文,按真实面板结构修正后通过;OCR delegation 单文件复审无新增高置信度问题。此项覆盖普通文本生成提交,不覆盖重试按钮、真实供应商结果或图像/视频视觉质量。

  • E2E-013 追加真实任务中心“重试”点击:首次供应商提交被测试主动中止后,从失败记录重试,真实 Skill pin 再次成功,代理提交总计两次;服务端保留两条 v1 绑定快照,第一条完全不变,第二条 executionId 不同。完整回归 1 passed(5.4 秒),退出 0,OCR delegation 单文件审查无新增高置信度问题。供应商仍被浏览器 abort,证明提交/重试/历史关联而非模型输出;隔离服务正常停止,生产未变更。

  • 网站 Agent 助手型 Skill 绑定候选:菜单向网站面板传入 Skill ID/版本,发送前在媒体准备后调用真实 pin 服务;纯聊天与工具调用模式均将绑定附到本轮用户消息。画布切换、显式新建/切换/删除会话、选择内置 Skill 与发送后清除待选来源。pin 返回后检查画布归属,失败不继续模型请求。远程 TypeScript 两轮检查退出 0;OCR delegation 检查三文件并补齐会话切换清理。尚待发送期间切换会话/改选 Skill 的并发防护、历史序列化及浏览器回归;不是完成的 DSH Harness,也未发布。

  • 网站 Agent 发送准备作用域保护候选:媒体准备后、pin 前后均比较画布/会话/所选 Skill;改变任一来源或组件卸载时中止当前 pin,迟到结果不继续模型请求。释放 controller 仅影响本轮引用,避免清理覆盖后续请求。远程 TypeScript 两轮退出 0,OCR delegation 检查异步分支并补齐媒体准备期间卸载检查;竞态行为仍待浏览器延迟响应测试,未发布。另已确认 agent-history PUT 的 messages 白名单会丢弃新增 skillBinding,历史恢复尚不成立,下一步修复并验证真实存取。

  • 网站 Agent 历史绑定保存候选:messages 白名单保留严格校验的 skillBinding,PUT 保存前批量核对执行引用的当前用户、画布、Skill、revision 与 executionId;缺失或不匹配引用返回 400,不创建或伪造绑定。无绑定的旧消息不受影响。解析使用现有 pin 端点的 UUID 格式契约,拒绝额外字段和非法版本。远程解析测试 1 passed / 11 assertions,TypeScript 退出 0;OCR delegation 四文件审查无新增高置信度问题。批量数据库校验与历史 PUT/GET 尚待真实集成测试,未发布。

  • 网站 Agent 历史引用核验真实 PostgreSQL 合同通过:空绑定兼容旧消息;有效及重复有效绑定通过;跨用户、跨画布、错误版本、伪造执行 ID 和其他 Skill ID 均拒绝;有效/无效混合批次整体拒绝。扩展现有隔离服务测试,输出 skill_history_binding_contract=ok 与 skill_version_service_contract=ok,退出 0。finally 删除仅本次测试 Skill 与引用并停止隔离 PG;OCR delegation 单文件审查无新增高置信度问题。尚待完整候选镜像中的历史 PUT/GET 和网站 Agent 浏览器验证,生产未改动。

  • 最新完整候选 4f0d276d8d70e06ef78b9dd4ee68292f81b5e2e4 远程 Docker 构建退出 0,镜像 ic-online-4f-qa ID sha256:2c7e19c7b3ac2aa87bf9f7696057511325f5d4bd3604a3c3809fd463c62d7d20。E2E-012 追加真实历史 PUT/GET:有效执行绑定原样保留;伪造 executionId 返回 400,随后 GET 仍为原消息,finally 删除仅本次测试历史。完整用例 1 passed(4.3 秒),退出 0;隔离服务停止。OCR 两文件审查,并补齐 pageFetch 已实际使用的 PUT/PATCH/DELETE 方法类型;未调用供应商,网站 Agent 实际发送及竞态仍待浏览器验收。

  • E2E-014 网站纯聊天发送:真实界面切换网站模式、从 Skills 菜单选择个人 Skill、Enter 发送,确认真实 pin 成功响应先于模型请求;模型响应仅在浏览器模拟固定文本,真实历史 API 保存了本轮 skillId/revision/executionId。最新 4f0d276d 镜像上 1 passed(4.1 秒),退出 0。首次误用工具模式输入框 placeholder,核对实际双模式文案后修正;OCR delegation 单文件审查无新增高置信度问题。finally 归档测试 Skill,隔离服务停止;未验证供应商实际运行,工具模式及切换竞态仍待验收。

  • E2E-014 扩展网站工具模式:模拟模型先请求 canvas_get_state,浏览器真实执行只读工具;下一轮模型请求中的 tool 消息包含 ok=true 和空画布 nodes=[],整个两轮工具循环仅一次真实 pin,真实历史保留版本引用。聊天与工具两模式共 2 passed(7.3 秒),退出 0。曾误以为 compactSnapshot 包含 projectId,核对代码后改为检查实际工具结果结构,重跑通过;不是放宽到只计数请求。模型仍为浏览器模拟,无供应商推理。OCR 单文件审查无新增高置信度问题,隔离服务停止。

  • 网站发送竞态浏览器验收:真实 pin 已在服务端完成后暂扣响应,用户从菜单重新选择 Skill,浏览器旧 pin 请求触发 requestfailed,模型请求为零且新提示词保留;释放迟到响应后正常再发,仅一次有效 pin/model 序列并保存历史。工具模式一并回归,2 passed(7.6 秒),退出 0。OCR 单文件审查无新增高置信度问题;finally 释放测试等待、归档 Skill 并停止隔离服务。已完成但客户端取消的 pin 引用保守保留,待后续对账;此项仅验证改选 Skill,不等于会话/画布切换的全部竞态已覆盖。

  • 修复 Skill 版本触发器与来源画布删除冲突:修复前真实 SQL DELETE 返回 Skill revision must increase(退出 3);修复后仅放行外键引发的来源脱离,当前 revision 不变、历史来源不变、执行引用保留且 project_id 清空。手动清空仍存在的来源关联继续拒绝。复验输出三个合同 ok(版本、账户级联、来源画布删除),退出 0,所有测试事务回滚且 PG 停止。OCR 两 SQL 文件审查无新增高置信度问题,数据库文档同步。迁移仍为未发布候选,生产未应用。

  • Agent 队列写入失败修复候选:enqueue、开始与终态转换在日志 append 成功后才发布内存状态,并串行化变更以避免并发开始两次认领同一任务。写入失败不会污染后续变更链。隔离故障测试将日志路径替换为目录,验证入队失败不进入队列、开始失败保持 queued、完成失败保持 running,恢复路径后正常完成并重载;并发开始仅一个成功。远程完整 94 tests / 344 assertions 和编译通过。OCR 两文件审查无新增高置信度问题。此项保证 append 失败的一致性,不承诺断电 fsync,也不是完整步骤检查点恢复;Agent 包尚未重新发布。

  • Agent 启动写盘窗口取消修复:队列仍显示 queued、但 execute 已安装控制器时,取消同时 abort 该控制器,防止 running 持久化完成后继续调用执行器。测试用日志 append 闸门确定性暂停 running 转换,在窗口中取消,等待真实 onRunFinished 后确认状态 cancelled、执行器调用 0。完整 95 tests / 348 assertions 和编译通过;OCR 两文件审查并将固定睡眠改为终态回调等待。候选未打包发布,不代表真实模型中断或步骤恢复已验收。

  • Agent JSONL 崩溃尾行恢复:仅在打开日志时修复残缺最终记录,先保存原文件到唯一 recovery 备份并设为 0600,再截断残缺尾行;完整但缺少换行符的最后记录补分隔符,后续 append 不再粘连丢失。中间损坏明确报错并保留原文件。运行中的普通 load 不执行截断,避免与活跃写入竞态。故障测试覆盖残尾后续追加、备份内容/权限、中文完整尾行和中间损坏;完整 96 tests / 356 assertions、编译通过。OCR 两文件审查后将修复限制到打开阶段。未承诺断电 fsync 或跨进程并发写,候选未发布。

  • Agent 独立进程 SIGKILL 验收:子进程以真实 RunQueue 保存绑定 v7 的 running 任务,显式注入残缺尾行后由父进程 SIGKILL(退出 -9);新进程打开日志,确认旧任务 interrupted、绑定原样保留、未自动入队。再保存新任务至 done 并第三次打开,确认两条记录完整且仅一份 recovery 备份。远程编译及脚本退出 0,输出 queue_sigkill_recovery=ok; interrupted=1; next_done=1; inference_calls=0。OCR 单脚本审查无新增高置信度问题;临时进程/目录在 finally 清理。残尾是显式故障注入,不声称已模拟断电;未调用模型,不证明外部生成副作用可恢复。

  • Canvas Agent 0.7.10 候选版本:package/shrinkwrap 根版本与协议测试更新,README 保留 0.7.9 已发布说明并明确新包未发布。远程完整 96 tests / 356 assertions、prepack 编译和 npm pack 通过;tgz SHA-256 e50b3efb514680a12facb9d209838cdf7bca852bf5eddf1a1a69dda7fb20ad79,35 个打包文件。全新 /tmp/ic-agent0710-install 实际 npm 安装 106 packages 成功,包与锁文件版本一致。OCR 四个版本/断言文件审查无新增高置信度问题;这是隔离候选包,不是 GitHub artifact/npm 发布,用户本机未替换。

  • Agent 安装包级队列回退验证通过:在 ecs110 同一临时 HOME/同一 runs.jsonl 依次使用已安装的 0.7.10 → 0.7.9 → 0.7.10。新版创建并完成带 Skill revision=7 的任务;旧版读取保留原绑定并新增完成任务;恢复新版后两个任务均为 done、原绑定不变。实际输出 package_queue_rollback=ok; same_home=true; inference_calls=0,退出 0,临时 HOME 自动删除。使用包路径分别为 /tmp/ic-agent0710-install/node_modules/@basketikun/canvas-agent 和 /tmp/ic-agent-install079/current/node_modules/@basketikun/canvas-agent;每阶段通过 Node 直接导入各包 dist/run-queue.js。此证据仅覆盖完整日志的队列读写兼容,不代表旧版具备新版残尾修复能力,不覆盖真实执行器、鉴权或外部副作用。已安装 0.7.10 的包级 HTTP 拒绝非法绑定、真实 SIGKILL 恢复测试此前也已退出 0;仍为未发布候选。

  • 完整源码候选 061ee7b1 的 Agent 复验首次发现测试时序缺陷:FIFO 用例在异步 running 写盘完成前立即断言,收到 queued;断言提前失败后的目录清理连带造成下一用例 ENOENT。仅修正测试,使用显式 gate 保持首任务、等待 running,再断言次任务 queued,finally 释放并等待任务完成。ecs110 同快照追加该测试修订后完整套件连续五轮通过,每轮 96 pass / 0 fail,最后 356 assertions;build、npm pack、真实包级 HTTP 非法绑定拒绝及 SIGKILL 恢复均退出 0。修订后的目录是候选快照而非原 061ee7b1 精确源码;最终不可变构建仍待新提交。OCR delegation 独立审查该测试 diff 无高置信度问题。差距核查表同步已实现的版本快照/执行绑定,仍保留冷归档、完整 lockfile 和步骤恢复缺口。

  • 精确提交 cfcf8c564e9f72b2016efc0d8c31efa68da2d9ab 的 Agent 独立目录 /tmp/ic-agent-exact-cfcf8c56 通过 96 tests / 356 assertions、TypeScript build、npm pack、HTTP 拒绝非法绑定和 SIGKILL 恢复。tgz SHA256 为 e50b3efb514680a12facb9d209838cdf7bca852bf5eddf1a1a69dda7fb20ad79,与此前候选包一致。随后全新 npm 安装该 tgz,实际安装包再次输出 real_agent_binding_http=ok; rejected_routes=2; queued_runs=0 和 queue_sigkill_recovery=ok; interrupted=1; next_done=1; inference_calls=0,全部退出 0。发布工作流新增相同安装包验证,失败即阻止上传,步骤限时 10 分钟;OCR delegation 独立审查无高置信度问题。远程命令验证通过不代表 GitHub Actions 已运行;未推送/发布此次候选,生产无变更。

  • Web 精确候选 f72ef163135233eee38777ece79cfd2337a19d8c 在 /tmp/ic-full-f72ef163 构建通过,镜像 ic-full-f72ef163-qa ID sha256:94bdbb500a19f77d2816ac5cb02d4a48a39443cb17166a4a76a9a154052c79a3。同源码真实 PG 的 backfill/rollback、历史绑定、版本服务三个合同均退出 0(启动初次 57P03,增加 pg_isready 后重跑通过)。浏览器 E2E-012、013、014 两模式共四项通过。E2E-011 首次在自动连接失败后停留连接页,提前寻找对话输入框超时;仅将旧版提示词断言移到真实连接成功并切换对话后,不修改产品。修订用例同镜像重跑 1 passed / 8.0 秒,旧版内容与实际 pin 绑定断言均保留;独立 OCR delegation 审查无高置信度问题。全部隔离服务停止;生成供应商仍为 stub/中止,不是 GPU 视觉验收,生产未发布。

  • 同一 ic-full-f72ef163-qa 镜像联合验收完成:SQL 输出 skill_version_contract=ok、skill_version_account_cascade=ok、skill_source_canvas_deletion=ok,两段事务均 ROLLBACK;E2E-011~014 共 5 passed(22.3 秒),最终 joint_skill_validation=ok,退出 0。执行文件与原始输出位于 ecs110 /tmp/ic-full-f72ef163/verify-joint.sh、/tmp/ic-full-f72ef163/joint.log;测试文件含 a9c43107 的连接页时序修订,Web 产品源码仍对应 f72ef163。隔离 Web/PG/Redis 全部停止。OCR delegation 集成审查版本迁移、回滚、服务及执行路由,未发现新增高置信度问题;回滚仅停止新版本捕获、保留已有历史与引用的边界仍有效。发布 Skill 补充远程脚本 stdin 隔离、PG 就绪与必须核对合同标记的流程,避免仅凭空输出的零退出码判断成功。生产未变更。

  • 已验证集成源码以单个提交 75837a95e886e3bdfdf6632dd37d0078b28ba7b5 fast-forward 合入并推送 GZ main,远端 SHA 与本地一致;原开发分支保留,未改生产检出。GitHub Actions 33941273196 成功:96 tests / 356 assertions、构建、打包、全新安装、HTTP 拒绝无效绑定与 SIGKILL 恢复全部通过。产物 canvas-agent-0.7.10 ID 9961901382,tgz SHA256 e50b3efb514680a12facb9d209838cdf7bca852bf5eddf1a1a69dda7fb20ad79 与远程隔离包完全一致;zip artifact digest 与 tgz 哈希是不同对象,不混用。产物链接:https://github.com/GZ-AI-Native-Dev/infinite-canvas/actions/runs/33941273196/artifacts/9961901382 。此为已上传的 CI 产物,尚未更新用户本机或部署 Web;生产仍保留此前版本,下一阶段执行正式发布及迁移前检查。

  • v0.18.5 发布候选 3a744fd3df1c392f13277878c7e184e7a4643f9e 在 ecs110 精确源码目录 /tmp/ic-release-3a744fd3 构建通过,镜像 ic-release-3a744fd3-qa ID sha256:535520b30b61b292b0648e6bb80107619dffa5ac9679b20878d3adfe956a129c。新镜像联合 SQL 合同和浏览器五项用例全部通过(5 passed / 21.7 秒、joint_skill_validation=ok、退出 0),隔离服务停止。版本记录独立审查无高置信度问题。生产基线完整运行检查退出 0:production_runtime_check=ok,Web healthy/restarts=0,原镜像 267d80da 未变;Priya Live 指定发布项 canary 未配置而未运行,保留该缺口。此次仅准备并验证候选,尚未执行生产迁移、换镜像或更新用户本机 Agent。

  • v0.18.5 已按 GZ main 发布:源码 017f115e8994b084056aa270b476fcca1468c30f(tag v0.18.5),manifest/生产检出 6525bf5c1d470e23b4e66a2c94f85c2fb13eff8a,正式 GZ 源码构建镜像 ID sha256:5d2a9bed637412894950ce1cd465961937adfca367e108220b8ed3b7acd4ab67。生产数据库先生成 /home/gy/infinite-canvas-secrets/backups/v0185/before.dump,SHA256 df0c69c4b5369692627899469dfbf8df62a4a2c705502cbebd8ffca0d7dbc8db,pg_restore --list 通过(不等同完整恢复演练),再以 lock_timeout=5s/statement_timeout=60s 执行版本迁移,COMMIT 成功。使用完整 web-runtime.env、既有窄部署脚本只更新 web;首次启动即时验证退出 1,等待 healthy 后完整验证退出 0:production_runtime_check=ok、healthy、restarts=0,容器 VERSION=v0.18.5,公开 /api/skills 无鉴权返回 401。生产事务内三项 Skill 合同通过且全部 ROLLBACK,无遗留测试记录;后续生产特性验收应使用专门生产 canary,不复用标注隔离专用的测试文件。原 v0.18.4 镜像 267d80da 保留为 manifest 首个回滚项。Priya 指定发布 canary 仍未运行;已登录用户端真实模型、生产回退演练与备份完整恢复尚未验收,Agent 用户本机未替换。

  • 发布前完整数据库备份恢复演练通过,不再仅以 pg_restore --list 作为证据:ecs110 使用与生产相同 PostgreSQL 17 镜像,新建 --network none、无宿主机端口、1GiB tmpfs、--rm 临时容器;pg_restore --exit-on-error --single-transaction 成功,恢复 38 张 public 表,users/canvas_projects/user_skills 存在,备份时 Skill 为 0 条并恢复为 0。输出 full_backup_restore=ok,退出 0;脚本 finally 停止并移除仅本次恢复容器,生产 Web healthy/restarts=0。备份 SHA256 保持 df0c69c4b5369692627899469dfbf8df62a4a2c705502cbebd8ffca0d7dbc8db。远程复现脚本 /tmp/ic-v0185-restore.py;详细日志和摘要在 /home/gy/infinite-canvas-secrets/backups/v0185/restore-validation.log 与 restore-summary.txt(权限 600),不包含业务数据输出。此次证明备份可完整还原到隔离 PostgreSQL,不代表已经将生产回退,也不涵盖 OSS 媒体本体恢复。

  • 生产已登录 Skills 只读 canary 尚未通过:首轮 Web 容器未含 AUTH_USERNAME/AUTH_PASSWORD,测试在启动浏览器前退出;改用服务器现有受保护运行配置后,登录提交响应 303,但等待离开 /login 超时,阶段 login_submit。未创建/修改 Skill 或画布,浏览器 finally 关闭。停止继续尝试该凭据;目前证据不足以区分配置凭据过期、账户状态或登录流程问题,不把它标记成 Skill 回归,也不伪造会话绕过鉴权。测试脚本仅留在 ecs110 /tmp/ic-release-3a744fd3/web/production-skill-readonly.cjs,日志不输出用户名/密码或业务列表。生产鉴权后功能验收仍待有效正常登录会话。

  • 生产登录 canary 根因已只读确认:web-runtime.env 与部署 .env 所配测试用户名均不存在于当前生产 users 表(exists=false、blocked=false),不是已证明的应用登录故障。改走现有公开注册页面建立独立 QA 普通账户,正常表单注册及登录均成功;生产 /skills 页面和已鉴权 GET /api/skills 返回 200、skills 数组有效、Cache-Control 含 no-store,桌面及 390px 下搜索框可见。输出 production_qa_registration=ok、production_skill_readonly=ok,退出 0,浏览器 finally 关闭。此次有专用测试账户及正常登录会话写入,但没有 Skill/画布内容、充值或模型生成写入;旧 canary 的 business_writes=0 仅指 Skills 只读阶段。QA 凭据保存在 ecs110 /home/gy/infinite-canvas-secrets/v0185-qa-account.json,权限 600;保留普通账户用于后续正常权限生产验收,不授予管理员权限、不替换现有用户凭据。原运行配置不变。

  • 生产专用普通 QA 账户的 Skill 创建、更新、旧版读取、过期更新 409 与桌面/390px 历史列表均通过,输出 production_skill_versions=ok;finally 归档仅此次 QA Skill,未调用模型。随后执行绑定 canary 暴露新边界:从 /canvas?mode=new 获得 URL 后直接 pin 返回 404,复用同一 projectId/executionId 仍 404;只读数据库确认 skill_owned=true、version_exists=true、canvas_exists=false、canvas_member=false。未写入执行引用,测试 URL 不能当作已持久化画布。需要检查正常 Skill 发送前的画布持久化顺序;接口拒绝缺失画布成员是正确边界,不应削弱鉴权或用数据库插入替代正常创作流程。相关远程脚本 production-skill-versions.cjs、production-skill-binding.cjs 位于 /tmp/ic-release-3a744fd3/web;测试定位信息保存在受保护 canary JSON,未输出凭据。

  • 新建空白画布 Skill 提交顺序修复候选:新增显式 PG 持久化屏障,Skill pin 前检查当前画布就绪、等待本地及远端写入,并在等待前后检查 AbortSignal;网站/本机助手、普通生成及重试统一使用画布绑定入口。远端保存失败不再被 saveCanvasToDb 吞掉;后台 Promise 仍有拒绝处理,显式屏障收到原错误。保留最新失败快照,用户未修改画布而直接重试时可重发;有较新 pending/active 写入时不追加旧快照。独立 OCR delegation 首审发现不可恢复重试问题,修复后复审无新增高置信度问题。ecs110 修订快照持久化测试 14 pass / 23 assertions、TypeScript 退出 0。尚未做新候选镜像/浏览器新空画布回归,未发布;现网仍为 v0.18.5。

  • 空白画布持久化屏障候选 66029976e4189fb0f8a4b9c35d5e62b0f9e79baf 完整镜像构建通过,ic-barrier-66029976-qa ID sha256:34725dbdc72176c95be620b9e79cd791312ff885874ff79018e61352fcc8528a。E2E-014 增加新建画布前 PUT=503 故障注入:网站聊天/工具两模式首次发送显示真实保存错误,pin 请求数 0、模型请求数 0、输入保留;恢复 PUT 后直接重试,真实 pin 与历史保存成功,模型仍为明确的固定响应模拟。连同 E2E-011~013 共 5 passed(23.4 秒),三项 SQL 合同亦通过,joint_skill_validation=ok、退出 0。独立 OCR delegation 审查测试 diff 无高置信度问题;隔离服务全部停止。此镜像覆盖候选产品代码,新增测试由当前快照提供,尚未发布生产。

  • 本机 Agent 的保存故障浏览器回归通过:创建空白画布前 PUT=503;旧 Agent 能力检查仍先拒绝;支持绑定后保存失败显示错误,pin=0/run=0、旧版输入保留;恢复 PUT 后直接重试,真实版本 pin 与 stub Agent 绑定通过。连同网站两模式故障用例等共 5 passed(22.8 秒),SQL 合同通过,joint_skill_validation=ok。独立审查无高置信度问题,隔离服务停止。准备 v0.18.6 补丁版本,尚未部署;模型仍为 stub,不构成真实推理验收。

  • v0.18.6 精确候选 29d393d0 的版本镜像构建与 SQL/五项浏览器联合验收通过(5 passed / 27.1 秒);源码树逐文件一致地整理为 GZ main/tag v0.18.6 的完整提交 3de613ab65a2660db51ee137431c6ff03e0cef7d。ecs110 从 GZ 获取该 SHA,在独立 worktree 构建正式镜像 infinite-canvas-web:3de613ab65a2660db51ee137431c6ff03e0cef7d,ID sha256:189a55deac1bea5c08bbd8e687f08607fc70648a3b5717101f375529f89c2120。manifest 候选仅更新 Web,保留 v0.18.5 镜像为首个回滚项。本补丁无数据库迁移;此记录尚不代表生产已经换版。

  • v0.18.6 已按 GZ main 窄部署 Web:生产检出/manifest ce109262fa55fe5da9d43da689300ac26c3f7965,源码 3de613ab65a2660db51ee137431c6ff03e0cef7d,容器镜像 ID sha256:189a55deac1bea5c08bbd8e687f08607fc70648a3b5717101f375529f89c2120 与正式构建一致,VERSION=v0.18.6。完整运行验证退出 0:production_runtime_check=ok,health=healthy/restarts=0;等待健康后复验,未更改数据库。保留 v0.18.5 为首个回滚项。Priya 指定发布项 canary 仍未运行;生产 QA 用户的空白画布实际 Skill 提交复验待下一步完成,不以健康状态替代特性验收。

  • v0.18.6 生产普通 QA 空白画布发送的持久结果已独立回读:历史接口 200,用户消息 Skill ID/revision=1 与专用 canary 一致,固定测试回复存在。远程 /tmp/ic-v0186-canary-readback.log 输出 persisted_skill_binding=ok; persisted_stub_answer=ok; inference_not_tested=true,退出 0。原 UI 运行 stdout 未保留,因此不将它的事件顺序断言作为新增证据;模型响应为浏览器 stub,不计真实推理。

  • 新增等待画布 PUT 保存时改选 Skill 的网站聊天/工具回归:保存闸门释放前不发 pin/模型请求,改选后的输入保留,随后正常发送并持久化绑定。ecs110 /tmp/ic-v0186-29d393d0 使用既有正式候选产品镜像和本轮更新的 E2E 文件;SQL 三合同与五项浏览器测试全部通过(25.3 秒),joint_skill_validation=ok,退出 0。原始日志 /tmp/ic-v0186-save-cancel.log;隔离服务已停止,不涉及生产代码变更。

  • 本机 Agent 等待画布保存期间断开连接的回归通过:在 390px 视口暂停 PUT,断开后释放保存并重连,旧输入仍在、版本 pin 和 Agent run 均为零;再次提交仅创建一个绑定旧版本的 run。ecs110 /tmp/ic-v0186-disconnect-save.log 记录 SQL 三合同和五项浏览器测试全部通过(24.0 秒),退出 0,隔离服务停止。此项使用 stub Agent,不证明真实 Codex/DSH 推理或已提交外部任务的取消。

  • Agent 工具持久收据候选接入实际 HTTP 服务:下发前先写 intent,写盘失败不发送;等待写盘期间重验画布与运行绑定;客户端确认写摘要,断连/超时/确认丢失为 uncertain,不自动重放。ecs110 /tmp/ic-tool-checkpoints 完整 99 tests / 370 assertions 与 TypeScript build 通过,原始输出 /tmp/ic-tool-checkpoints-tests.log。首轮隔离目录缺少启动器测试 fixture 导致两项 ENOENT,补入同工作树脚本后全套通过;门控测试改为普通 Promise catch 后再断言,避免 Bun rejects 阻塞释放。原始输入输出不写入收据。未发布,也不等价于供应商对账、检查点续跑或真实推理完成。

  • Agent 收据查询候选完成:按 run/canvas/agent 核验后返回白名单摘要和保守状态,receiptOnly=true、replayAllowed=false,不提供自动恢复。ecs110 /tmp/ic-checkpoint-query-tests.log 记录 102 tests / 376 assertions、TypeScript build 及真实 Node HTTP 验证通过(tool_checkpoint_http=ok; scoped=true; uncertain_preserved=true; inference_calls=0)。HTTP 使用临时 HOME 预置 interrupted run 与未确认 intent,验证 401/400/404、200/no-store 和零 queued;进程与临时目录 finally 清理。这是读取恢复证据,非真实供应商恢复证据,候选未发布。

  • 画布本机 Agent 最近任务新增折叠执行收据面板,按需查询/手动刷新,显示客户端确认、尚未下发或结果待核对;旧 Agent/404 明确提示,不显示为空记录,断连与作用域变更中止读取并隔离旧结果。远程 API client 3 tests / 12 assertions、Web TypeScript 与镜像构建通过;镜像 ic-receipt-ui-qa ID sha256:b23c8587aec695d129aed0c273f1e24a1e0f8c882fd54868c358fa3b9737b8d1。SQL 三合同及五项 E2E 全过(25.1 秒,/tmp/ic-receipt-ui-e2e.log),新增 390px/1680px 展开、警示、刷新404清空旧数据断言。收据响应在浏览器中模拟,真实 Node 查询已另行验证;尚非 UI 到真实 Agent 收据联合验收。候选未发布,隔离服务已停止。

  • 工具收据新增目标节点引用候选:从标准生成/智能尾帧 ops 中提取节点 ID 和动作,去重并排除提示词及 URL,写入 intent、按任务查询返回、面板显示且注明非供应商任务 ID。Agent 完整 103 tests / 381 assertions、编译和真实 Node HTTP 读取通过;Web 4 tests / 14 assertions、全量类型检查通过。节点关联写盘测试使用模拟画布客户端;新增行尚未做浏览器复验。实际代码确认 applyAgentOps 先返回快照、再微任务启动生成,供应商任务 ID 尚未进入本收据,不能据此执行自动恢复。候选未发布。

  • Agent 工具请求来源关联候选:已校验的 requestId/runId/canvasId 通过 onApplyOps 和独立生成参数传至图片、视频、音频、文本的 generationAttempts.agentToolOrigin,随后 providerTaskId 保存在同一次 attempt;不会把该参数误判为批量模式。工具来源画布不符时拒绝应用;来源对象复制保存,手动 retry 不继承旧请求。远程 22 tests / 72 assertions 与 Web TypeScript 检查通过,独立 OCR 审查无新增高置信度问题。此字段沿用画布 JSON 持久化,不改表、不替换 operationId;它是客户端来源线索,不能作为服务端鉴权、扣费或供应商完成的证明。浏览器联合/真实生成与 Agent 收据回传仍待验证,未发布。

  • E2E-015 通过真实 Node Agent 的 /api/tools 与 SSE 下发 config 创建及生成工具,浏览器批准后实际写入工具 intent/ack,画布 generationAttempts 的 requestId/runId/canvasId 与磁盘收据一致;刷新后再次读取服务端记录仍一致(不扩大为已检查浏览器内部 hydration)。供应商 POST 在浏览器中拦截,确认仅一次提交,不调用模型。完整 SQL 三合同与六项 E2E 两轮通过,最终 30.0 秒,joint_skill_validation=ok;镜像 ic-origin-ui-qa ID sha256:b5716deed5912920142a17997fef799c438e13f04e2f376845c53c0c4896d83d,日志 ecs110 /tmp/ic-origin-ui-e2e.log。测试用临时 HOME 和独立进程组,finally 清理 Agent/CLI 子进程;隔离服务停止。未发布,不是 GPU、供应商任务 ID 或费用对账验收。

  • 实际 /canvas/state 回传生成标识已进入 Agent 候选日志 tool.generation_reported:匹配已落盘 intent 的请求/run/画布/源节点,串行去重、重启后去重、写盘失败可重试,拒绝覆盖冲突 operation/provider ID。首次 E2E 失败定位到节点运行态来源在终态被清空;网络 trace 确认该字段为空,现将 originNodeId 固定到每次 attempt 并优先读取。修复后 Agent 107 tests / 391 assertions、编译通过,SQL 三合同及六项 E2E 全过(31.4 秒,ecs110 /tmp/ic-task-links-e2e.log),确认真实 Agent 日志出现对应 attempt 报告。镜像 ic-task-links-ui-qa ID sha256:5217ddbb260dbf8c30abcfc9b5966bb3f4f4db4a82dd2f05126021eb4677deeb,隔离服务停止。浏览器测试仍阻断供应商;provider ID 补录/冲突由单元测试验证,真实供应商与账本对账未完成。独立审查通过,候选未发布。

  • 生成报告查询与任务面板候选完成:按工具请求、run、画布、源节点合并每次 attempt 的 operation/provider 标识,稀疏更新保留已知 ID,冲突不覆盖;Web 再验关联范围,明确显示“客户端报告(待服务端核验)”,不改变确认状态或允许重跑。Agent 108 tests / 396 assertions、编译及真实 HTTP 查询通过(ecs110 /tmp/ic-report-query-tests.log);Web client 5 tests / 20 assertions、TypeScript 检查通过。隔离镜像 ic-report-query-ui-qa ID sha256:02b8edcecf4119e307c4d790052a96af1438b883de8caf4404a0279f5ce34960 完成 SQL 三合同及六项 E2E(32.9 秒,/tmp/ic-report-query-e2e.log),覆盖窄屏报告展示与刷新404后清除旧标识。UI 收据为模拟响应;真实 HTTP 查询和真实浏览器到 Agent 日志分别验证,供应商仍被拦截,不构成 GPU、费用对账或自动续跑验收。独立 OCR 审查无高置信度问题,隔离服务已停止,候选未发布。

  • 当前账户操作只读核验候选:单条 SQL 按 operation/user 联查预留、结算与已存生成状态,金额字符串保精度,不暴露原始结果,不推断可重跑或质量通过。服务与路由 5 项单测 / 25 assertions、Web TypeScript 检查通过,独立 OCR 无高置信度问题。隔离 PostgreSQL 直接执行从服务提取的 SQL,验证所属结果、大整数与跨账户空结果(ecs110 /tmp/ic-operation-evidence.sql、/tmp/ic-operation-evidence-sql.log,generation_operation_sql=ok; owner_scope=true; bigint_exact=true; rolled_back=true)。首次只有一个测试用户导致预检中止,修正为事务内创建禁用测试用户后通过;所有测试写入回滚且隔离 PostgreSQL 停止。尚未做真实网站 HTTP/UI 联合验收,未发布,也不是供应商主动核验或完整费用恢复。

  • 任务详情接入服务端操作核验候选:每次报告按需读取当前网站账户的操作记录,账户/操作/报告与刷新作用域隔离,取消旧请求;分开显示客户端报告、数据库快照、预留/结算积分与记录时间,任务 ID 不一致明确警告,无重跑入口。客户端 4 tests / 13 assertions 与 Web TypeScript 通过;首次测试 fixture 类型过宽,补 const 字面量后复验通过。镜像 ic-operation-ui-qa ID sha256:4533beb66cb6f8a48abe84909fa24cbee83eb14bba1ce115f3c1baeff263708c,SQL 三合同和六项 E2E 全过(31.6 秒,ecs110 /tmp/ic-operation-ui-e2e.log)。新增真实登录态查询不存在操作返回404,模拟成功记录显示超安全整数精确积分、任务 ID 冲突提示、再次404清除旧快照,覆盖窄屏和桌面。真实成功记录的 HTTP/UI 与供应商主动核验仍待完成,不把 mock 积分当作真实扣费验收。独立 OCR 无高置信度问题;隔离服务停止,候选未发布。

  • E2E-016 新增真实登录态操作核验:仅在显式指定 IC_EVIDENCE_PG_CONTAINER=ic-agent-ui-qa-postgres-1 且 baseURL 为隔离地址时建测试记录;随机 ID、事务写入和 finally 精确清理。实际浏览器调用真实 Web/PG 验证所属成功记录、跨账户404、缺失404、匿名401、no-store、大整数积分与不暴露原始结果。首次严格比较缓存头字符串失败,确认全局鉴权层附加 private/max-age 等保护指令后,改为校验 no-store 指令而非放松缓存要求。Web TypeScript、独立 OCR、SQL 三合同和七项 E2E 全过(31.6 秒,ecs110 /tmp/ic-operation-http-e2e.log,joint_skill_validation=ok);测试 fixture 删除、隔离服务停止。沿用已验证 ic-operation-ui-qa 镜像,本轮只新增测试与文档,未发布。成功状态与积分由数据库 fixture 提供,不是实际供应商生成/真实扣费或自动恢复验收。

  • Agent 引擎启动前执行清单候选:复制队列输入与工作区/会话上下文,先落盘 run.execution_manifest 再调用引擎;记录 run/画布/引擎、请求模型、Skill 版本引用、输入及上下文 SHA-256、附件数量与 replayAllowed=false,不追加正文/附件/路径/session 明文。写入失败阻止引擎启动,写盘后再次检查取消。ecs110 /tmp/ic-manifest-tests.log 完整 113 tests / 412 assertions、TypeScript 编译和真实 HTTP smoke 通过;gate 测试证明等待落盘时原 run/工作区变更不改变实际执行器输入,错误注入证明写盘失败时零引擎调用。独立 OCR 两轮无高置信度问题,候选未发布。清单仅是本地执行输入证据,不是服务端核验 Skill lockfile、供应商实际模型版本或完整六接口 Harness;仍未开放自动恢复。

  • 本地 Agent 任务解释入口候选:GET /agent/runs/:runId/explanation?canvasId=...&agent=... 在既有 token 鉴权后核验作用域,组合白名单执行清单、工具收据、不确定请求 ID 和原因码;清单缺失/无效/冲突、中断、回合结束与未核验生成报告分别解释。清单只接受唯一一致版本,返回 replayAllowed=false、qualityVerified=false,不启动引擎。ecs110 /tmp/ic-explanation-tests.log 115 tests / 422 assertions 与编译通过;扩展真实 Node HTTP canary 验证401/400/404/no-store、interrupted+uncertain、清单回读与零推理(tool_checkpoint_http=ok; scoped=true; uncertain_preserved=true; inference_calls=0; explanation_scoped=true)。HTTP 使用预置本地日志,不是供应商实测。独立 OCR 无高置信度问题,候选未发布;该确定性解释仅为统一 Harness 的部分能力,Web 解释展示、服务端核验与 resume/evaluate 仍待实现。

  • 执行清单一致性校验候选:解释接口复用创建时的输入摘要算法,与持久化 run 的正文/附件/Skill/请求模型核对,并单独检查模型、附件数量及 Skill 三字段;错配返回 manifest=null 与 manifest_input_mismatch,避免仅凭格式正确采纳错误清单。真实 HTTP 在临时日志追加同作用域、有效格式但摘要错配的记录后,确认清单失效、禁止重放且零 queued。ecs110 /tmp/ic-manifest-consistency.log 116 tests / 435 assertions、编译及 HTTP canary 全过;独立 OCR 两轮通过。上下文摘要仍是本地启动记录,不可用当前会话状态反向伪造供应商执行证明;未发布,尚非完整恢复机制。

  • Skill 执行引用服务端回读候选:GET 按当前用户、画布、执行 ID、Skill/版本与现有成员关系联查不可变快照,归档历史可读但不回退最新版。服务查询单测 2 项 / 8 assertions、Web 类型检查、镜像构建和独立 OCR 通过;首次简化测试快照缺少类型必需字段,补全 fixture 后复验。真实 E2E 复用已 pin 的旧版执行 ID,读取原始指令并验证错版本/错画布404;SQL 三合同及七项 E2E 全过(32.0 秒,ecs110 /tmp/ic-skill-verification-e2e.log,joint_skill_validation=ok)。镜像 ic-skill-verification-qa ID sha256:14cead18948697420a44e7bf4fa35c3bdb74819805f13fe0ca50f1c483889df5。隔离服务停止,未发布;成员撤销/跨账户场景仍需真实数据库验收,客户端实际执行内容与服务端历史快照的核验链尚未完整接入。

  • Skill 引用权限真实回归补齐:E2E-016 在显式隔离容器/地址 guard 下创建随机画布、两个账户 Skill 和私有执行引用,真实 API pin 自有旧版;读取他人引用404且不返回指令,删除成员关系后旧绑定404,恢复成员后200,归档 Skill 后仍读取原始 v1 指令。临时写入精确清理并断言 Skill/画布/临时用户/账单零残留,隔离服务停止。Web TypeScript、独立 OCR、SQL 三合同和七项 E2E 全过(31.3 秒,ecs110 /tmp/ic-skill-scope-e2e.log,joint_skill_validation=ok),沿用 ic-skill-verification-qa 镜像。本轮只补测试与证据,未发布;不代表客户端已消费核验快照或完整执行 lockfile 已完成。

  • Skill 发送入口响应校验候选:共享 API client 对 pin 响应做运行时精确匹配,Skill/版本/执行 ID 缺失或错配即报错中止;不再仅凭泛型类型断言接受结果,响应解析后再次检查取消。3 单测 / 9 assertions、Web TypeScript 与独立 OCR 通过;E2E-013 新增 HTTP200 但错误版本/执行ID场景,确认供应商提交为零,解除拦截后正常流程与重试继续通过。SQL 三合同和七项 E2E 全过(30.1 秒,ecs110 /tmp/ic-pin-response-e2e.log,joint_skill_validation=ok);镜像 ic-pin-response-qa ID sha256:3f312496b3d3649adb4bad8399c652749c3fcc6dc592925627b2947131b7e99b。隔离服务停止,候选未发布;该边界校验不等于完整 Skill 内容校验或真实 GPU 验收。

  • 网站纯聊天 Skill 内容接入候选:发送明确 canvasProjectId 与本轮执行绑定,BFF 在上游调用前读取服务端已 pin 的历史指令,与本次用户任务分别组装,内部绑定字段不透传上游。无效引用400、权限失效404且不调用模型;未绑定请求保持旧路径。helper 2 tests / 8 assertions、真实路由(鉴权/查询/上游模拟)2 tests / 7 assertions、Web TypeScript 与独立 OCR 通过;SQL 三合同及七项 E2E 全过(32.7 秒,ecs110 /tmp/ic-skill-context-e2e.log)。浏览器验证聊天请求携带正确绑定,真实 Web/PG 验证跨账户及撤销成员的 POST 被拒绝。镜像 ic-skill-context-qa ID sha256:01beccebb1008a5ffbca7f6493793c5e542f6cbbf933a72df490b9b1090a019f,隔离服务停止。成功模型响应仍模拟,未发布;网站工具循环、本地 Agent 与真实引擎消费快照尚待接入,不能宣称完整双 Harness 完成。

  • 网站工具循环执行上下文候选:本轮画布与 Skill 执行引用固定传到首步、自动续步、待确认上下文和批准后续步,每次模型请求均由 BFF 解析同一历史指令;模型返回和工具执行前检查画布一致,切换画布时报错而非应用到新画布。Web TypeScript、独立 OCR 通过;E2E-014 覆盖聊天、读取工具自动续步、read+空选择工具批准后续步三模式,逐请求断言执行 ID 非空且保持一致。SQL 三合同和八项 E2E 两轮通过,最终34.8秒(ecs110 /tmp/ic-loop-skill-e2e.log,joint_skill_validation=ok)。镜像 ic-loop-skill-qa ID sha256:f4fd9d19ef11bba7c22062a417e99baf1380bb57fb365eeda55bbf55004b00d7,隔离服务停止,未发布。模型响应仍模拟;切换画布保护尚未单独浏览器注入验证,完整会话取消、本地 Agent 可信快照与真实模型运行仍待完成。

Skill 冷归档预检

  • 新增只读运维 SQL,以操作方显式 cutoff 筛选最多 100 个旧版本候选,排除当前版本与已保存执行引用,仅输出版本/时间/JSON 字节数;BEGIN READ ONLY、15 秒超时、ROLLBACK,不归档或删除。ecs110 隔离 PostgreSQL 执行成功(2000 cutoff、0 行、退出 0),实例已停止;独立审查通过。此轮只验证 SQL 兼容和空结果,引用/临界期限/并发资格矩阵、冷存储写入与历史恢复均未完成。

  • 冷归档预检资格矩阵已通过真实 PostgreSQL:测试直接执行运维 SQL,临时表覆盖旧版入选、执行引用排除、cutoff 相等/较新排除、当前/未来版本排除,以及 110 个额外候选的稳定排序与 100 条截断;输出 skill_archive_audit=ok、退出 0。脚本 web/scripts/test-skill-cold-archive-audit.py 要求显式隔离开关并固定 QA 容器,独立审查通过;临时表随连接销毁,QA PostgreSQL 已停止。未操作正式 Skill、OSS 或生产;并发 pin、其他引用来源和真实归档恢复仍未验收。

  • Skill 归档对象校验基础已实现:固定格式标识,完整保留历史 snapshot 字段,并校验 owner/Skill/revision;读取先检查实际字节数、16 MiB 上限、SHA-256,再做严格 UTF-8/JSON 和身份校验。ecs110 3 项测试/17 次断言及 TypeScript 通过,覆盖跨身份、截断、损坏、非法编码与超限;首轮发现 Web Zod 3 与 Agent Zod 4 API 差异,已修正并独立复审通过。模块尚未接入 OSS 或历史读取服务,未归档/删除任何版本;不能将此基础校验等同冷归档功能完成。

  • 私有 Skill 归档读取接口候选已实现:强内部 token、独立前缀、内网 OSS 端点、16 MiB 上限、实际 SHA-256 校验及读取后关闭对象;返回 no-store JSON 字节,不返回签名 URL。远程主机缺 Python 依赖后,改用既有 Proxy 镜像只读挂载候选、无网络运行新测试和媒体存储回归,共 18 项通过(退出 0);覆盖正常、鉴权、路径、空/损坏/超限、公网端点拒绝。桶为内存替身,未访问真实 OSS,未部署。Web 身份校验接入、归档写入、数据库切换及历史恢复仍待完成。

  • 候选 fe021d07 完整源码快照已在 ecs110 通过 TypeScript 与 Worker 正常/失效输入/响应丢失三组独立 PostgreSQL 联验;仍为 HTTP fixture,浏览器 admission 接线及真实 GPU/OSS 验收未完成。详见 docs/plans/v3.1-delivery-status.md。

  • Agent 入队事务入口统一:正式服务拥有有界事务、序列化冲突重试及回滚失败连接销毁,隔离四并发入队/已提交重放与 Worker 联验通过;尚未接浏览器 HTTP 入口。

  • 候选新增 Agent admission HTTP 入口及文本生图执行路径准入校验;远程服务层联验覆盖活跃用户、并发重放、Worker。尚未完成路由实际 HTTP 与浏览器联验。

  • Agent 审批确认后新增“预留积分并执行”和“核对已有任务”:前者单次调用持久入队接口,后者只读执行尝试;不确定结果不自动重发,过期材料禁执行。远程 API client 8 测试/146 断言与 TypeScript 通过;实际浏览器及 GPU 联验仍待完成。

  • 入队页面真实浏览器负向回归通过:桌面批准后点击实际HTTP返回执行未启用503,禁止重复提交并只读核对;移动拒绝后不显示执行入口。候选e50b8f30 Docker构建及Playwright通过,详见交付状态。

  • 开启执行开关后,真实桌面页面→HTTP202→PG持久入队验收通过;10积分预留,同一请求重放复用任务且预留事件仅1条。未启动Worker或GPU,测试记录及隔离服务已清理。

  • 实际浏览器入队→同候选Worker单次消费→ready→HTTP queued进度联验通过,积分仍held且无供应商提交;测试容器超时清理已修复并复审,最终Playwright与类型检查通过。

  • 同候选Proxy镜像已构建并完成实际模型预检;krea2因隔离网络DNS失败标记不可用,尚未执行GPU生成。已确认OSS内网及独立前缀,生产未改。

  • 隔离Proxy DNS问题已定位并以临时QA网桥监听修复,实际模型预检krea2 ready=true;生产网络未改,预检服务已停止,尚未提交GPU生成。

  • 首条浏览器发起的真实krea2静物生成完成:产物已视觉审查,OSS内网读取/数据库画布节点1/结算10积分usage1/succeeded一致。保留QA数据待浏览器最终素材重载验收,生产未改。

  • 真实生成产物在桌面/移动重载恢复通过,预览及原图下载哈希/尺寸一致,零重新生成。截图发现AI结果来源标签误为用户上传,已列待修。

  • Agent新生成结果现在从已批准请求保存model、prompt和完整标量参数;远程Worker/PG回归及类型检查通过。历史成功节点未自动改写,待受控补全与浏览器复验。

  • 原真实QA图片来源已通过鉴权画布patch补齐,实际undo/redo及重复操作幂等通过;桌面移动显示krea2,原图哈希不变,没有重新生成。

  • H3完整图片数量模式矩阵桌面/移动浏览器回归通过:1图I2VA/L2VA/REF2VA,2图FL2VA/REF2VA,3图REF2VA,其余置灰;显式L2VA及增加/删除路由验证通过。模型/上传transport为stub,非GPU验收。

DaSiWa 时长对齐说明

  • DaSiWa 视频设置标明目标秒数会向上对齐到17n+5帧,6秒样本实际158帧/24fps≈6.58秒。只显示提示,不修改请求、计费或视频文件;官方Max API不显示此说明。桌面及移动参数面板可见性和原路由4项浏览器验证通过,尚未生产发布。

H3 四模式真实静物验证边界

  • I2VA、L2VA、FL2VA、三图REF2VA均已获得真实GPU视频,并在桌面/移动历史中恢复及播放至结束;证据索引见 docs/plans/v3.1-delivery-status.md。测试不是人物、角色或多人房质量验收。
  • REF2VA原提示和固定种子的无切镜对照均出现约5秒硬切,连续环绕质量验收失败,不能把任务成功或播放成功当作效果通过。源图与方形成片比例适配仍需产品级复核。
  • 保留原任务、账本、输入、视频和失败样本,不重新生成代替恢复,不以裁剪或插帧掩盖质量问题。

H3 自动路由渠道边界

  • DaSiWa 根据输入图片数量自动选择子模式时,只在当前渠道的 DaSiWa 模式内选择;没有匹配模式时保留错误提示,不自动换到其他渠道或旧 H3 实现。既有 API 模型 ID 不变。
  • ecs110 隔离验证 bun test src/components/model-picker.test.ts:11 项、45 断言通过;日志 /tmp/ic-h3-channel-routing.log。这不是 H3 单品牌入口完成证明,入口折叠及浏览器验收继续待办;未部署。

H3 DaSiWa 单入口与键盘展开

  • 视频模型选择器将 DaSiWa 子模式收进一个 MiniMax H3 入口,展开后保留可选模式、输入不匹配和供应商不可用原因;不合并旧 H3 或不同 API 实现。入口支持 Home/Enter,导航占位值不进入模型配置。
  • ecs110 增量候选镜像 ic-h3-family-qa,桌面/移动 4 项路由及键盘展开回归通过(13.1 秒),TypeScript 退出 0,独立审查通过。日志 /tmp/ic-h3-family-browser-2.log、/tmp/ic-h3-family-tsc-final.log。首次测试辅助功能名称定位错误,失败证据保留在 /tmp/ic-h3-family-first-failure。
  • 未调用 GPU,未部署生产;完整新手/专家流程、全部模型统一入口和不可用模式专项浏览器覆盖继续待验收。

Agent 生图观察诊断错误码

  • 观察层区分绑定无效、HTTP 状态、传输错误、协议异常、任务 ID 不匹配、未知结果、无效媒体和未确认供应商失败;进度事件使用机器可读错误码,不暴露原始错误、媒体地址或凭据。保留需要核对状态,不自动重发、退款或宣称生成成功。
  • ecs110 纯分类测试 1 项/8 断言通过;完整 Worker HTTP/PG 与用户界面诊断展示尚需复验,未部署。

画布任务诊断提示接线(隔离浏览器已验证)

  • 步骤持久进度新增独立诊断行:已知错误码显示中文处理提示,未知合法代码保留诊断码;不展示原始供应商消息,不改变执行或费用状态。后续响应无诊断码时清除旧提示。
  • ecs110 格式化测试 1 项/6 断言、最终 TypeScript 检查通过,独立审查通过。已添加真实 Agent/PG 浏览器测试的 unknown 提示与清除断言;隔离镜像构建成功,日志 /tmp/ic-agent-diagnostic-build.log。随后真实 Agent/PG 浏览器回归 1 项通过(26.8 秒),覆盖桌面/移动 unknown 提示及后续清除,日志 /tmp/ic-agent-diagnostic-browser-2.log。首次固定余额断言失败后改为只读核对当前账本,失败证据保留 /tmp/ic-agent-diagnostic-first-failure;不改余额、不重复 GPU 任务。未部署生产。

Worker 诊断与恢复隔离联验

  • 新增 HTTP 状态、错任务、unknown 和未确认失败的诊断码断言,Worker unknown 事件持久化及一次 HTTP 提交断言。ecs110 fresh PG17 完整 Worker 成功链路退出0,类型检查通过;真实 GPU/OSS 不参与本次测试。

  • 验证日志 /tmp/ic-observation-worker-pg.log,临时容器已清理;完整取消、供应商 ACK 与未知任务对账仍是待办,未部署。

  • 额外 IC_AGENT_HTTP_LOST=1 fresh PG 变体退出0:供应商接单响应丢失仍只提交1次,重复调用不重发、账本接单状态一致;日志 /tmp/ic-observation-worker-lost.log。此结果不是未知外部任务最终对账完成证明。

Agent ACK 持久队列结构(尚未投递)

  • 新增独立 ACK 队列并注册平台迁移,绑定 admission 和唯一外部任务;身份不可变、重试次数不回退、确认不可撤销。非空 down 拒绝删除证据。
  • ecs110 fresh PG17 执行 IC_ISOLATED_TEST=1 DATABASE_URL=postgresql://postgres@127.0.0.1:25439/infinite_canvas bun scripts/test-agent-billing-ack-schema.ts 退出0,覆盖重复 up、约束、非空 down 拒绝、空 down 与重建;日志 /tmp/ic-ack-schema-test.log。仅最小父表结构验证,不是全量升级或 ACK 网络联验;未部署。

图片结算与 ACK 原子入队

  • 图片完成器在画布结果、成功事件和积分结算同一事务中创建唯一 ACK 待办,绑定实际 settled image 任务;没有网络投递。
  • ecs110 fresh PG17/HTTP fixture 完整 Worker 流程退出0,新增 ACK 插入故障注入确认画布/账本整体回滚、成功及重放保持一条未确认待办;日志 /tmp/ic-ack-enqueue-pg-final.log。首次 SQL 类型冲突与 fixture 回滚顺序错误已修,原失败日志保留。类型检查通过、独立审查通过;无真实 GPU 调用、未部署生产。

ACK 投递与持久延后重试

  • 独立 ACK tick 只领取 settled 且 admission/外部任务绑定一致的待办,网络 IO 前持久延期60秒;5秒超时与受限响应解析,仅成功且 ok=true 确认。404不冒充成功,不修改账本、不发生成请求。CLI每轮独立处理ACK异常,沿用Worker启用开关。
  • ecs110 fresh PG17+HTTP fixture验证503失败→延期期间idle→到期200确认→不再领取,生成提交仍为1,余额不变;日志 /tmp/ic-ack-delivery-pg.log。类型检查及独立代码审查通过。真实Proxy、异常中断与历史补录待验收,未部署。
  • CLI 接线后的完整 PG/HTTP 复跑退出0,包含 once 正常退出和 SIGTERM 清理,日志 /tmp/ic-ack-delivery-cli-pg.log;尚未覆盖 ACK 网络中途杀进程。

已完成 Agent 图片任务 ACK 补录

  • 每轮最多补20条缺失ACK,仅接受 admission/已结算账本、成功事件任务ID和同画布结果操作一致的图片任务;不重放完成器、生成或账本结算。
  • ecs110 fresh PG17/HTTP fixture 完整流程通过:模拟旧成功缺失ACK→补录并确认→再次idle,生成提交仍1次、余额不变;日志 /tmp/ic-ack-backfill-pg.log,类型检查通过。尚非真实Proxy或历史生产全量升级验收,未部署。

原真实 Agent 生图 ACK 联验

  • 对保留的 operation 7498ab61-3d61-4d68-ae56-0a5de78d7371 执行新 ACK tick:先断言隔离库仅此已结算图片候选,首次 acknowledged、第二次 idle;对比账本余额/预留/usage 完全不变,没有运行图片Worker或生成提交。
  • 实际 QA Proxy 持久任务记录 billing_ack=true,终态记录仍存在。证据 ecs110 /tmp/ic-agent-generation-state/real-agent-ack.json,日志 /tmp/ic-real-ack-result.log;使用既有Worker镜像只读挂载候选 ACK 模块和专用校验脚本,不宣称完整候选镜像已验证。隔离 PG/Redis/Proxy 已停止,未部署生产。
  • ACK 网络中途进程退出与重启恢复仍待专项验证。

ACK 请求中途进程终止恢复

  • fresh PG17 + HTTP fixture:独立 Bun 子进程发送 ACK,确认请求到达后 SIGKILL;数据库保留 attempts=1、未确认及重试时间,重启观察先idle,仅在本次fixture推进到期后再次ACK成功。最终余额不变、生成提交仍1次;子进程与临时数据库已回收。
  • 日志 ecs110 /tmp/ic-ack-crash-pg.log,agent_ack_crash_recovery=passed,完整准备链退出0、类型检查通过。此处模拟接收后响应悬挂,不等同真实供应商落盘后响应丢失或生产重启验收;未部署。

直播间 P1/P2 产品层(PRD v3.1)

  • 直播间工作台(画布工具栏"直播间"按钮):关键帧管理器(六类锚点层级、角色/场景/服装/体型绑定、首尾用途、来源模型/提示词、审核状态、可达转场)、转场 A→B 独立管理、关键帧编辑后关联转场自动标记"需要重新验证"(P-04/P-07)。
  • 模拟直播预览状态机:preview/idle/typing/gift/action 触发,缺素材按 fallback→idle 回落并记录事件日志(P-08);关键帧可绑定画布图片/视频节点并在预览中真实渲染媒体。
  • 新手/专家模式切换:模式为直播间属性并记录切换历史(模式、原因、时间)。
  • AI 引导:DSH deepseek-v4-flash 经本地 proxy 下发,积分计费闭环;基于六维/关键帧/转场实际状态给出下一步建议与 11.1 完成条件清单。
  • 发布版本冻结(P-10):发布冻结六维+关键帧+转场+玩法配置为不可变快照(live_room_publishes),版本列表与回滚;回滚整体恢复快照并回到 review 状态。
  • 克隆画布生成新直播间(P-01):复制带直播间的画布时创建新直播间(新 ID、六维与关键帧结构复制、状态回 draft、审核与素材 lineage 不携带;config-only 策略不携带媒体节点绑定)。
  • 生产验证:ic.xshow.live 浏览器 E2E 通过(向导六维全流程、工作台关键帧/转场/预览/模式/AI 引导/发布);verify-production-runtime.sh 全绿。

画布编辑器存量数据崩溃修复

  • API 侧写入的画布 document 可能缺少 viewport 与节点 position/width/height:编辑器 viewportBounds/visibleNodes memo 直接读 viewport.k、node.position.x 导致整页"页面加载失败"。
  • 修复点 1:hydration 边界 mergeProjects 规范化节点几何与 viewport,编辑器恢复时 project.viewport ?? {x:0,y:0,k:1} 兜底。
  • 修复点 2:协作 WebSocket 初始快照此前直接 setNodes 服务端原始 nodes 绕过规范化,已在协作边界同样应用 normalizeCanvasNodes。
  • 生产验证:ic.xshow.live 对 v0190e2e7976bbc7(API 验收建的无 viewport/position 画布)编辑器正常打开;画布列表 16 张卡片(含畸形数据)正常渲染;向导/工作台/发布回归通过。

玩法配置器(PRD §6.1)

  • live_room_gameplay 表:礼物档位(key/名称/价格/绑定关键帧)、动作按钮(解锁等级/积分/目标与回落关键帧)、等级成长(门槛积分/奖励)、评论互动(回复人格/冷却时间)、剧情任务(章节/条件/奖励关键帧),PUT 校验引用关键帧归属。
  • 工作台"玩法" tab 提供五类配置编辑器并保存到服务端。
  • 模拟播放器消费已保存玩法:礼物按钮解析绑定关键帧的 gift 转场(素材未就绪降级提示);动作按钮按模拟用户等级门控(等级不足禁用并提示),解锁后触发目标关键帧、缺素材回落到配置的回落关键帧。
  • 生产验证:ic.xshow.live 浏览器 E2E 通过(配置保存 → API 断言 → 礼物触发 → Lv1 动作锁定 → Lv3 解锁触发);回归冒烟(向导 + 列表畸形数据 + 工作台发布)通过。

直播间向导保存闭环(PRD §8.1)

  • 六维向导保存后不再进入空画布:自动预铺 live-character 工作流(角色设定文本节点 + 图片配置 + 定妆照/动作素材/封面三个图片占位节点),六维人设由 buildLiveRoomPrompt 生成为业务语言角色卡填入文本节点。
  • config 节点图片生成结果优先填充其连接的空图片占位节点(不再总是新建节点),预铺的定妆照等占位节点在点击"开始生成"后直接收到生成结果;批量与空图片节点原路径不变。
  • 生产验证:ic.xshow.live 浏览器 E2E——向导保存后 5 个节点 + 3 个图片占位、人设卡含"小晚/25岁研究生";玩法与回归冒烟通过。

视频节点看图推荐视频提示词(本地候选)

  • 视频节点提示词区新增看图推荐入口:完善我的想法输出 1 项,帮我推荐输出 3 项(自然微动、主体动作、镜头运镜)。结合当前模型的参考图/首尾帧模式,保留已有动作要求;方案显示名称与完整提示词,选择后可编辑,确认填入,不自动提交视频任务。
  • 无图片时引导连接;最多 4 张图片;生成视频期间禁用入口。支持失败重试、超时和关闭取消;持久素材优先读取 storageKey,不依赖展示 URL。
  • 远程隔离验证:接口测试 4 项通过,TypeScript 检查通过;独立审查已修复输入变更导致旧预览覆盖的问题,复审无新增高置信度问题。
  • 待验收:桌面及移动端入口、单图/多图、原提示词保留、取消与切换节点、真实识图响应。尚未发布生产。

直播间竖屏生成约束

  • 直播间节点与生成配置统一使用竖屏,720p 档;旧节点横屏配置在新请求时被覆盖,普通画布保持原设置。
  • 首帧/尾帧参考图片及参考视频检查竖屏方向;横屏素材保留原文件并提示先裁剪,不自动拉伸、删除或重生成。
  • 图片请求 720×1280,由模型尺寸规则对齐;MiniMax H3 五模式使用 9:16、720 档。
  • 旧成片不做破坏性迁移。待完成真实直播间浏览器及 GPU 视觉验收,不以单测或构建代替成片验证。

MiniMax H3 模型分组与品牌展示

  • MiniMax H3 五模式统一入口移入 GPU 算力模型分组,主名称显示 minimax h3,复用 MiniMax Logo 与 GPU 标识;分组计数按一个模型计入。
  • 保留五模式展开、素材数量限制、不可用提示与 DaSiWa 路由,不改变生成请求。待线上浏览器验收。

DaSiWa Turbo 调度更新

  • 四个 FL 基座模式接入通用 Turbo 8 步;REF2VA 保留原配置。I2VA 同卡单样本从 183.15 秒到 72.26 秒(缓存条件不同,非 SLA)。显存预算同步提升;15 项单测和独立审查通过。生产运行双校验已通过;线上 Scheduler I2VA 执行 137.008 秒、排队 6.065 秒,成片解码及抽帧通过。待用户画布效果确认;其他模式、长视频继续真实输出验收。

画布视频工具箱产品分类修正

  • 视频工具箱已从 MiniMax H3 技术模式卡片调整为四个业务入口:视频换人、视频换脸、视频脱衣、视频姿势。MiniMax H3 首帧、首尾帧、尾帧、参考图等模式继续保留在视频生成节点的功能模式选择中。视频姿势入口按 28 个姿势的单张姿势首帧图生视频设计。目录及生成输入契约 19 项测试、TypeScript 类型检查通过;待桌面端与移动端浏览器回归。

全模型精确报价覆盖

  • 当前公开目录 128 个模型均可规范到计费模型;服务端为 185 个“能力 + 模型”组合建立精确默认报价(图片模型按生成、编辑能力分别计价),初始值继承各能力当前通配规则,并保留通配兜底与管理员既有覆盖。补入当前默认图片编辑模型 krea2-turbo-v25-edit 的计费白名单。待生产迁移后核对精确价格行数、公开目录零缺失及文本/生图/图片编辑/视频/语音各一条真实报价响应;本项只建立平台积分报价,不代表供应商成本利润率已经完成财务校准。

视频姿势两阶段组合接口

  • 新增 video-pose:单张人物图先按 toolsbox-pose-edit 同源工作流生成姿势关键帧,图片模型释放后,再把中间 PNG 交给 MiniMax H3 DaSiWa I2VA;查询、中间图、最终视频与取消共享同一视频任务 ID。
  • 画布视频工具箱和独立视频工作台通过登录态内部路由 /api/proxy/v1/videos 调用,不经过 Partner API;默认 720p / 9:16。XCamShow/B 端另由 /api/partner/v1/videos 暴露相同模型,要求 Bearer Key 与 Idempotency-Key,两类鉴权边界互不混用。
  • 已完成隔离接口测试、TypeScript 检查、生产构建和窄部署;生产运行时已确认画布内部模型目录、Scheduler 路由以及 Partner 鉴权/幂等边界生效。随后使用完整正脸人物样本完成真实 GPU 两阶段复验:排队 39.125 秒、执行 134.667 秒,输出 1344×1792 RGB PNG 中间帧及 704×1280、24fps、5.175 秒 H.264/AAC MP4,均可解码;抽帧确认人物、服装和背景连续。待桌面/移动端从真实画布发起一次登录态任务并确认具体姿势强度。

管理员生成记录输入素材与结果分层

  • /admin/generations 展开记录后可直接预览本次请求使用的图片或视频输入素材,并显示字段名、文件名和大小;预览使用管理员鉴权的同源接口,不向浏览器暴露内部 OSS 地址。
  • 视频组合任务将 BFS 等中间图片单列为“中间结果”,生成成片单列为“最终结果”;最终结果列表会排除中间产物,避免重复或误标。
  • 新提交的 multipart 任务按内容哈希关联已经持久化的画布/工作台媒体;旧记录没有历史关联时保留文件摘要并明确标注不可预览。
  • 隔离验证通过 9 项专项测试、TypeScript 检查与生产构建;待生产管理员账号创建一条带参考图和中间图的视频组合任务进行页面验收。

Mathew 姿势能力整合与 Krea 模型自动路由

  • 选择性整合 Mathew 分支的第 28 个姿势、姿势网格/GIF 预览、Skill 广场展示与 /s 快捷入口;保留主线现有单图两阶段 video-pose 请求契约,未引入旧分支的回退实现。
  • 图片工作台选择 Krea2 Spicy 姿势时,若当前为 krea2-turbo-v25-edit,自动切换到支持通用姿势 LoRA 的 krea2-v21-edit;专用 toolsbox-pose-edit 两阶段流程仍使用已确认的 v2.5 工作流。
  • 已补修画布 Toolsbox v2.5 请求同时携带姿势 ID 时被旧 v2.1 校验提前拒绝的问题,并加入与浏览器实际字段组合一致的 Proxy 回归测试。待生产桌面/移动端确认:选择任一姿势后可正常提交,并检查第 28 个姿势预览与视频姿势入口。

管理员生成记录输入素材完整预览

  • 计费代理解析 multipart 输入时除文件摘要外保留本次请求内存字节;已有持久媒体继续按哈希关联,未关联的 Partner、工作台和画布临时输入在上游提交前归档到独立 OSS 对象并登记 media_objects。
  • /admin/generations 继续只通过管理员鉴权的同源输入接口读取,浏览器不接触内部 OSS 地址;审计详情只落 storageKey、MIME、大小和 SHA-256,不把媒体字节写入 PostgreSQL。
  • 新请求可直接预览输入图片,视频按需加载。历史请求若当时未持久化且原始字节已释放,仍只能显示文件摘要。

图片换脸与换头 Seed 全链路透传

  • Proxy 的 comfy-faceswap、face-swap(-pro)、head-swap(-pro)、krea2-bfs-v1 与 krea2-bodyswap-v1 统一解析 0 <= seed < 2^63;显式 Seed 原样传给 Scheduler,未传时由 Proxy 生成随机 Seed。
  • Partner head-swap-bfs 已有的 Seed 校验和映射继续保留,并由 Proxy 实际传入 BFS 工作流;Idempotency-Key 仍只负责订单幂等,不代替 Seed。

Codex / DSH 统一 Harness:Run 级 SkillLockfile

  • 新建 DSH Run 时由服务端按已持久化步骤生成不可变 SkillLockfile,记录统一协议版本、DSH 引擎、内置 Skill 标识、固定修订和内容 SHA-256;重复目标去重并按标识稳定排序。
  • Run 查询及任务中心可读取锁文件和整体摘要;旧 DSH Run 使用确定性的只读投影,避免把历史上不存在的用户 Skill 引用写回数据库。
  • 数据库迁移增加锁文件字段、结构/摘要约束及禁止替换触发器;回滚在存在锁文件时主动阻断。待与 Codex 的 user_skill_execution_refs 汇总到统一 Run 查询,并继续接完整步骤事件与 SSE 断线续传。

管理员生成记录质量评价与数据集导出

  • 生成记录支持按精确算法/模型、Good Case/Bad Case 和调优状态筛选;可跨分页选择记录,或直接导出当前筛选结果为 UTF-8 CSV。
  • 展开记录可保存评价、Bad Case 必填原因、备注及待调优/调优成功/调优未解决/无需调优状态,适合按算法汇总失败样本并记录新版本是否解决。
  • 输入素材预览除已归档 storageKey 外,会按受限的 SHA-256、字节数、MIME、原用户或原画布引用回查历史媒体;仍未保存过且没有可验证匹配对象的旧输入继续明确显示不可恢复,不从不相关用户素材猜测。
  • CSV 对公式前缀做转义,输入和结果媒体继续仅通过管理员鉴权的同源接口读取。待生产管理员真实完成一次筛选、Bad Case 保存、调优成功更新、跨页选择和导出验收。

Proxy MiniMax H3 接口文档

  • Proxy Base URL 导航新增 MiniMax H3 独立页面,明确画布内部统一使用 POST /videos,并完整列出原版 minimax-h3、minimax-h3-fl2v、minimax-h3-l2v、minimax-h3-r2v 与 DaSiWa T2VA/I2VA/FL2VA/L2VA/REF2VA 五个模型 ID、输入数量、multipart 字段、创建、查询、下载、取消及错误边界。需在生产文档站验证导航、移动端显示及全部示例链接。

生成记录评价与管理员复跑

  • 生成记录表尾部调整为“评价 / 备注 / 是否解决”三列:管理员直接选择 Good Case 或 Bad Case;Bad Case 备注为空时红框提醒并阻止保存;是否解决支持待调优、调优成功、调优未解决、无需调优。
  • Bad Case 可按原模型、原参数和已归档输入素材重新执行。复跑通过当前管理员登录会话进入平台标准 Proxy 计费链,创建全新的 operation 并扣除当前管理员积分;原记录保存复跑关联,新结果完成后在同一行预览,再由管理员判断是否解决。旧输入素材不可恢复或模型已下线时明确停止并展示原因。

GPU API 文档信息架构与更新时间(v0.21.4)

  • GPU API 首页改为接入导航,不再混排工作流图、性能基准和生产验收长日志。
  • Proxy 与 Partner 先按调用身份分流,再按图片、视频和 MiniMax H3 能力进入二级文档。
  • 原完整技术内容迁移到“GPU API 技术参考与验收档案”,保留工作流、显存、性能与历史验收证据。
  • GPU API 文档树的每个页面均显示精确到秒的更新时间,格式为“年月日 时分秒(UTC+8)”。
  • 修复性能矩阵中去字幕、去水印两行被渲染为普通文本的问题。

MiniMax H3 Proxy 示例补全

  • 补齐 DaSiWa 五模式与原版五种输入方式共 10 个独立创建示例;保留同任务重试 operation ID,补充 Base URL 与任务 ID 设置。
  • Shell 语法与示例数量检查通过;文档生产发布待验收,未触发付费生成。

企业账户与 Partner Key 管理(未发布)

  • 新增尚未注册执行的企业账户、密钥哈希与能力范围迁移候选,并提供阻止删除已有企业数据的回滚迁移。
  • 待完成管理页、密钥签发/轮换/撤销、按企业隔离的鉴权/幂等与计费、真实数据库验证。
  • 当前环境变量旧 Key 的鉴权和计费绑定保持不变;本项尚未上线。

学院滚动与企业管理入口

  • 学院增加独立滚动容器,适配固定高度应用布局。
  • 企业管理迁入用户管理下,旧入口校验管理员后跳转;组织及成员 HTTP 操作要求管理员。
  • 管理员可读取全部企业;已有成员数据和旧 Partner Key 不变。
  • 静态回归 3 项通过,生产交互验收待完成。

直播间素材清单与点击引导(候选)

  • 工作台增加关键帧、Loop、送礼、Action、Typing、复杂 Action、私人房七项准备清单;点击定位并高亮真实操作控件,支持鼠标、触摸与键盘激活。
  • 引导可暂停恢复,偏好按用户及直播间隔离;不通过点击次数推进素材完成度。
  • 关键帧要求图片绑定与审核;状态视频要求所有对应转场就绪且绑定真实视频。复杂动作分段及私人房专项验收仍待闭环,不显示虚假的完成状态。
  • 待验证:桌面/移动端遮罩定位、关闭恢复、失效素材回退;本轮未合并创建入口,也未替换原完整向导。

表单式引导保留

  • 创建直播间(六维表单)和直播创作向导(人物/服装/环境/Loop)均保留,并接入相同的真实控件聚光灯与点击让出逻辑。

  • 支持跳过、恢复,各表单按用户保存引导开关;步骤切换保留现有输入。六维表单名称必填项阻止跳步,提交缺项时回到对应步骤。

  • 仅高亮提示,不自动提交、不消耗生成积分;待线上实际点击与移动端验收。

  • 生成记录列表:详情展开「+」移至最后一列并固定右侧;左侧保留选择框,详情内容不变。待用户确认宽表横向滚动体验。

画布常驻进度与登录 Tab

  • 直播间准备进度常驻画布左上角,不再只藏在工作台抽屉;展开分类可预览绑定的关键帧与状态视频,未绑定用途的历史素材归入待分类。

  • 与工作台复用同一审核/绑定就绪规则;未启用类别不计入进度,复杂动作/私人房保留专项验收状态。进度不是 GPU 推理百分比。

  • 登录页保留 Google 入口,密码登录与邮箱验证码通过 Tab 切换;原认证请求和 next 跳转不变。

  • 直播间准备清单改为横向滑动 STEP 步骤卡;真实就绪项采用主题成功色绿色填充和勾选,当前步骤高亮,未完成不虚构百分比;保留点击引导。

  • 直播间素材任务默认 MiniMax H3 DaSiWa(有首帧走 I2VA,否则 T2VA);生成配置复用已连接的空闲/失败空视频输出,保留已有素材和运行中节点。待线上交互验收。

  • 画布直播间进度浮层改为绿色分段完成条、编号步骤与独立状态/素材数量,保留分类素材折叠预览和制作入口;待用户确认视觉效果。

  • 修复待机等状态视频候选采用时的同锚点自循环校验,服务端与数据库约束一致;待迁移及上线验收。

  • Loop 完成度/发布校验新增关键帧审核与闭环路径检查:同帧循环、双帧和多帧闭环通过,孤立单向转场不计为完成。仅候选,双模式生成入口仍待实现。

  • Loop 双模式生成入口:同帧传两份有序 FL2VA 图槽,多帧按选择顺序含返回段铺设;候选保留端点并按端点匹配采用,采用前人工接缝确认。旧无端点候选要求重新铺设,未批量改写已有素材。待线上与 GPU 验收。

v0.21.7 直播角色画布联动

  • 一键创建先保存媒体,再原子创建画布、所有者成员关系、直播间和媒体引用;不自动开播。

  • 同一用户同一角色复用画布,失败重试复用已保存媒体;已有角色设定和素材不被重复点击覆盖。

  • 图片作为角色参考素材;已有明确用途的视频按用途标记,普通视频保留待分类,不自动审批关键帧。

  • 画布底部「流程 → 直播间素材编排与发布」保留原编排面板。

  • v0.21.8:无需发布权限即可打开素材编排、保存用途及排序到画布;发布操作仍受原权限控制。

  • ThreeUI 首批真实源码适配:画布底部 Dock 接入上游 proximity/spring 控制器;直播角色页加入 Character Filmstrip 立体画廊(首批 12 位筛选结果,完整列表保留);生成节点按钮适配上游分层高光、底缘光和逐字动效。MIT 来源与改动边界见 web/src/components/threeui/README.md。仅 ThreeUI 主题生效,保留深浅主题、价格门控、真实生成/停止、现有角色详情。隔离浏览器四组深浅/移动检查通过,方向键加 Enter 打开正确角色;待生产真实页面逐项对照。

  • 修复画布 Dock 的“直播创作向导”缺失悬浮提示,同时补齐专业流程提示;键盘聚焦同步显示说明,补充工具按钮提示覆盖测试。

  • 直播间准备进度改为画布顶部横向导航,常驻公共房/私人房切换、具名素材步骤及就绪状态,标出下一待完成项;点击步骤展开对应素材,保留制作与审核入口。待真实页面验证窄屏、Agent侧栏及浅深主题。

  • 画布图片/视频节点下方常驻真实用途标注:房间、关键帧名称、视频类型及首尾关键帧方向;多用途素材保留全部绑定,关闭制作面板或后台刷新后同步变更,未绑定节点不按文件名猜测。

  • 直播间进度移至画布最顶部居中,默认只显示细分段进度线;悬浮或键盘聚焦展开完整导航,移入素材详情保持展开。

  • 顶部直播间步骤直达对应类别素材:就近展开单一大预览,同类多素材用前后切换;不再混排所有类别和待分类素材。全局「最终预览」直达既有模拟播放器并沿用当前公共房/私人房,切换时清理旧预览状态。保留细线悬浮导航与独立制作审核入口。

GPU0 空闲显存回收

  • vps66 GPU0 独立 systemd timer:运行/排队时跳过,空闲复查后释放模型和执行缓存,涵盖成功、失败和取消任务;保留基础显存,不重启 ComfyUI。
  • 待用户确认连续使用时的回收时延与下一次模型重载耗时;部署与回滚说明见 deploy/comfyui-idle-release/README.md。

账户资料与登录指引

  • 登录用户名单独突出展示并说明不带 @。头像支持 JPG/PNG/WebP、2 MB 内上传、更换与删除,绑定仅限当前账户拥有的媒体;删除头像保留原媒体。
  • 头像通过已登录用户可读的专用接口展示,同步到账户导航、评论和协作光标;评论打开/回到页面时刷新,打开期间每 30 秒更新。
  • 登录页和账户密码页提供找回入口,明确已绑定登录方式与管理员核验重置路径;自助邮件密码重置尚未实现,不宣称可用。
  • 已验证:隔离 8 项测试、生产构建、迁移与回滚、真实 QA 头像两次上传/更换/WebP 解码/删除/账户读取/匿名访问拦截、生产运行检查及找回入口。待用户视觉验收:账户、评论及光标的头像展示与浅/深色效果。

人脸种族分类工具箱

  • 生图工作台工具箱新增「人脸种族分类」卡片:取第 1 张参考图,经 web BFF /api/proxy/v1/race-classify → proxy 透传 → ecs110 race-cls 容器(FairFace YOLOv8-cls 7 类),内联展示 top1 与 top5 置信度;不产出图片、不进生成计费管线。
  • 服务端:race-cls/ 独立服务(FastAPI + ultralytics,镜像构建期校验权重 sha256),独立容器挂 infinite-canvas_default 网络、restart unless-stopped;proxy 经 RACE_CLS_URL 转发;web 透传白名单新增窄口子 isAllowedUnmeteredProxyUtility(仅 POST race-classify)。
  • 已验证:策略单测 9 项通过;ecs110 容器 /health 与真实人脸图分类(East Asian 0.5544 / 13ms);proxy 直连 /v1/race-classify 同结果;生产窄重建 proxy+web 后 verify-production-runtime.sh 通过、双容器 healthy;部署前已打 infinite_canvas-pre-racecls-202609101559.dump。
  • 待用户视觉验收:生图工作台工具箱卡片与 top5 结果面板(含深色模式)。
  • 反馈可见性修复(07316521):无参考图时点击直接弹文件选择器;结果同时以 Modal 与内联面板展示;卡片名带「分类中…」加载态。复验方式:硬刷新后点击卡片。
  • 回滚:manifest rollbackImages 保留旧 web/proxy tag;辅助容器可 docker rm -f race-cls 并从 proxy/models.env 移除 RACE_CLS_URL。

独立 Canvas Lab 接口测试工作台

  • 新增 apitest-platform/ 独立 React / Next.js 应用,目标域名 ic-apitest-platform.xshow.live;不替换现有画布 Web。
  • 图片 / 视频瀑布流、搜索筛选、分页、预览播放、批量持续上传;初始化各 100 个待上传素材位,实际媒体由用户提供。
  • 独立 PostgreSQL 保存元数据、接口预设和测试历史,OSS 走同区内网端点及独立前缀;上传执行真实解码,视频支持 Range。
  • JSON / multipart、同名多字段、嵌套素材引用、访问密码和会话内 API Key;HTTP 成功不代表生成或视觉验收通过。

GPU 监控显示准确性

  • 管理页区分全局等待、已分配等待与未分配差额,使用 pending_known;未知值不显示为 0。
  • 刷新请求不重叠;读取失败、服务端过期或快照超过 120 秒显示未知。高 GPU 利用率不再标为错误。
  • 显示状态快照时间并说明非逐卡采样时间;登记名称不冒充物理 GPU 编号,未上报 UUID 明确提示。
  • 尚待登录态页面验收;批次历史对账和真实逐卡身份/采样时间仍未接入,本次只更新只读监控,不改变调度行为。

GPU 中央队列可见性

  • GPU 管理页新增中央等待队列,展示当前顺序、模型/工作流、用户、已等待时长、等待原因、分配状态和提交时间。
  • 队列最多展示队首 100 项,并保留全量等待总数与截断提示;非管理员不返回逐任务队列条目。
  • 本次保持现有 FIFO 扫描和资源准入调度策略,不改变任务执行优先级;待使用普通负载建立基准后再评估公平排队和老化提权。

素材 MD5 旧缓存兼容修复

  • 新增和编辑素材只提交本次变更,旧缓存中未同步、缺少 MD5 的图片不再阻断其他素材保存,也不在保存或删除其他素材时被丢弃。
  • 显式编辑、导入旧图片时补算 MD5;本地命中重复图片仍确认服务端持久化。后端 MD5 校验、并发合并和删除标记保持有效。
  • 正式与测试环境已实测带旧缓存保存生成图片、刷新后读取和新图片解码;回归覆盖重复保存、删除标记、失败反馈和旧缓存保留。正式环境已按迁移前范围补回素材数据并校验引用媒体,未混入迁移后的测试新增图片;待用户复验本人已有缓存。
  • 两环境完整 runtime verifier 均通过。正式 GPU 调度器 /v1/gpus 曾在巡检中超时,未重启或改动该服务,最终复测恢复;保留失败与恢复日志,不将一次通过解释为长期稳定性保证。

生成记录列内筛选与 Excel 导出

  • 正式环境同时承载 canvas-proxy 与旧 proxy 两条生成链路时,生成记录的图片、视频和中间结果会依次从已配置的内部 Proxy 读取;主 Proxy 返回 404 后自动尝试备用 Proxy,避免共享数据库中的跨栈任务记录无法预览。正式环境已用跨栈历史任务验证最终视频 206 video/mp4、中间图片 206 image/png,登录态页面浏览器验收为 200 且无控制台/页面错误;待用户确认本人浏览器中的视觉与播放体验。
  • 管理后台「用户管理 → 生成记录」移除顶部筛选框,筛选入口融入表格列头:用户、用户输入、任务 ID 为列内文本搜索,能力、模型(支持搜索)、状态、评价、调优状态为列头多选筛选,原「能力 / 模型」列拆分为「能力」「模型」两列。
  • 任务耗时列新增预设区间筛选(不满 1 分钟、1-5、5-10、10-20、20-60 分钟、1 小时以上,可多选),服务端按完成时间与开始时间计算秒数过滤;进行中任务按当前时间计算。
  • 「导出筛选结果」从 11 列 CSV 改为 27 列 xlsx(exceljs),覆盖任务/记录 ID、用户、能力、模型、状态、失败原因、外部渠道与任务 ID、创建/开始/完成/更新时间、用时、提示词、请求参数、结果详情、评价、备注、调优状态与复跑信息;中文表头加粗、冻结首行、自动筛选。
  • 导出与服务端列表共用同一筛选解析(数组多选、user/prompt/taskId 文本、elapsed 区间),按筛选分页循环取全量(单次上限 5 万行);勾选行时仍仅导出选中记录。
  • TypeScript 通过;全量 bun 测试与基线一致(35 个既有环境性失败,无新增);admin-generation-quality.test.ts 的导出注入防护断言随 exceljs 富文本防护同步更新。尚未做浏览器交互验收:需在隔离验证环境覆盖各列筛选结果正确、筛选与导出内容一致、xlsx 字段完整可读。
  • 部署到 dev.ic.xshow.live(生产 infinite-canvas 栈 web,窄重建):候选 a635eeca 已推送 GZ main,镜像 infinite-canvas-web:b9943fa84f6eaf72f1c539ad5350fabd9b6be363 由同 SHA git-archive 快照构建并经本地 3100 端口金丝雀探测;发布检出 /home/gy/releases/ic-a635eeca762e08280350c5fc88140158c5589532 执行 deploy-production-service.sh web --apply,production_runtime_check=ok。新容器 infinite-canvas-web-1(5e2bc15f5f09)health=healthy,DATABASE_URL 指向 postgres:5432/infinite_canvas(4010 条生成记录、24 用户、148 画布),必填环境名齐全。域名探测:/login 200、哈希资源 200、/admin/generations 307 跳登录,其余容器 ID 与部署前基线一致。回滚镜像 infinite-canvas-web:6ce0a997e9602a8ab9cc4e2446f1a3045deb721f 保留于 manifest rollbackImages。登录后的列筛选与导出交互验收仍待用户在域名上确认。

DSH Spicy 画布模型接入

  • 画布网站 Agent、本机 Canvas Agent 与生图/视频提示词工作台统一提供 deepseek-v4.1-flash 和既有 qwen3.8-max;OpenCode Spicy 服务目录与运行时 provider 同步接受 DeepSeek V4.1 Flash 的图文输入。本机同一 DashScope 凭据直连及启动器真实调用两模型均通过;先发布到 dev.ic.xshow.live 验证纯文本、图片理解、画布工具调用、模型切换和错误详情,再决定正式站晋升。

On this page

XCamShow 模板视频换脸改走 Partner(本地候选,未发布)视频换脸v2 · 破甲 DeepSeek 遮挡选路(开发站已部署,待用户素材验收)DreamID-V 视频换脸(开发站候选)Wan3.0 视频换脸 / 视频换人 / 视频脱衣工具(正式发布候选,待浏览器验收)视频去马赛克分支整合(待实际视觉验收)GPU 调度器卡片仪表盘(待上线验收)Krea2 Turbo v2.5 姿势工作流换新版画布(候选)画布 Agent 左侧会话历史视频换脸/换人源比例与 Partner 合同Partner 视频姿势按比例路由视频去水印升级为 DiffuEraser视频换脸超长源视频提交前校验视频工具箱换脸复用 Partner 自动换头路由GPU 图片 Proxy 与新文档入口直播首页动效与 13000 创作恢复dev 域名黑曜珍珠白界面与画布任务恢复视频工具箱确定性拒绝不再无限等待MuleRouter 文生视频接入图片工作台旧任务恢复与重连提示生成记录媒体预览修复Partner Spicy 视频创建修复Scheduler 候选补丁修复姿势图片编辑路由分离Partner head-swap-bfs 自动路由实现Partner Klein 换头Mathew 工作台分支整合13000 智能尾帧执行恢复黑曜与珍珠白 AIGC 工作台本轮视觉修改已撤销画布鼠标跟随网格与加载优化画布入口与新建恢复页面跳转性能全站创作界面统一(当前增量)AI 主播平台定位与滚动视差导航选中勾选标记导航与玻璃波浪背景融合顶部悬浮导航与更多菜单画布列表页薄荷青与雾蓝设计工作台生成记录按批展示与收起Rebase 后 localhost:13000 验收直播间进度透明悬浮与收起视频换人工具选择保持Qwen Image 3.0 Pro 关闭提示词扩写网页 Agent 直播角色生产规范接入画布一键整理直播间转场关系图直播间制作面板简化直播间生产经验与复杂动作 Skill生成记录预览提速Skill 广场筛选精简生图与视频工作台状态持久保留Skill 广场能力分类修正生图 Krea2 Spicy 姿势并入编辑 LoRA 模块视频工作台参考素材区并入参考图视频参考区域按模型能力显隐直播间工作区全屏切换生图与视频工作台前置区域对齐Skill 广场 28 姿势 GIF 完整覆盖与 Mathew 分支审计公共房清单去重视频节点真实比例Cut 可选 Basic Speech Recognition品牌主题切换即时预览私人房独立素材分区图片工具箱固定执行引擎与 Spicy 姿势路由修复我的素材图片 MD5 去重管理员生成记录用户输入画布图片与视频工具箱 Pose 链路画布生成配置节点触控板滚动图片节点下一关键帧 AI 引导XCamShow Partner 姿势图片编辑Wan3.0 视频模型入口收敛直播间新手素材生产(整合候选)工作台紧凑创作面板工作台与 Skill 广场 UI 修复v0.19.0 生产发布人工确认视频任务恢复提示持久步骤尝试数据库基础服务端计划快照迁移基础固定候选联合验证补验报价换算保留服务端判定Agent 计划估算输出Agent 计划步骤输入绑定媒体、账本与 Agent 联合回归H3 真实推理前置核查H3 自动路由保留模型族生成证据与账本核对Agent 执行故障跨进程保持计划输入上下文Agent 入队日志失败保护Codex app-server 策略协议实测本机 Agent 提交错误诊断Agent 完整候选隔离复验Agent 确认通知异常Agent DAG 提案运行链路Skill 归档候选预览生成状态持久化Agent 执行诊断网站 Agent 会话隔离画布图层与分组面板文本多候选折叠画布视频帧截取视频数据工厂多模态 Caption视频数据工厂审核波形Canvas Agent 空白对话与历史恢复Canvas Agent 上传图片转画布节点Canvas Agent 同画布多标签页隔离Canvas Agent 任务取消稳定性生图与视频工作台三步式创作输入媒体驱动的模型筛选与自动路由画布提示词库加载加速直播角色素材与标注NSFW 工具箱姿势 Skill直播间复杂动作与 Skills 统一入口画布账户隔离视频工作台任务统计与完成态收口登录与注册MiniMax H3 DaSiWa 五模式画布提示词库加载加速GPU API 查询与模型目录视频预编辑组合接口Klein 换脸/换头四模式工作流视频节点原位重新生成画布互动 Skill 视频比例同步画布生成张数、配置节点与直播编排入口角色资产 Skills 接入生图工作台与画布生图工作台生成状态对账视频创作台尾帧参考图读取重试MiniMax H3 Max 官方 API视频创作台去水印与去字幕 Skills去水印与去字幕能力拆分Krea2 Spicy 姿势 LoRA画布与生图 OSS 直传 403 修复待测试管理员 API 模型与密钥完整映射工具箱 API Base URL 分流文档画布改进清单:调度信息收口与 API 输入前置校验画布工具箱、角色上线与 Agent 稳定性图片节点重新生成入口提示词库反向生成生产版本清单、Docker 安全回收与核心文件拆分SCAIL-2 视频换人重复提交与刷新恢复FLUX.2 Klein 9B 三图参考工作流任务型创作入口、图片快捷编辑与统一任务中心生图工作台历史任务终态恢复画布一键上线直播角色Identity 姿势模板单人物修复生图结果加入参考图Voxora AI 主播创作平台品牌主题Skill 广场明星分类Muse V3.5 一键脱衣效果对齐GPU 能力持续探测MiniMax H3 8 GPU 自动调度MiniMax H3 提示词中文指南SCAIL-2 附件同源工作流恢复SCAIL-2 视频换人编辑者分享按钮与邀请权限Qwen3.8 27B RunPod 模型下线视频结果持久化与失败任务定位GirlsLike 单图编辑黑图与并发排队修复视频任务映射缺失与预扣释放画布协作重连后的持久图片恢复管理后台视频流式预览画布生成任务 ID 与全链路定位Agent 调用画布智能尾帧GirlsLike 模型可用性恢复生产登录页重定向验收共享画布媒体跨账号恢复50 个明星 GirlsLike Krea2 文生图与单图编辑VDE GPU 清理显式停用契约Krea2 姿势 LoRA 文生图与单图编辑异步生成状态与结果自动核对账户与画布私有数据 CDN 隔离MiniMax H3 首尾帧图生视频我的画布旧缓存越权展示协同画布自身账号识别OpenCode Spicy 长请求心跳模型选择器供应商品牌标识PixVerse / Vidu / Kling 停用模型选择器执行通道分组Wan3 新加坡路由标签协同监控持续上报管理后台生成结果预览配置弹窗渠道信息布局ML 与百炼视频模型区分桌面端顶部导航鼠标操作OpenCode Spicy 真实 Skill 加载管理后台生成详情AI Film 智能尾帧颜色精确匹配vps66 GPU3 Huihui Qwen3.8 27B10 卡 GPU 调度与管理员实时监控画布 OpenCut 编辑入口与安全会话Skill 广场与生图工作台参数贯通工作台添加到素材反馈画布移动/框选工具切换Agent 对话与小型画布工作流生成个人 Skill画布素材 @ 候选缩略图本机 Agent 离线输入网站 Agent 画布引用图片画布媒体 Blob 修复与 OSS 直源 CDN系统用户名与操作者名称编辑Canvas Agent 0.7.2 与 OpenCode Spicy 能力探测画布 Agent 图片/视频提示词能力Agent 消息复制与输入历史参考图反推提示词OpenCode Spicy 发布切换重试OpenCode Spicy 长提示词附件Agent 多媒体多选引用Agent 引用图片缩略图OpenCode Spicy 请求稳定性协同冲突明细协同 Presence 与邀请管理多人协同 Redis 运行环境W3.0 Pro 与图片评论修复v0.10.14 文档站与画布悬浮说明工作台运行稳定性视频创作台结果预览VFE 原视频库加载性能VFE 原视频预览VFE 原片可恢复迁移画布桌面端与移动端浏览器回归CI 门禁管理员生成记录NSFW Skill 广场多人画布高频同步降载画布图片 Skill 与 NSFW 分类画布视频重复加载优化画布 CDN 冷加载降载Krea2 Identity v1.2 姿势编辑与 Muse V3.5 一键脱衣画布伪直播连环提示词 SkillMuleRouter Prime 与 Berry 视频模型MuleRouter 0827 缺失工作流接入画布直播角色可见编排入口SeedVR2 超分工作台与 Skill 广场入口YOLOv8 头像定位裁切工具Krea2 Turbo v2.5 LoRA StackQwen Image 3.0 Pro 长耗时编辑GPU API 图片工具箱文档补全视频组合接口并发提交v0.12.2 视频任务创建 408 恢复Krea2 BFS 换脸与换身体图片换人单阶段与 BFS 双阶段并存视频换人复用 BFS 双阶段图片换人BFS 双阶段背景保持触发词修复视频相同输入主动重新生成BFS/BodySwap 参考尺寸对齐Krea2 非 H3 工作流复验LTX 文生视频真实复验H3 素材上传与子模式路由Agent 收尾异常隔离Skill 冷归档预检DaSiWa 时长对齐说明H3 四模式真实静物验证边界H3 自动路由渠道边界H3 DaSiWa 单入口与键盘展开Agent 生图观察诊断错误码画布任务诊断提示接线(隔离浏览器已验证)Worker 诊断与恢复隔离联验Agent ACK 持久队列结构(尚未投递)图片结算与 ACK 原子入队ACK 投递与持久延后重试已完成 Agent 图片任务 ACK 补录原真实 Agent 生图 ACK 联验ACK 请求中途进程终止恢复直播间 P1/P2 产品层(PRD v3.1)画布编辑器存量数据崩溃修复玩法配置器(PRD §6.1)直播间向导保存闭环(PRD §8.1)视频节点看图推荐视频提示词(本地候选)直播间竖屏生成约束MiniMax H3 模型分组与品牌展示DaSiWa Turbo 调度更新画布视频工具箱产品分类修正全模型精确报价覆盖视频姿势两阶段组合接口管理员生成记录输入素材与结果分层Mathew 姿势能力整合与 Krea 模型自动路由管理员生成记录输入素材完整预览图片换脸与换头 Seed 全链路透传Codex / DSH 统一 Harness:Run 级 SkillLockfile管理员生成记录质量评价与数据集导出Proxy MiniMax H3 接口文档生成记录评价与管理员复跑GPU API 文档信息架构与更新时间(v0.21.4)MiniMax H3 Proxy 示例补全企业账户与 Partner Key 管理(未发布)学院滚动与企业管理入口直播间素材清单与点击引导(候选)表单式引导保留画布常驻进度与登录 Tabv0.21.7 直播角色画布联动GPU0 空闲显存回收账户资料与登录指引人脸种族分类工具箱独立 Canvas Lab 接口测试工作台GPU 监控显示准确性GPU 中央队列可见性素材 MD5 旧缓存兼容修复生成记录列内筛选与 Excel 导出DSH Spicy 画布模型接入