stepsCompleted: [1, 2, 3] inputDocuments: ['prd.md', 'architecture.md'] workflowType: 'epics-and-stories' project_name: '223-236-template-6' user_name: 'User'
This document provides a complete epic and story breakdown for 序灵 Matrix 助手, decomposing requirements from PRD, UX Design if it exists, and Architecture requirements into implementable stories with complete acceptance criteria.
FR1: 系统能够读取用户导入的 TXT 格式网文文件
FR2: 系统能够从 TXT 文件第一章提取内容并计算 MD5 指纹
FR3: 系统能够通过 API 检查指纹是否已存在于服务器数据库
FR4: 系统能够为首次处理的作品生成唯一 work_id 标识符
FR5: 系统能够检测续更作品(已存在 work_id)并仅处理新增章节
FR6: 系统能够在网络错误时自动重试 API 调用
FR7: 系统能够识别 TXT 文件中的章节标题(兼容多种格式)
FR8: 系统能够清洗正文格式(合并空行、统一缩进、压缩空格)
FR9: 系统能够将清洗后的内容按固定长度分段(避免句子中间断开)
FR10: 系统能够将清洗后的数据输出为结构化 JSON 格式
FR11: 系统能够使用原子写机制保存清洗数据(防止断电损坏)
FR12: 系统能够从全文中提取候选术语(中文 2-6 字、英文大写开头)
FR13: 系统能够统计每个术语的出现频次和跨章分布
FR14: 系统能够根据频次和分布筛选核心术语(Top 200)
FR15: 系统能够向用户预览提取的术语列表及其建议翻译
FR16: 系统能够手动编辑术语翻译并锁定
FR17: 系统能够复用已翻译作品的术语库处理续更内容
FR18: 系统能够使用本地 GPU 加速的 m2m100 模型进行中译英翻译
FR19: 系统能够在翻译前将核心术语替换为占位符(§T1§, §T2§...)
FR20: 系统能够在翻译后将占位符还原为锁定的术语翻译
FR21: 系统能够批量处理多个分段以提高 GPU 利用率
FR22: 系统能够在批量翻译失败时降级为单条翻译
FR23: 系统能够记录翻译失败的项目到失败清单
FR24: 系统能够将同一章节的分段合并为完整章节
FR25: 系统能够逐章调用上传 API 发布翻译内容
FR26: 系统能够在上传前根据章节字数计算并扣除 CU 费用
FR27: 系统能够在上传失败时自动重试
FR28: 系统能够记录上传失败的章节并提供批量重试
FR29: 系统能够标记缺失分段章节为不完整状态
FR30: 系统能够显示翻译任务进度(当前章节/总章节)
FR31: 系统能够响应用户暂停请求立即中断翻译任务
FR32: 系统能够从暂停点或崩溃点恢复翻译任务
FR33: 系统能够在任务执行过程中持续保存进度状态
FR34: 系统能够在启动时检测并提示用户未完成的任务
FR35: 系统能够显示任务预计完成时间
FR36: 系统能够通过拖放方式导入 TXT 文件
FR37: 系统能够在导入后显示作品预览信息(章节数、术语数、预计时间)
FR38: 系统能够在翻译完成后发送桌面通知
FR39: 系统能够最小化到系统托盘并在后台运行
FR40: 系统能够记录任务历史(翻译/上传/失败)
FR41: 系统能够将用户数据本地存储(不上传云端)
FR42: 系统能够在生成的翻译内容中添加翻译标识
FR43: 系统能够声明用户需拥有内容翻译权和发布权
FR44: 系统能够将用户数据本地存储(不上传云端)
FR45: 系统能够通过 work_id MD5 仅用于指纹查重(不上传内容)
FR46: 系统能够在网络断开时继续执行本地翻译任务
FR47: 系统能够检测网络连接状态并显示给用户
FR48: 系统能够将网络断开期间的上传任务保存到队列
FR49: 系统能够在网络恢复时自动执行队列中的上传任务
FR50: 系统能够在启动时检查是否有新版本可用
FR51: 系统能够记录应用日志用于问题诊断
FR52: 系统能够按量计费(一次性买断 + CU 扣费)
NFR-P1: 翻译速度 ≥ 5000 字符/分钟(基于 RTX 3060 基准 GPU)
NFR-P2: GPU 利用率 ≥ 80%(非空闲处理状态)
NFR-P3: 内存占用 < 4 GB(不含模型文件)
NFR-P4: 应用启动时间 < 10 秒(GPU 检测 + 模型加载)
NFR-P5: Pause 指令响应时间 < 1 秒(立即中断)
NFR-P6: 用户界面操作响应 < 200 毫秒(无卡顿感知)
AR1: Python 3.11+ 编程语言
AR2: PyQt6 桌面 GUI 框架
AR3: CTranslate2 推理引擎 + facebook/m2m100_418M 模型
AR4: CUDA GPU 加速支持(RTX 3050/3060 最小)
AR5: Crash-Safe 原子写机制(.tmp + fsync + rename)
AR6: Pipeline 模式(六阶段流水线编排)
AR7: State Machine 状态管理
AR8: Repository 模式(数据持久化抽象)
AR9: Observer 模式(GUI 更新通知)
AR10: PyInstaller 打包为可执行文件
AR11: GPU 批处理优化(动态调整批次大小)
AR12: 增量进度保存(减少磁盘写入)
AR13: 章节识别(兼容多种标题格式)
AR14: 定长分段(900 字符基准,950 字符上限,1200 字符断点)
AR15: Top200 术语自动提取
AR16: 术语锁定占位符机制(§Ti§)
AR17: 失败检测 + 自动重试(3次,指数退避)
AR18: 失败清单保存(upload_failed.jsonl)
AR19: 断点续传(跳过已完成章节)
AR20: 任务历史记录
AR21: 桌面通知(Windows 原生 Toast, macOS NotificationCenter)
AR22: 系统托盘最小化 + 后台运行
AR23: License 硬件指纹绑定 + 在线激活验证
AR24: 离线激活支持(本地验证签名)
不适用 - 未提供 UX 设计文档
| Epic | FRs 覆盖 |
|---|---|
| Epic 1: 基础架构与 Crash-Safe 机制 | AR5, AR6, AR7, AR8 |
| Epic 2: 指纹机制模块 | FR1-FR6 |
| Epic 3: 清洗模块 | FR7, FR9-FR11 |
| Epic 4: 术语提取模块 | FR12-FR17 |
| Epic 5: 翻译模块 | FR18-FR23 |
| Epic 6: 上传模块 | FR24-FR29, FR26, FR42-FR43, AR17, AR18, AR19 |
| Epic 7a: 任务调度核心 | FR30-FR35, AR20 |
| Epic 7b: 用户界面完整版 | FR36-FR52, AR21, AR22 |
Epic 目标: 用户在系统意外关闭或断电后,能够从断点继续翻译,无需重新开始。
覆盖的需求: AR5 (Crash-Safe 原子写), AR6 (Pipeline 模式), AR7 (State Machine), AR8 (Repository 模式)
As a 系统开发者, I want 建立六阶段 Pipeline 编排框架, So that 可以将文件处理流程模块化并支持灵活组合。
验收标准:
Given 系统已初始化 When 创建 Pipeline 对象并添加多个阶段处理器 Then Pipeline 按顺序执行所有阶段并将每个阶段的输出传递给下一阶段 And 任一阶段抛出异常时,Pipeline 捕获异常并停止执行 And 支持 get_stage_result(stage_name) 获取指定阶段的输出 And 支持 reset() 方法重置 Pipeline 状态
技术任务:
pipeline/pipeline.py 核心类Stage 抽象基类和 PipelineExecutor估算: 5 故事点
As a 系统, I want 使用状态机管理翻译任务的生命周期, So that 可以追踪任务状态并支持状态转换验证。
验收标准:
Given 系统已定义任务状态 (IDLE, RUNNING, PAUSED, COMPLETED, FAILED) When 任务从 IDLE 状态请求转换到 RUNNING 状态 Then 状态转换成功并记录状态变更时间戳 And 状态机拒绝无效的状态转换 (如从 FAILED 直接到 RUNNING 必须经过 PAUSED) And 支持 get_current_state() 和 get_state_history() 查询 And 状态变更事件可通过 Observer 订阅
技术任务:
state_machine/task_state.py 状态枚举TaskStateMachine 类和状态转换规则估算: 8 故事点
As a 系统, I want 使用 Repository 模式抽象数据持久化, So that 可以灵活切换存储后端 (本地文件/数据库) 并统一数据访问接口。
验收标准:
Given Repository 抽象基类已定义 When 创建 FileTaskRepository 实现 Then 支持保存任务数据到 JSON 文件 And 支持按 work_id 查询任务 And 支持更新任务状态和进度 And 支持获取所有未完成任务列表 And 所有操作返回统一的 Result 对象 (包含 data/error)
技术任务:
repository/base.py 抽象基类repository/file_task_repository.py 实现估算: 6 故事点
As a 系统, I want 使用原子写入机制保存关键数据, So that 即使断电或崩溃也不会损坏数据文件。
验收标准:
Given 需要保存任务数据到文件 When 调用 atomic_write() 方法保存数据 Then 数据首先写入临时文件 (.tmp 后缀) And 使用 fsync() 确保数据刷新到磁盘 And 原子操作重命名临时文件为目标文件 And 如果写入失败,目标文件保持不变 And 系统启动时检测并清理残留的临时文件
技术任务:
utils/atomic_write.py 工具模块估算: 5 故事点
As a GUI, I want 通过 Observer 模式订阅任务进度事件, So that 可以实时更新用户界面显示翻译进度。
验收标准:
Given 系统正在执行翻译任务 When 任务状态或进度发生变化 Then 所有订阅的 Observer 接收到进度更新通知 And 通知包含当前阶段、当前章节、总章节数、进度百分比 And 支持订阅者注册和取消订阅 And 支持按事件类型过滤通知 (STATE_CHANGE, PROGRESS_UPDATE, ERROR)
技术任务:
observer/event.py 事件数据类observer/publisher.py 发布者基类估算: 4 故事点
Epic 1 总结: 5 个故事,共 28 故事点
Epic 目标: 用户导入已处理过的文件时,系统自动识别并复用结果,避免重复翻译。
覆盖的需求: FR1 (文件指纹计算), FR2 (分块哈希), FR3 (指纹缓存), FR4 (重复检测), FR5 (缓存失效), FR6 (指纹导出)
As a 系统, I want 计算文件的 SHA-256 内容哈希值, So that 可以唯一标识文件内容并检测重复。
验收标准:
Given 用户选择了一个文本文件 When 系统计算文件哈希值 Then 使用 SHA-256 算法计算完整文件内容的哈希 And 只读取文件内容,忽略元数据 (文件名、修改时间) And 返回 64 位十六进制哈希字符串 And 大文件 (>100MB) 支持进度回调
技术任务:
fingerprint/hasher.py 模块calculate_file_hash(file_path, algorithm='sha-256') 函数估算: 3 故事点
As a 系统, I want 支持按固定大小的块计算文件哈希, So that 大文件可以分块处理并支持增量验证。
验收标准:
Given 大文件需要分块处理 When 系统计算分块哈希 Then 按 4MB 块大小分割文件 And 为每个块计算独立哈希值 And 返回块哈希列表和组合哈希 (Merkle Tree 根哈希) And 支持配置块大小
技术任务:
fingerprint/hasher.py 中实现分块读取逻辑calculate_chunked_hash(file_path, chunk_size=4*1024*1024)估算: 5 故事点
As a 系统, I want 将文件指纹缓存到本地数据库, So that 已处理文件可以快速复用无需重新计算。
验收标准:
Given 文件哈希计算完成
When 系统保存指纹到缓存
Then 存储文件哈希、文件路径、文件大小、计算时间戳
And 缓存文件位于 ~/.cache/bmad_translator/fingerprints/
And 使用 SQLite 存储缓存索引
And 支持按哈希值快速查询缓存
技术任务:
fingerprint/cache.py 缓存模块FingerprintCache 数据模型估算: 5 故事点
As a 用户, I want 系统自动检测重复文件, So that 避免重复翻译相同内容。
验收标准:
Given 用户添加了新文件 When 系统检测到文件哈希已存在缓存 Then 提示用户"此文件已处理过,是否复用上次结果?" And 显示上次处理时间和处理结果 And 用户选择复用时直接加载缓存结果 And 用户选择重新处理时重新执行完整流程
技术任务:
fingerprint/detector.py 重复检测模块is_duplicate(file_hash) 查询方法估算: 4 故事点
As a 系统, I want 在源文件内容变化时使缓存失效, So that 确保处理结果始终反映最新文件内容。
验收标准:
Given 文件已建立指纹缓存 When 用户修改了源文件内容 Then 文件哈希值发生变化 And 系统检测到哈希不匹配 And 标记旧缓存为无效 And 重新计算新哈希并创建新缓存条目 And 定期清理超过 30 天的无效缓存
技术任务:
fingerprint/invalidator.py 模块sched 模块)估算: 4 故事点
As a 用户, I want 导出文件指纹报告, So that 可以离线审核文件处理历史。
验收标准:
Given 用户已处理多个文件 When 用户选择导出指纹报告 Then 生成 CSV 格式报告包含:文件名、哈希值、文件大小、处理时间 And 支持选择日期范围导出 And 支持导出到指定路径 And 导出完成后显示文件位置
技术任务:
fingerprint/exporter.py 模块export_fingerprints(output_path, date_range) 函数估算: 3 故事点
As a 系统, I want 在网络错误时自动重试 API 调用, So that 可以提高指纹查重的可靠性。
验收标准:
Given 系统正在执行 API 调用 When 发生网络错误 (超时/连接失败/5xx错误) Then 系统等待 2 秒后自动重试 And 最多重试 3 次 And 重试成功后继续正常流程 And 3 次重试均失败后记录错误并提示用户 And 记录重试次数到日志
技术任务:
fingerprint/retry_handler.py 模块估算: 3 故事点
Epic 2 总结: 7 个故事,共 27 故事点
Epic 目标: 清洗和规范化小说内容,去除无关元素、修复格式问题、统一标点符号,为翻译提供干净的输入文本。
覆盖的需求: FR7 (移除无关内容), FR9 (段落格式修复), FR10 (标点统一), FR11 (硬/软回车处理)
As a 系统, I want 自动过滤小说中的广告、版权声明和章节标题无关内容, So that 翻译输入保持纯净的小说正文。
验收标准:
Given 小说文件包含广告、版权声明等内容 When 系统执行清洗过滤 Then 识别并删除包含"版权所有"、"转载请注明"等特征的行 And 删除纯 URL 行 And 删除重复出现的页眉/页脚 And 保留有效的章节标题 And 生成清洗日志报告删除的内容类型和数量
技术任务:
cleaning/filter.py 模块remove_irrelevant_content(text) 函数估算: 5 故事点
As a 系统, I want 修复破损的段落结构, So that 翻译时能够正确识别段落边界。
验收标准:
Given 文本存在孤立的单词或短语行 When 系统检测段落格式 Then 识别被错误分割的段落 (如行尾无标点且非章节标题) And 将孤立行合并到前一段落 And 保持对话行独立 (包含引号的行) And 确保段落之间有空行分隔 And 生成格式修复报告
技术任务:
cleaning/paragraph_fixer.py 模块估算: 6 故事点
As a 系统, I want 将全角/半角标点符号统一转换为全角中文标点, So that 翻译质量更好且格式一致。
验收标准:
Given 文本混合使用全角和半角标点 When 系统执行标点统一 Then 将半角句号、逗号、问号、感叹号转换为全角 And 统一引号样式 (中文使用 "" 而非 "") And 统一省略号样式 (使用 …… 而非 ...) And 保留英文引号内的英文标点不变 And 生成标点修正统计
技术任务:
cleaning/punctuation_normalizer.py 模块估算: 4 故事点
As a 系统, I want 识别并处理硬回车和软回车, So that 正确保留段落结构并去除行末连字符。
验收标准:
Given 文本包含软回车和硬回车 When 系统分析回车类型 Then 识别行末连字符 (如 "exam-\nple") 并合并为完整单词 And 识别连续的软回车 (单个换行符) 合并为段落 And 保留硬回车 (双换行符) 作为段落分隔 And 支持 Windows (\r\n) 和 Unix (\n) 换行符 And 生成回车处理报告
技术任务:
cleaning/line_break_handler.py 模块估算: 5 故事点
As a 用户, I want 一键执行完整的清洗流程并查看清洗报告, So that 了解文本处理效果并验证清洗质量。
验收标准:
Given 用户已选择待清洗的文本文件 When 用户执行清洗操作 Then 按顺序执行:过滤无关内容 → 修复段落 → 统一标点 → 处理回车 And 显示实时进度条 And 完成后生成 HTML 格式清洗报告 And 报告包含:原文长度、清洗后长度、删除行数、修改统计、预览对比 And 支持导出清洗报告
技术任务:
cleaning/pipeline.py 清洗流程编排CleaningReport 数据类估算: 5 故事点
Epic 3 总结: 5 个故事,共 25 故事点
Epic 目标: 翻译过程中角色名和专有术语保持一致,符合用户设定。
覆盖的需求: FR12 (术语识别), FR13 (术语表管理), FR14 (术语标注), FR15 (冲突检测), FR16 (术语导入导出), FR17 (上下文感知)
As a 系统, I want 自动识别文本中的专有术语和角色名, So that 构建初始术语表供用户审核。
验收标准:
Given 小说文本已加载 When 系统执行术语识别 Then 使用词性标注识别人名 (nr)、地名 (ns)、机构名 (nt) And 识别高频连续大写/中文组合 (2-4 字) And 识别数字+单位组合 (如"三阶法师") And 过滤停用词表 (如"今天"、"有人") And 按频率排序生成候选术语列表
技术任务:
terminology/extractor.py 模块估算: 6 故事点
As a 用户, I want 管理术语表 (增删改查), So that 可以自定义术语并控制翻译行为。
验收标准:
Given 术语表已初始化 When 用户添加新术语 Then 支持输入术语原文、目标翻译、术语类型、备注 And 验证术语格式 (不能为空,不能含特殊字符) And 检测重复术语并提示用户 When 用户编辑术语 Then 支持修改所有字段 And 记录修改历史 When 用户删除术语 Then 术语从表中移除 And 翻译时不再使用该术语
技术任务:
terminology/terminology_manager.py 模块Term 数据类估算: 5 故事点
As a 用户, I want 系统检测术语表中的冲突, So that 避免翻译时出现不一致。
验收标准:
Given 术语表包含多个术语 When 用户添加或修改术语 Then 检测以下冲突类型:
技术任务:
terminology/conflict_detector.py 模块估算: 5 故事点
As a 用户, I want 导入和导出术语表, So that 可以在不同项目间复用术语表。
验收标准:
Given 用户有现成的术语表文件 When 用户导入术语表 Then 支持 CSV 格式 (原文,翻译,类型,备注) And 支持 JSON 格式 And 导入时验证数据格式 And 检测并报告导入冲突 And 显示导入结果摘要 When 用户导出术语表 Then 支持导出为 CSV 和 JSON And 包含所有术语字段 And 支持选择性导出 (按类型筛选)
技术任务:
terminology/io.py 模块估算: 4 故事点
As a 系统, I want 在文本中标注术语出现的上下文, So that 用户可以根据上下文确定合适的翻译。
验收标准:
Given 文本包含多个术语实例 When 系统标注术语上下文 Then 为每个术语提取前后各 20 字的上下文 And 高亮显示术语位置 And 按术语分组显示所有实例 And 支持点击跳转到原文位置 And 支持用户根据上下文调整翻译
技术任务:
terminology/context_annotator.py 模块估算: 5 故事点
As a 系统, I want 在翻译前将术语标注应用到文本, So that AI 翻译模型能识别并保留术语翻译。
验收标准:
Given 术语表已定义
When 系统准备翻译文本
Then 在术语前后插入特殊标记 (如 <TERM>原文</TERM><TRANS>翻译</TRANS>)
And 长术语优先匹配 (避免"魔法"覆盖"魔法师")
And 生成标注后文本预览
And 标记数量统计显示
And 翻译后提取术语翻译并移除标记
技术任务:
terminology/term_tagger.py 模块估算: 5 故事点
Epic 4 总结: 6 个故事,共 30 故事点
Epic 目标: 使用 GPU 加速的 AI 翻译引擎,支持批量处理、术语注入、断点续译和质量检查。
覆盖的需求: FR18 (AI 翻译集成), FR19 (GPU 加速), FR20 (批量处理), FR21 (术语注入), FR22 (断点续译), FR23 (质量检查)
As a 系统, I want 集成 CTranslate2 和 m2m100 模型, So that 可以执行高质量的中文到英文翻译。
验收标准:
Given 系统已安装 CTranslate2 When 用户选择待翻译文本 Then 加载 facebook/m2m100_418M 模型 And 执行中文→英文翻译 And 支持自定义翻译参数 (beam_size, repetition_penalty) And 返回翻译结果和置信度分数 And 记录翻译耗时
技术任务:
translation/ctranslate_engine.py 模块CTranslateEngine 类估算: 6 故事点
As a 系统, I want 自动检测并使用 GPU 加速翻译, So that 大幅提升翻译速度。
验收标准:
Given 系统启动 When 检测可用硬件 Then 使用 cuda_detect_library 检测 NVIDIA GPU And 检测 GPU 显存大小 (推荐 >= 6GB) And 自动配置 CTranslate2 使用 CUDA 设备 And 如果 GPU 不可用,回退到 CPU 并警告用户 And 显示当前使用的设备信息
技术任务:
translation/device_detector.py 模块估算: 5 故事点
As a 用户, I want 批量翻译多个章节, So that 可以高效处理整本小说。
验收标准:
Given 用户已加载小说并选择待翻译章节 When 用户开始批量翻译 Then 按章节顺序执行翻译 And 每翻译完一个章节保存中间结果 And 显示实时进度 (当前章节/总章节) And 显示预估剩余时间 And 支持暂停/恢复翻译 And 翻译失败时记录错误并继续下一章节
技术任务:
translation/batch_translator.py 模块估算: 7 故事点
As a 系统, I want 在翻译前注入术语翻译提示, So that 确保术语翻译一致性。
验收标准:
Given 术语表已定义 When 系统翻译包含术语的文本 Then 在翻译提示中加入术语对照表 And 使用 few-shot 提示示例引导模型 And 翻译后验证术语是否按指定翻译 And 记录术语应用统计 (成功/失败) And 失败时在报告中标注
技术任务:
translation/term_injector.py 模块估算: 5 故事点
As a 用户, I want 从中断位置继续翻译, So that 意外中断后无需重新翻译已完成内容。
验收标准:
Given 批量翻译任务执行中 When 任务被中断 (程序关闭/崩溃) Then 系统保存已翻译章节索引 And 保存翻译任务状态到磁盘 When 用户重新启动并选择继续翻译 Then 系统检查已翻译章节 And 从第一个未翻译章节开始 And 显示续译提示"从第 X 章继续"
技术任务:
translation/checkpoint.py 模块估算: 6 故事点
As a 系统, I want 自动检查翻译质量, So that 发现潜在问题并提示用户审核。
验收标准:
Given 翻译完成 When 系统执行质量检查 Then 检测漏译 (原文行数≠译文行数) And 检测未翻译术语 (术语未按指定翻译) And 检测异常长度 (译文长度异常短/长) And 检测重复内容 (连续重复句子) And 生成质量报告并标注问题位置 And 显示质量分数 (0-100)
技术任务:
translation/quality_checker.py 模块估算: 6 故事点
As a 系统, I want 批量翻译失败时降级为单条翻译, So that 提高翻译成功率。
验收标准:
Given 系统正在执行批量翻译 (batch_size > 1) When 批量翻译失败 (GPU OOM/超时) Then 自动切换为 batch_size=1 重试 And 记录降级事件到日志 And 显示降级提示给用户 And 单条翻译完成后继续处理下一批 And 统计批量/单条翻译成功率
技术任务:
translation/batch_translator.py 中实现降级逻辑估算: 4 故事点
As a 用户, I want 系统记录翻译失败的章节, So that 可以批量重试。
验收标准:
Given 翻译过程中出现失败 When 章节翻译失败 Then 失败信息写入 translate_failed.jsonl And 每行一条记录,包含:章节号、原文、错误类型、失败时间、重试次数 And 使用 JSONL 格式 (每行独立 JSON) And 支持导出失败清单 And 支持从失败清单批量重试
技术任务:
translation/failed_recorder.py 模块估算: 3 故事点
Epic 5 总结: 8 个故事,共 42 故事点
Epic 目标: 将翻译后的内容上传到目标平台 (RoyalRoad),支持章节分割、格式转换和错误重试。
覆盖的需求: FR24 (平台格式转换), FR25 (章节分割), FR26 (API 上传), FR27 (上传状态), FR28 (断点续传), FR29 (上传历史)
As a 系统, I want 将翻译内容转换为 RoyalRoad 格式, So that 可以正确显示在目标平台。
验收标准:
Given 翻译后的文本内容
When 系统执行格式转换
Then 转换为 HTML 格式
And 段落使用 <p> 标签包裹
And 对话使用 <p> 标签保留引号
And 章节标题使用 <h2> 或 <h3> 标签
And 保留斜体 <i> 和粗体 <b> 标记
And 生成格式预览
技术任务:
upload/formatter.py 模块估算: 4 故事点
As a 系统, I want 按章节标题分割长文, So that 每个章节可以作为独立作品发布。
验收标准:
Given 翻译后的完整文本 When 系统执行章节分割 Then 识别章节标题 (如"Chapter 1", "第一章") And 按标题分割文本为多个章节 And 每个章节包含标题和正文 And 生成分割预览 (章节列表和字数) And 支持手动调整分割点 And 支持合并连续章节
技术任务:
upload/splitter.py 模块估算: 5 故事点
As a 用户, I want 通过 API 直接上传到 RoyalRoad, So that 无需手动复制粘贴内容。
验收标准:
Given 用户已配置 RoyalRoad API 凭证 When 用户执行上传操作 Then 系统使用 RoyalRoad Fiction API 上传内容 And 设置作品标题、描述、标签 And 逐章节发布内容 And 支持设置为草稿或直接发布 And 显示上传进度 (当前章节/总章节) And 处理 API 错误并提示用户
技术任务:
upload/royalroad_api.py 模块估算: 7 故事点
As a 用户, I want 实时查看上传状态, So that 了解上传进度和问题。
验收标准:
Given 上传任务执行中 When 用户查看上传状态 Then 显示当前上传章节序号 And 显示已完成/失败/待上传章节列表 And 显示上传速度和预估剩余时间 And 失败时显示具体错误信息 And 支持点击失败章节查看详情
技术任务:
upload/status_tracker.py 模块UploadStatus 数据类估算: 4 故事点
As a 用户, I want 从失败位置继续上传, So that 网络中断后无需重新上传已完成内容。
验收标准:
Given 上传任务执行中 When 上传被中断 (网络断开/程序关闭) Then 系统保存已上传章节列表 And 保存上传任务状态 When 用户选择继续上传 Then 系统跳过已上传章节 And 从第一个未上传章节开始 And 显示续传提示"从第 X 章继续上传"
技术任务:
upload/upload_checkpoint.py 模块估算: 5 故事点
As a 用户, I want 查看和管理上传历史, So that 可以追踪已发布内容。
验收标准:
Given 用户已完成多次上传 When 用户查看上传历史 Then 显示所有上传任务列表 And 每条记录包含:时间、目标平台、章节数、状态 And 支持按状态筛选 (成功/失败/部分) And 支持查看任务详情 And 支持重新上传失败的任务 And 支持删除历史记录
技术任务:
upload/history_manager.py 模块UploadHistory 数据模型估算: 4 故事点
As a 平台, I want 上传前计算并扣除章节 CU 费用, So that 按量计费。
验收标准:
Given 用户准备上传翻译内容 When 计算章节 CU 费用 Then CU = 章节字数 ÷ 100 (向上取整) And 上传前调用扣费 API And 扣费成功后继续上传流程 And 扣费失败时提示用户并阻止上传 And 记录扣费历史
技术任务:
upload/cu_calculator.py 模块估算: 4 故事点
As a 平台, I want 翻译内容添加标识并声明版权, So that 符合合规要求。
验收标准:
Given 翻译内容准备上传 When 添加合规标识 Then 在章节末尾添加 "Translated by 序灵 Matrix 助手" 标识 And 标识格式统一 (HTML 或纯文本) And 首次上传时显示版权声明弹窗 And 用户确认后继续上传 And 记录版权声明确认状态
技术任务:
upload/compliance_handler.py 模块估算: 3 故事点
Epic 6 总结: 8 个故事,共 36 故事点
Epic 目标: 用户可以暂停、恢复、取消翻译任务,并查看任务执行历史。
覆盖的需求: FR30-FR35, AR20 (任务历史记录)
As a 系统, I want 管理翻译任务队列, So that 可以控制任务执行顺序和状态。
验收标准:
Given 系统已初始化 When 添加新任务到队列 Then 任务获得唯一 ID 并进入 PENDING 状态 And 队列按优先级排序 (高/中/低) And 同优先级任务按添加时间排序 When 执行器从队列获取任务 Then 任务状态变为 RUNNING And 其他任务等待当前任务完成 And 支持查询队列状态 (等待/运行/完成)
技术任务:
scheduler/task_queue.py 模块Task 数据类和 Priority 枚举TaskQueue 类估算: 5 故事点
As a 用户, I want 设置任务优先级, So that 重要任务优先执行。
验收标准:
Given 任务队列中有多个待执行任务 When 用户调整任务优先级 Then 支持将任务设为高/中/低优先级 And 高优先级任务插队到队列前部 And 显示调整后的队列顺序 And 保存优先级到任务配置
技术任务:
scheduler/priority_scheduler.py 模块估算: 4 故事点
As a 系统, I want 并行执行多个翻译任务, So that 充分利用多核 CPU 和 GPU。
验收标准:
Given 有多个独立翻译任务 When 系统执行并行调度 Then 根据配置的并发数 (默认 2) 启动任务 And 每个任务在独立线程中执行 And GPU 任务串行化 (避免显存冲突) And 非 GPU 任务可并行 (如清洗、格式转换) And 显示各任务的执行状态
技术任务:
scheduler/parallel_executor.py 模块估算: 6 故事点
As a 用户, I want 暂停和恢复正在执行的任务, So that 可以灵活控制任务执行时机。
验收标准:
Given 任务正在执行中 When 用户点击暂停按钮 Then 当前任务在下一个检查点暂停 And 任务状态变为 PAUSED And 保存任务执行进度 When 用户点击恢复按钮 Then 任务从暂停点继续执行 And 任务状态变回 RUNNING And 显示恢复进度
技术任务:
scheduler/pause_controller.py 模块估算: 5 故事点
As a 用户, I want 取消不需要的任务, So that 释放资源并避免浪费时间。
验收标准:
Given 任务在队列中或执行中 When 用户取消任务 Then 等待中任务直接从队列移除 And 执行中任务在下一个检查点停止 And 任务状态变为 CANCELLED And 释放已占用资源 And 记录取消原因和时间
技术任务:
scheduler/cancel_controller.py 模块估算: 4 故事点
As a 用户, I want 查看任务执行历史, So that 追踪已完成任务的状态和结果。
验收标准:
Given 系统已完成多个任务 When 用户查看任务历史 Then 显示所有已完成任务列表 And 每条记录包含:任务 ID、开始时间、结束时间、状态、结果摘要 And 支持按日期范围筛选 And 支持按状态筛选 (成功/失败/取消) And 支持查看任务详情和日志 And 支持重新执行历史任务
技术任务:
scheduler/task_history.py 模块TaskRecord 数据模型估算: 5 故事点
As a 用户, I want 设置定时自动翻译, So that 在指定时间自动执行任务。
验收标准:
Given 用户打开定时任务设置 When 用户创建定时任务 Then 支持设置执行时间 (如每日 22:00) And 支持设置重复规则 (每日/每周/自定义) And 支持选择要执行的任务 And 到达设定时间后自动执行 And 任务执行完成后发送通知 And 支持启用/禁用定时任务
技术任务:
scheduler/timed_task.py 模块估算: 6 故事点
Epic 7a 总结: 7 个故事,共 34 故事点
Epic 目标: 用户通过图形界面轻松操作翻译工具,包括文件导入、进度查看、配置管理和结果预览。
覆盖的需求: FR36-FR52, AR21, AR22
As a 用户, I want 看到应用程序主窗口, So that 可以开始使用翻译工具。
验收标准:
Given 应用程序启动 When 主窗口加载 Then 显示应用标题 "BMAD Novel Translator" And 包含菜单栏 (文件、编辑、视图、帮助) And 包含工具栏 (常用操作按钮) And 包含主工作区 (文件列表/任务队列) And 包含状态栏 (当前状态/版本信息) And 窗口尺寸可调整 (默认 1200x800)
技术任务:
ui/main_window.py 模块MainWindow 类继承 QMainWindow估算: 5 故事点
As a 用户, I want 选择待翻译的文件, So that 添加文件到处理队列。
验收标准:
Given 主窗口已打开 When 用户点击"添加文件"按钮 Then 打开文件选择对话框 And 支持选择 .txt, .md, .html 文件 And 支持多选 (Ctrl+点击) And 支持文件夹导入 And 选中的文件显示在文件列表 And 显示文件名、大小、状态
技术任务:
ui/file_selector.py 模块估算: 4 故事点
As a 用户, I want 实时查看任务执行进度, So that 了解任务完成情况。
验收标准:
Given 任务正在执行 When 用户查看进度显示 Then 显示当前任务名称和状态 And 显示进度条 (0-100%) And 显示当前阶段 (如"正在翻译 第 5/10 章") And 显示已用时间和预估剩余时间 And 支持最小化到系统托盘 And 任务完成时显示通知
技术任务:
ui/progress_widget.py 模块估算: 5 故事点
As a 用户, I want 管理应用程序配置, So that 自定义翻译行为。
验收标准:
Given 用户打开设置对话框 When 用户查看配置选项 Then 显示分类配置项:
技术任务:
ui/settings_dialog.py 模块config/config_manager.py 模块估算: 6 故事点
As a 用户, I want 切换界面主题, So that 选择舒适的视觉风格。
验收标准:
Given 应用程序运行中 When 用户切换主题 Then 支持浅色主题 (默认) And 支持深色主题 And 支持系统主题 (跟随系统) And 主题切换立即生效 And 主题选择保存到配置
技术任务:
ui/theme_manager.py 模块估算: 4 故事点
As a 用户, I want 切换界面语言, So that 使用熟悉的语言操作软件。
验收标准:
Given 应用程序已启动 When 用户切换语言 Then 支持中文 (简体) And 支持英文 And 所有界面元素文字相应切换 And 语言切换立即生效 And 语言选择保存到配置
技术任务:
ui/i18n.py 国际化模块估算: 5 故事点
As a 用户, I want 使用快捷键操作软件, So that 提高操作效率。
验收标准:
Given 应用程序运行中 When 用户使用快捷键 Then 支持常用快捷键:
技术任务:
ui/shortcut_manager.py 模块估算: 4 故事点
As a 用户, I want 直接拖拽文件到窗口, So that 快速添加待翻译文件。
验收标准:
Given 主窗口已打开 When 用户拖拽文件到窗口 Then 窗口高亮显示拖拽区域 And 释放鼠标后文件添加到队列 And 支持拖拽多个文件 And 支持拖拽文件夹 And 不支持的文件格式显示错误提示
技术任务:
ui/drop_zone.py 模块估算: 4 故事点
As a 用户, I want 查看应用程序日志, So that 诊断问题和了解执行详情。
验收标准:
Given 应用程序运行中 When 用户打开日志查看器 Then 显示按时间排序的日志列表 And 支持日志级别过滤 (DEBUG/INFO/WARNING/ERROR) And 支持关键词搜索 And 支持导出日志到文件 And 错误日志高亮显示 And 自动滚动到最新日志
技术任务:
ui/log_viewer.py 模块估算: 5 故事点
As a 系统, I want 显示用户友好的错误提示, So that 用户理解问题并知道如何处理。
验收标准:
Given 应用程序运行中 When 发生错误 Then 显示错误对话框 And 包含错误类型和描述 And 包含建议的解决方案 And 提供"查看详情"按钮显示完整错误信息 And 提供"复制错误信息"按钮 And 支持"不再提示此错误"选项
技术任务:
ui/error_dialog.py 模块估算: 4 故事点
As a 用户, I want 导出翻译报告, So that 分享或存档翻译结果。
验收标准:
Given 翻译任务已完成 When 用户选择导出报告 Then 支持导出为 HTML 格式 (包含样式) And 支持导出为 PDF 格式 And 报告包含:任务摘要、翻译统计、质量分析、术语使用 And 支持自定义报告内容和样式 And 导出进度显示
技术任务:
ui/report_exporter.py 模块估算: 6 故事点
As a 用户, I want 预览翻译前后内容, So that 验证翻译效果。
验收标准:
Given 翻译已完成或进行中 When 用户打开预览窗口 Then 左侧显示原文 And 右侧显示译文 And 支持同步滚动 (一侧滚动时另一侧跟随) And 高亮显示差异位置 And 支持全屏预览 And 支持在预览中直接编辑译文
技术任务:
ui/preview_widget.py 模块估算: 6 故事点
As a 用户, I want 可视化编辑术语表, So that 方便管理术语翻译。
验收标准:
Given 用户打开术语表编辑器 When 用户查看术语表 Then 显示术语表格 (原文、翻译、类型、备注) And 支持添加新术语 (弹出对话框输入) And 支持编辑现有术语 (双击编辑) And 支持删除术语 And 支持搜索和筛选术语 And 支持导入/导出术语表
技术任务:
ui/terminology_editor.py 模块估算: 5 故事点
As a 用户, I want 一键执行完整翻译流程, So that 简化操作步骤。
验收标准:
Given 用户已选择文件并配置好参数 When 用户点击"一键翻译"按钮 Then 自动执行完整流程:清洗 → 术语提取 → 翻译 → 格式化 And 每个步骤显示进度 And 步骤失败时暂停并提示用户 And 完成后显示结果摘要 And 提供打开输出文件夹按钮
技术任务:
core/one_click_workflow.py 模块估算: 5 故事点
As a 用户, I want 对多个文件执行批量操作, So that 高效处理多个文件。
验收标准:
Given 文件列表中有多个文件 When 用户选择批量操作 Then 支持全选/反选文件 And 支持批量开始翻译 And 支持批量暂停 And 支持批量删除 And 支持批量导出 And 显示批量操作进度
技术任务:
ui/batch_operations.py 模块估算: 5 故事点
As a 用户, I want 查看翻译统计数据, So that 了解工作量和效率。
验收标准:
Given 用户打开统计面板 When 用户查看统计数据 Then 显示以下统计:
技术任务:
ui/statistics_panel.py 模块估算: 6 故事点
As a 用户, I want 导入 TXT 后看到预览信息, So that 确认导入正确。
验收标准:
Given 用户选择并导入 TXT 文件 When 文件解析完成 Then 显示预览界面包含:
技术任务:
ui/import_preview.py 模块估算: 4 故事点
As a 用户, I want 网络断开时继续翻译, So that 不受网络状态影响。
验收标准:
Given 用户正在使用翻译工具 When 检测到网络断开 Then 显示离线模式提示 And 继续执行本地翻译任务 And 上传任务保存到本地队列 When 检测到网络恢复 Then 自动执行队列中的上传任务 And 显示"网络已恢复,正在上传..."提示 And 支持手动触发队列上传
技术任务:
network/status_monitor.py 模块upload/offline_queue.py 离线队列模块估算: 8 故事点
Epic 7b 总结: 19 个故事,共 93 故事点
| Epic | 故事数 | 故事点 | 核心价值 |
|---|---|---|---|
| Epic 1: 基础架构与 Crash-Safe | 5 | 28 | 系统可靠性基础 |
| Epic 2: 指纹机制模块 | 7 | 27 | 避免重复处理 |
| Epic 3: 清洗模块 | 5 | 25 | 翻译输入质量 |
| Epic 4: 术语提取模块 | 6 | 30 | 翻译一致性 |
| Epic 5: 翻译模块 | 8 | 42 | 核心翻译能力 |
| Epic 6: 上传模块 | 8 | 36 | 平台发布自动化 |
| Epic 7a: 任务调度核心 | 7 | 34 | 任务状态管理 |
| Epic 7b: 用户界面完整版 | 19 | 93 | 完整用户体验 |
| 总计 | 65 | 315 | 完整产品 |