work-batch-render · git:20260927.9df448d · 2026-09-27 · sha256 b1ec4f5fa8b71d69
work-batch-render git:20260927.9df448dA
Immutable. This exact content never changes and is served at /api/v1/blob/b1ec4f5fa8b71d69.
---
name: work-batch-render
description: 按明确作品版本执行本地批量导出、已验证结果复用和有限失败恢复,保留不可变尝试记录;不选创作风格、不自动重剪、不发布或提交收费服务。
---
通用调用先按[能力交接合同](../../contracts/capability-handoff.md)核对当前 Agent 的读取、执行和读回能力。下文的操作名、严格字段、路径和本地执行器只约束选择本库实现的路径;使用其他工具时保留目标、范围、保护项与结果核对语义。
# work-batch-render
使用[batch_ops.py](../../runtime/batch_ops.py),operation=work-batch-render。每次调用的receipt目录是新目录,并且与batch_dir互不包含。
- prepare:绝对batch_dir必须不存在,batch_id,jobs=[{id,store,expected_version,audio_backend?}]。audio_backend 可选且必须为对象;省略时保留 work-render 默认选择。提供时按原值固定到 job,准备只登记选择,不认证该后端可执行;后端具体参数与条件依赖由 work-render 在执行时核验。核对当前工程与依赖,拒绝重复ID或同一store/version,固定文档/运行时/实际FFmpeg与ffprobe字节到manifest.json及SQLite索引。保存返回manifest_sha256。
- status:batch_dir与manifest_sha256。只查状态和当前版本关系,artifact_integrity=NOT_RECHECKED_STATUS_ONLY,不认证产物当前完整性。
- run:batch_dir、manifest_sha256、job_ids、retry_failed布尔。非阻塞OS锁,BATCH_BUSY时停止当前调用;每个选中任务本次最多一次新render。失败重试需retry_failed=true。成功结果先复核请求、回执、全部产物及输出哈希再复用,不能只看文件存在。显式 audio_backend 必须在实际 work-render 请求、结果绑定与 timeline 子回执一致;实际消费 helper 时重核其路径与字节身份,已变更不能复用。无 DSP 的分支不因未消费的 helper 缺失而失败。当前版本变化拒绝新导出,已有历史成功标RENDERED_HISTORICAL;不回写作品。
每次尝试用新目录jobs/id/attempt-0001,旧失败/中断不删除。拿到锁后,RUNNING有合法最终回执可恢复索引而不重渲染;无回执保留旧尝试并新建一次。恢复到失败回执本次即结束该项,另一次明确retry才执行。控制进程退出不证明FFmpeg已停:实际子进程继承锁fd,仍活着时不能启动第二worker。worker.lock的inode不能替换或清理。
单任务源文件缺失不阻止其他任务,修复源后只重试必要项。环境字节变更要求新batch,不改旧manifest。损坏索引拒绝,保留证据后另建队列;不要手改数据库让状态看起来成功。RENDERED只表示明确版本导出,PARTIAL须列失败项。完整看听、各版本意义、平台规范、宿主打开及发布不由本操作认证。