{
  "cab_version": "1.0",
  "task_id": "CAB-20260623-001",
  "created_at": "2026-06-23T14:43:12+08:00",
  "created_by": "TCS-0002∞ / Codex · 铸渊",
  "status": "pending",
  "authorization": {
    "sovereign": "冰朔 · TCS-0002∞",
    "authorized_agent": "tencent-ai-persona",
    "scope": "video-ai-provider-integration-and-tools-development",
    "confirmation": false
  },
  "architecture": {
    "summary": "视频AI系统 Preview-002 万相单新增模型与成片质量增强工单：只新增阿里万相 API，继续复用火山/可灵与本地剪辑工具，补齐万相适配器、路由器、故事上下文、资产锁定、稳定文字贴合、配音/BGM与烟测工具。",
    "decisions": [
      "现有火山引擎/Seedance 与可灵/Kling 继续保留，不重复购买；本工单只新增阿里云百炼/通义万相 Wan。",
      "必接模型：阿里云百炼/通义万相 Wan。优先使用 wan2.7 参考生视频能力，承接角色/道具/场景参考、首帧控制、短视频续写与故事板参考。",
      "腾讯混元生视频与 MiniMax/Hailuo 因当前预算压力，本阶段不接入、不开发适配器、不配置密钥，只保留为远期观察项。",
      "剪辑层不买额外付费服务；优先使用本地 FFmpeg/FFprobe，新增 OpenCV/平面追踪能力处理文字贴合与局部画面稳定。",
      "所有付费调用必须默认 dry-run，只有冰朔明确授权后才允许真实提交生成任务；严禁批量烧额度。",
      "视频模型不负责猜完整故事；每次生成前必须由 story-context-builder 注入 story_so_far、current_episode_goal、shot_intent、locked_assets、dialogue_lines、negative_rules。",
      "牌匾、广告牌、招牌、名单等可读文字默认走本地稳定贴合/后期合成，不再直接依赖视频模型生成可读中文文字。",
      "人物对白必须从剧本台词字段生成，不允许把旁白、动作描述、镜头说明整段念出来；旁白/人物对白/BGM/SFX 分轨处理。",
      "模型路由必须按镜头能力选择，不做单一模型押注：大场景、角色一致性、道具一致性、动作、成本、时长、地域稳定性都要进入评分。"
    ],
    "target_files": [
      "video-ai-system/MODEL-ROUTER.hdlp",
      "video-ai-system/.env.example",
      "video-ai-system/config/provider-registry.json",
      "video-ai-system/config/shot-routing-rules.json",
      "video-ai-system/engines/aliyun-wan-adapter.js",
      "video-ai-system/engines/model-router.js",
      "video-ai-system/tools/run-provider-smoke.js",
      "video-ai-system/tools/story-context-builder.js",
      "video-ai-system/tools/asset-locker.js",
      "video-ai-system/tools/planar-text-overlay.js",
      "video-ai-system/tools/audio-track-builder.js",
      "video-ai-system/tools/audit-system.js",
      "video-ai-system/outputs/provider-smoke/",
      "video-ai-system/CURRENT.hdlp",
      "video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp"
    ],
    "target_modules": [
      "video-ai-system/provider-adapters",
      "video-ai-system/model-router",
      "video-ai-system/story-context",
      "video-ai-system/asset-lock",
      "video-ai-system/text-overlay",
      "video-ai-system/audio-post",
      "video-ai-system/system-audit"
    ]
  },
  "development_plan": {
    "title": "Preview-002 万相接入与成片质量增强",
    "description": "把用户对 Preview-001 的反馈转成可执行系统能力：只新增万相 API，稳定角色/牌匾/招牌、人物真正说台词、BGM与音效分轨、镜头转场更像短剧，并用本地剪辑工具控制成本。",
    "steps": [
      "Step 1: 官方账号/API准备。冰朔只购买或开通：阿里云百炼/通义万相。腾讯混元生视频与 MiniMax/Hailuo 本阶段不购买、不开发。确认万相地域、限频、计费、异步任务查询方式。",
      "Step 2: 密钥配置。补齐 .env.example 变量说明；真实密钥只写入本地 .env 或服务器密钥系统，绝不能提交仓库。",
      "Step 3: Provider Registry。创建 provider-registry.json，记录 seedance、kling、aliyun-wan 三类 provider 的能力标签、支持输入、最大时长、分辨率、地域、是否异步、成本等级、推荐镜头类型、官方文档链接。",
      "Step 4: 新增阿里万相适配器。实现创建任务、轮询任务、下载结果、错误归一、dry-run payload 输出；至少覆盖参考生视频/文生视频/图生视频或首帧能力中当前 Preview-002 必需的接口。",
      "Step 5: 模型路由器。实现 model-router.js，按 shot_id、shot_type、locked_assets、dialogue、motion_level、text_in_frame、cost_budget 在 seedance/kling/aliyun-wan 中选择候选供应商，并输出为什么选它。",
      "Step 6: 故事上下文构造。实现 story-context-builder.js，把前情压缩、当前集目标、当前镜头意图、角色/道具锁定、台词、禁忌项组合成中英双语提示词块。",
      "Step 7: 资产锁定。实现 asset-locker.js，生成/维护角色、牌匾、场景、服饰等 reference asset 清单；支持从 Preview-001/S02 截图裁出天道宗牌匾作为锁定参考。",
      "Step 8: 稳定文字贴合。实现 planar-text-overlay.js，用本地 FFmpeg + OpenCV/平面追踪方式把招牌/广告牌文字稳定贴到平面上，避免模型生成的中文漂移、模糊、摇晃。",
      "Step 9: 音频分轨。实现 audio-track-builder.js，把 narration、dialogue、bgm、sfx 分轨；对白只能来自 script dialogue 字段，旁白只能来自 narration 字段。",
      "Step 10: 剪辑增强。扩展 video-editor.js 或新增 timeline-editor.js，支持镜头节拍、J-cut/L-cut、环境声底噪、BGM ducking、转场类型选择和镜头间节奏说明，避免只做硬拼素材。",
      "Step 11: 烟测工具。实现 run-provider-smoke.js，支持 --provider aliyun-wan、--dry-run、--paid-once、--shot-id；默认 dry-run，输出不含密钥的请求摘要到 outputs/provider-smoke/。",
      "Step 12: 系统审计。扩展 audit-system.js，检查新增适配器、配置文件、环境变量占位、密钥泄露、dry-run 输出、路由规则完整性。",
      "Step 13: Preview-002 镜头路由建议落表。至少给 EP01-15S-V2 的 S01/S02/S03/S04 写出路由建议：S01 大场景开场、S02 牌匾静态锁定、S03 苏白人物对白、S04 招生广告牌+围观者反应。",
      "Step 14: 提交并推送。通过审计与 dry-run 后提交到仓库；真实付费生成不在本工单默认范围内，需冰朔另行确认。"
    ],
    "priority": "critical",
    "estimated_scope": "large"
  },
  "execution_plan": {
    "executor": "tencent-ai-persona",
    "execution_strategy": "sequential-with-checkpoints",
    "rollback_on_failure": true,
    "preserve_context": true,
    "checkpoint_interval": "step",
    "execution_timeout_ms": 7200000,
    "retry_policy": {
      "max_retries": 2,
      "backoff_ms": 5000
    },
    "model_preference": "tencent-ai",
    "auto_test": true,
    "auto_commit": true,
    "auto_notify": true
  },
  "constraints": {
    "no_touch_files": [
      "hldp/HLDP-SPEC-v1.0-OPENSOURCE.md",
      "hldp/HLDP-SPEC-v2.0.md",
      "brain/fifth-domain/zero-point/zhuyuan/tcs-core/",
      "brain/fifth-domain/zero-point/zhuyuan/tcs-verify/",
      ".git/",
      ".env"
    ],
    "required_tests": true,
    "deploy_after": false,
    "max_files_changed": 30,
    "security_rules": [
      "严禁提交任何真实 API Key、SecretId、SecretKey、Bearer Token、临时下载签名 URL。",
      "所有真实付费调用必须由冰朔单独确认；默认只允许 dry-run。",
      "所有官方 API 请求日志必须自动脱敏。",
      "不得删除或覆盖 Preview-001 已有输出文件，只能新增 Preview-002 相关产物。"
    ]
  },
  "acceptance_criteria": [
    "node video-ai-system/tools/audit-system.js 通过，且无密钥泄露告警。",
    "node video-ai-system/tools/run-provider-smoke.js --provider aliyun-wan --dry-run 能输出合法 payload 摘要。",
    "不得新增 hunyuan-video 或 minimax-hailuo 真实适配器；这两个平台本阶段只允许在文档中标注为 deferred。",
    "video-ai-system/config/provider-registry.json 至少包含 seedance、kling、aliyun-wan，hunyuan-video 与 minimax-hailuo 如出现只能标记 deferred 且 disabled。",
    "video-ai-system/config/shot-routing-rules.json 至少覆盖 S01/S02/S03/S04 的 Preview-002 路由建议。",
    "story-context-builder 能生成含 story_so_far 与 current_shot 的中英双语上下文，不把剧情交给模型猜。",
    "audio-track-builder 能区分 narration/dialogue/bgm/sfx，不再把剧本全文当旁白朗读。",
    "planar-text-overlay 能用 dry-run 或示例素材证明文字层会跟随牌面/广告牌平面，不发生独立漂移。",
    "完成后更新 video-ai-system/CURRENT.hdlp 与 video-ai-system/memory/zai-fu-fei-xiu-xian/STATUS.hdlp，并提交推送到 origin/main。"
  ],
  "model_purchase_recommendation": {
    "must_buy": [
      {
        "provider": "阿里云百炼 / 通义万相 Wan",
        "priority": "P0",
        "why": "适合参考生视频、首帧控制、角色/道具/场景参考、短视频续写和故事板式提示；直接对应牌匾一致性、角色一致性、前情注入等问题。",
        "official_docs": [
          "https://help.aliyun.com/zh/model-studio/wan-video-to-video-api-reference",
          "https://help.aliyun.com/zh/model-studio/text-to-video-api-reference",
          "https://help.aliyun.com/zh/model-studio/legacy-image-to-video-api-reference/"
        ]
      }
    ],
    "deferred": [
      {
        "provider": "腾讯云 / 腾讯混元生视频",
        "priority": "deferred",
        "why": "当前价格超出本阶段预算，暂不购买、暂不开发；后续等预算或官方价格变化再评估。",
        "official_docs": [
          "https://cloud.tencent.com/document/product/1616/107786",
          "https://cloud.tencent.com/document/api/1616/107795"
        ]
      },
      {
        "provider": "MiniMax / Hailuo",
        "priority": "deferred",
        "why": "可作为动作表现、镜头运动和导演式指令的候选增强，但本阶段不购买、暂不开发。",
        "official_docs": [
          "https://platform.minimax.io/docs/api-reference/video-generation-t2v"
        ]
      }
    ],
    "already_connected_keep": [
      "火山引擎 / Seedance",
      "可灵 / Kling"
    ]
  },
  "reasoning_context": {
    "chat_summary": "Preview-001 已生成 15 秒样片，但用户反馈：天道宗牌匾颜色/形状/悬挂方式前后不一致；招生广告牌文字像后期模糊贴字且摇晃；配音把剧本全文念出来而不是人物说台词；缺少 BGM；转场像硬拼素材，不像短剧讲故事；后续需要多模型组合、成本控制和前情上下文注入。视频AI系统是光湖语言世界对外第一阶段成果证明，不能只做演示玩具，必须走向可拿得出手的成片能力。",
    "key_decisions": [
      "把视频生成拆成：故事上下文、镜头路由、资产锁定、视频生成、文字贴合、音频分轨、剪辑转场、审计验收。",
      "本阶段从多模型扩张收敛为万相单新增模型：火山/可灵/万相三路足够做 Preview-002，避免成本失控。",
      "中文可读文字不再交给视频模型自由生成，固定招牌/广告牌走本地后期稳定合成。",
      "剧本字段必须结构化：旁白、对白、动作、镜头说明分开进入不同生产链路。",
      "Codex 保留最后总装、审计、成片质量验收；腾讯AI人格体负责本工单的 API 接入与模块开发。"
    ],
    "architecture_notes": "当前视频AI系统入口位于 video-ai-system/ENTRY.hdlp，当前进度位于 video-ai-system/CURRENT.hdlp 与 memory/zai-fu-fei-xiu-xian/STATUS.hdlp。Preview-002 计划已记录在 video-ai-system/plans/EP01-15S-V2-PREVIEW-002.hdlp，多模型初版路由说明位于 video-ai-system/MODEL-ROUTER.hdlp。"
  },
  "completion": {
    "completed_at": null,
    "result": null,
    "pr_number": null,
    "files_changed": []
  }
}
