3.2 KiB
3.2 KiB
Module Contracts
Goal
定义各模块的职责边界、输入输出和契约,避免旧系统中“脚本互相读目录、互相猜状态”的耦合方式。
Contract Principles
- 每个模块只处理一类能力
- 模块只接收明确输入,不扫描全世界
- 模块输出必须结构化
- 模块不直接操控其他模块的内部实现
- 模块不直接依赖具体 provider
Shared Concepts
所有模块统一围绕这些对象协作:
TaskTaskStepArtifactSettingsProviderRef
Ingest Module
Responsibility
- 接收文件输入
- 校验最小处理条件
- 创建任务
Input
- 本地文件路径
- 当前配置
Output
Tasksource_videoartifact
Must Not Do
- 不直接转录
- 不写上传状态
Transcribe Module
Responsibility
- 调用转录 provider
- 生成字幕产物
Input
Tasksource_videoartifacttranscribesettings
Output
subtitle_srtartifact
Must Not Do
- 不识别歌曲
- 不决定切歌策略
Song Detect Module
Responsibility
- 根据字幕识别歌曲
- 生成歌曲结构化结果
Input
Tasksubtitle_srtartifactsong_detectsettings
Output
songs_jsonartifactsongs_txtartifact
Must Not Do
- 不切歌
- 不上传
Split Module
Responsibility
- 根据歌曲列表切割纯享版片段
Input
Tasksongs_jsonartifactsource_videoartifactsplitsettings
Output
- 多个
clip_videoartifact
Publish Module
Responsibility
- 上传纯享版视频
- 记录发布结果
Input
Taskclip_video[]publishsettings
Output
PublishRecordpublish_bvidartifact
Must Not Do
- 不负责评论文案生成
- 不负责合集匹配策略
Comment Module
Responsibility
- 发布并置顶评论
Input
TaskPublishRecordsongs_txtartifactcommentsettings
Output
comment_recordartifact
Collection Module
Responsibility
- 根据策略同步合集 A / B
Input
TaskPublishRecord或外部full_video_bvidcollectionsettingscollection strategy
Output
CollectionBinding
Internal Sub-Strategies
full_video_collection_strategysong_collection_strategy
Provider Contracts
TranscribeProvider
transcribe(task, source_video, settings) -> subtitle_srt
SongDetector
detect(task, subtitle_srt, settings) -> songs_json, songs_txt
PublishProvider
publish(task, clip_videos, settings) -> PublishRecord
CommentStrategy
sync_comment(task, publish_record, songs_txt, settings) -> comment_record
CollectionStrategy
sync_collection(task, context, settings) -> CollectionBinding[]
Orchestration Rules
模块本身不负责全局编排。
全局编排由任务引擎或 worker 负责:
- 判断下一步该跑什么
- 决定是否重试
- 写入状态
- 调度具体模块
Error Contract
所有模块失败时应返回统一错误结构:
codemessageretryabledetails
不得只返回原始字符串日志作为唯一错误结果。
Non-Goals
- 模块之间不共享私有目录扫描逻辑
- 模块契约不直接暴露 shell 命令细节