epics.md 57 KB


stepsCompleted: [1, 2, 3] inputDocuments: ['prd.md', 'architecture.md'] workflowType: 'epics-and-stories' project_name: '223-236-template-6' user_name: 'User'

date: '2026-03-13'

223-236-template-6 - Epic Breakdown

Overview

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.

Requirements Inventory

Functional Requirements

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 扣费)

Non-Functional Requirements

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 毫秒(无卡顿感知)

Additional Requirements

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 Design Requirements

不适用 - 未提供 UX 设计文档

FR Coverage Map

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 List


Epic 1: 基础架构与 Crash-Safe 机制

Epic 目标: 用户在系统意外关闭或断电后,能够从断点继续翻译,无需重新开始。

覆盖的需求: AR5 (Crash-Safe 原子写), AR6 (Pipeline 模式), AR7 (State Machine), AR8 (Repository 模式)

Story 1.1: 实现 Pipeline 编排框架

As a 系统开发者, I want 建立六阶段 Pipeline 编排框架, So that 可以将文件处理流程模块化并支持灵活组合。

验收标准:

Given 系统已初始化 When 创建 Pipeline 对象并添加多个阶段处理器 Then Pipeline 按顺序执行所有阶段并将每个阶段的输出传递给下一阶段 And 任一阶段抛出异常时,Pipeline 捕获异常并停止执行 And 支持 get_stage_result(stage_name) 获取指定阶段的输出 And 支持 reset() 方法重置 Pipeline 状态

技术任务:

  1. 创建 pipeline/pipeline.py 核心类
  2. 实现 Stage 抽象基类和 PipelineExecutor
  3. 实现阶段结果缓存机制
  4. 编写单元测试验证顺序执行和异常处理

估算: 5 故事点


Story 1.2: 实现 State Machine 任务状态管理

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 订阅

技术任务:

  1. 创建 state_machine/task_state.py 状态枚举
  2. 实现 TaskStateMachine 类和状态转换规则
  3. 实现状态历史记录功能
  4. 实现 Observer 模式支持状态变更通知
  5. 编写单元测试验证所有状态转换路径

估算: 8 故事点


Story 1.3: 实现 Repository 数据持久化抽象

As a 系统, I want 使用 Repository 模式抽象数据持久化, So that 可以灵活切换存储后端 (本地文件/数据库) 并统一数据访问接口。

验收标准:

Given Repository 抽象基类已定义 When 创建 FileTaskRepository 实现 Then 支持保存任务数据到 JSON 文件 And 支持按 work_id 查询任务 And 支持更新任务状态和进度 And 支持获取所有未完成任务列表 And 所有操作返回统一的 Result 对象 (包含 data/error)

技术任务:

  1. 创建 repository/base.py 抽象基类
  2. 创建 repository/file_task_repository.py 实现
  3. 定义数据模型类 (Task, Chapter, Term 等)
  4. 实现 CRUD 操作和查询方法
  5. 编写单元测试验证 Repository 操作

估算: 6 故事点


Story 1.4: 实现 Crash-Safe 原子写入机制

As a 系统, I want 使用原子写入机制保存关键数据, So that 即使断电或崩溃也不会损坏数据文件。

验收标准:

Given 需要保存任务数据到文件 When 调用 atomic_write() 方法保存数据 Then 数据首先写入临时文件 (.tmp 后缀) And 使用 fsync() 确保数据刷新到磁盘 And 原子操作重命名临时文件为目标文件 And 如果写入失败,目标文件保持不变 And 系统启动时检测并清理残留的临时文件

技术任务:

  1. 创建 utils/atomic_write.py 工具模块
  2. 实现临时文件写入逻辑
  3. 实现文件系统同步 (fsync) 调用
  4. 实现原子重命名操作 (os.replace)
  5. 实现启动时临时文件清理
  6. 编写集成测试验证断电场景

估算: 5 故事点


Story 1.5: 实现 Observer 模式进度通知

As a GUI, I want 通过 Observer 模式订阅任务进度事件, So that 可以实时更新用户界面显示翻译进度。

验收标准:

Given 系统正在执行翻译任务 When 任务状态或进度发生变化 Then 所有订阅的 Observer 接收到进度更新通知 And 通知包含当前阶段、当前章节、总章节数、进度百分比 And 支持订阅者注册和取消订阅 And 支持按事件类型过滤通知 (STATE_CHANGE, PROGRESS_UPDATE, ERROR)

技术任务:

  1. 创建 observer/event.py 事件数据类
  2. 创建 observer/publisher.py 发布者基类
  3. 实现订阅者注册/取消注册逻辑
  4. 实现事件分发机制
  5. 编写单元测试验证通知传递

估算: 4 故事点


Epic 1 总结: 5 个故事,共 28 故事点


Epic 2: 指纹机制模块

Epic 目标: 用户导入已处理过的文件时,系统自动识别并复用结果,避免重复翻译。

覆盖的需求: FR1 (文件指纹计算), FR2 (分块哈希), FR3 (指纹缓存), FR4 (重复检测), FR5 (缓存失效), FR6 (指纹导出)

Story 2.1: 实现文件内容哈希计算

As a 系统, I want 计算文件的 SHA-256 内容哈希值, So that 可以唯一标识文件内容并检测重复。

验收标准:

Given 用户选择了一个文本文件 When 系统计算文件哈希值 Then 使用 SHA-256 算法计算完整文件内容的哈希 And 只读取文件内容,忽略元数据 (文件名、修改时间) And 返回 64 位十六进制哈希字符串 And 大文件 (>100MB) 支持进度回调

技术任务:

  1. 创建 fingerprint/hasher.py 模块
  2. 实现 calculate_file_hash(file_path, algorithm='sha-256') 函数
  3. 实现大文件流式读取和进度回调
  4. 编写单元测试验证哈希计算正确性

估算: 3 故事点


Story 2.2: 实现分块增量哈希

As a 系统, I want 支持按固定大小的块计算文件哈希, So that 大文件可以分块处理并支持增量验证。

验收标准:

Given 大文件需要分块处理 When 系统计算分块哈希 Then 按 4MB 块大小分割文件 And 为每个块计算独立哈希值 And 返回块哈希列表和组合哈希 (Merkle Tree 根哈希) And 支持配置块大小

技术任务:

  1. fingerprint/hasher.py 中实现分块读取逻辑
  2. 实现 calculate_chunked_hash(file_path, chunk_size=4*1024*1024)
  3. 实现 Merkle Tree 根哈希计算
  4. 编写单元测试验证分块哈希

估算: 5 故事点


Story 2.3: 实现指纹缓存存储

As a 系统, I want 将文件指纹缓存到本地数据库, So that 已处理文件可以快速复用无需重新计算。

验收标准:

Given 文件哈希计算完成 When 系统保存指纹到缓存 Then 存储文件哈希、文件路径、文件大小、计算时间戳 And 缓存文件位于 ~/.cache/bmad_translator/fingerprints/ And 使用 SQLite 存储缓存索引 And 支持按哈希值快速查询缓存

技术任务:

  1. 创建 fingerprint/cache.py 缓存模块
  2. 定义 FingerprintCache 数据模型
  3. 实现 SQLite 缓存存储和查询
  4. 实现缓存目录管理
  5. 编写单元测试验证缓存操作

估算: 5 故事点


Story 2.4: 实现重复文件检测

As a 用户, I want 系统自动检测重复文件, So that 避免重复翻译相同内容。

验收标准:

Given 用户添加了新文件 When 系统检测到文件哈希已存在缓存 Then 提示用户"此文件已处理过,是否复用上次结果?" And 显示上次处理时间和处理结果 And 用户选择复用时直接加载缓存结果 And 用户选择重新处理时重新执行完整流程

技术任务:

  1. 实现 fingerprint/detector.py 重复检测模块
  2. 实现 is_duplicate(file_hash) 查询方法
  3. 实现重复结果复用逻辑
  4. 集成到文件添加流程
  5. 编写单元测试验证检测逻辑

估算: 4 故事点


Story 2.5: 实现缓存失效机制

As a 系统, I want 在源文件内容变化时使缓存失效, So that 确保处理结果始终反映最新文件内容。

验收标准:

Given 文件已建立指纹缓存 When 用户修改了源文件内容 Then 文件哈希值发生变化 And 系统检测到哈希不匹配 And 标记旧缓存为无效 And 重新计算新哈希并创建新缓存条目 And 定期清理超过 30 天的无效缓存

技术任务:

  1. 实现 fingerprint/invalidator.py 模块
  2. 实现文件变化检测逻辑
  3. 实现缓存失效标记
  4. 实现定期清理任务 (使用 Python sched 模块)
  5. 编写单元测试验证失效逻辑

估算: 4 故事点


Story 2.6: 实现指纹导出功能

As a 用户, I want 导出文件指纹报告, So that 可以离线审核文件处理历史。

验收标准:

Given 用户已处理多个文件 When 用户选择导出指纹报告 Then 生成 CSV 格式报告包含:文件名、哈希值、文件大小、处理时间 And 支持选择日期范围导出 And 支持导出到指定路径 And 导出完成后显示文件位置

技术任务:

  1. 创建 fingerprint/exporter.py 模块
  2. 实现 export_fingerprints(output_path, date_range) 函数
  3. 实现日期范围过滤
  4. 实现格式化输出
  5. 编写单元测试验证导出格式

估算: 3 故事点



Story 2.7: 实现网络错误自动重试

As a 系统, I want 在网络错误时自动重试 API 调用, So that 可以提高指纹查重的可靠性。

验收标准:

Given 系统正在执行 API 调用 When 发生网络错误 (超时/连接失败/5xx错误) Then 系统等待 2 秒后自动重试 And 最多重试 3 次 And 重试成功后继续正常流程 And 3 次重试均失败后记录错误并提示用户 And 记录重试次数到日志

技术任务:

  1. 创建 fingerprint/retry_handler.py 模块
  2. 实现指数退避重试逻辑 (2秒间隔)
  3. 定义可重试错误类型
  4. 实现重试计数和日志记录
  5. 编写单元测试验证重试机制

估算: 3 故事点


Epic 2 总结: 7 个故事,共 27 故事点


Epic 3: 清洗模块

Epic 目标: 清洗和规范化小说内容,去除无关元素、修复格式问题、统一标点符号,为翻译提供干净的输入文本。

覆盖的需求: FR7 (移除无关内容), FR9 (段落格式修复), FR10 (标点统一), FR11 (硬/软回车处理)

Story 3.1: 实现无关内容过滤

As a 系统, I want 自动过滤小说中的广告、版权声明和章节标题无关内容, So that 翻译输入保持纯净的小说正文。

验收标准:

Given 小说文件包含广告、版权声明等内容 When 系统执行清洗过滤 Then 识别并删除包含"版权所有"、"转载请注明"等特征的行 And 删除纯 URL 行 And 删除重复出现的页眉/页脚 And 保留有效的章节标题 And 生成清洗日志报告删除的内容类型和数量

技术任务:

  1. 创建 cleaning/filter.py 模块
  2. 定义无关内容正则模式库
  3. 实现 remove_irrelevant_content(text) 函数
  4. 实现清洗日志记录
  5. 编写单元测试验证过滤规则

估算: 5 故事点


Story 3.2: 实现段落格式修复

As a 系统, I want 修复破损的段落结构, So that 翻译时能够正确识别段落边界。

验收标准:

Given 文本存在孤立的单词或短语行 When 系统检测段落格式 Then 识别被错误分割的段落 (如行尾无标点且非章节标题) And 将孤立行合并到前一段落 And 保持对话行独立 (包含引号的行) And 确保段落之间有空行分隔 And 生成格式修复报告

技术任务:

  1. 创建 cleaning/paragraph_fixer.py 模块
  2. 实现段落边界检测算法
  3. 实现段落合并逻辑
  4. 实现对话行识别规则
  5. 编写单元测试验证修复效果

估算: 6 故事点


Story 3.3: 实现标点符号统一

As a 系统, I want 将全角/半角标点符号统一转换为全角中文标点, So that 翻译质量更好且格式一致。

验收标准:

Given 文本混合使用全角和半角标点 When 系统执行标点统一 Then 将半角句号、逗号、问号、感叹号转换为全角 And 统一引号样式 (中文使用 "" 而非 "") And 统一省略号样式 (使用 …… 而非 ...) And 保留英文引号内的英文标点不变 And 生成标点修正统计

技术任务:

  1. 创建 cleaning/punctuation_normalizer.py 模块
  2. 定义标点映射表
  3. 实现上下文感知的标点转换 (处理中英混合)
  4. 实现统计报告
  5. 编写单元测试验证转换规则

估算: 4 故事点


Story 3.4: 实现硬/软回车处理

As a 系统, I want 识别并处理硬回车和软回车, So that 正确保留段落结构并去除行末连字符。

验收标准:

Given 文本包含软回车和硬回车 When 系统分析回车类型 Then 识别行末连字符 (如 "exam-\nple") 并合并为完整单词 And 识别连续的软回车 (单个换行符) 合并为段落 And 保留硬回车 (双换行符) 作为段落分隔 And 支持 Windows (\r\n) 和 Unix (\n) 换行符 And 生成回车处理报告

技术任务:

  1. 创建 cleaning/line_break_handler.py 模块
  2. 实现连字符检测和合并逻辑
  3. 实现回车类型识别算法
  4. 实现换行符标准化
  5. 编写单元测试验证处理逻辑

估算: 5 故事点


Story 3.5: 集成清洗流程并生成报告

As a 用户, I want 一键执行完整的清洗流程并查看清洗报告, So that 了解文本处理效果并验证清洗质量。

验收标准:

Given 用户已选择待清洗的文本文件 When 用户执行清洗操作 Then 按顺序执行:过滤无关内容 → 修复段落 → 统一标点 → 处理回车 And 显示实时进度条 And 完成后生成 HTML 格式清洗报告 And 报告包含:原文长度、清洗后长度、删除行数、修改统计、预览对比 And 支持导出清洗报告

技术任务:

  1. 创建 cleaning/pipeline.py 清洗流程编排
  2. 实现各清洗步骤的顺序执行
  3. 实现 CleaningReport 数据类
  4. 实现 HTML 报告生成模板
  5. 编写集成测试验证完整流程

估算: 5 故事点


Epic 3 总结: 5 个故事,共 25 故事点


Epic 4: 术语提取模块

Epic 目标: 翻译过程中角色名和专有术语保持一致,符合用户设定。

覆盖的需求: FR12 (术语识别), FR13 (术语表管理), FR14 (术语标注), FR15 (冲突检测), FR16 (术语导入导出), FR17 (上下文感知)

Story 4.1: 实现基础术语识别算法

As a 系统, I want 自动识别文本中的专有术语和角色名, So that 构建初始术语表供用户审核。

验收标准:

Given 小说文本已加载 When 系统执行术语识别 Then 使用词性标注识别人名 (nr)、地名 (ns)、机构名 (nt) And 识别高频连续大写/中文组合 (2-4 字) And 识别数字+单位组合 (如"三阶法师") And 过滤停用词表 (如"今天"、"有人") And 按频率排序生成候选术语列表

技术任务:

  1. 创建 terminology/extractor.py 模块
  2. 集成 jieba 分词进行词性标注
  3. 实现术语识别规则引擎
  4. 实现停用词过滤
  5. 编写单元测试验证识别准确性

估算: 6 故事点


Story 4.2: 实现术语表 CRUD 管理

As a 用户, I want 管理术语表 (增删改查), So that 可以自定义术语并控制翻译行为。

验收标准:

Given 术语表已初始化 When 用户添加新术语 Then 支持输入术语原文、目标翻译、术语类型、备注 And 验证术语格式 (不能为空,不能含特殊字符) And 检测重复术语并提示用户 When 用户编辑术语 Then 支持修改所有字段 And 记录修改历史 When 用户删除术语 Then 术语从表中移除 And 翻译时不再使用该术语

技术任务:

  1. 创建 terminology/terminology_manager.py 模块
  2. 定义 Term 数据类
  3. 实现 CRUD 操作方法
  4. 实现修改历史记录
  5. 编写单元测试验证 CRUD 逻辑

估算: 5 故事点


Story 4.3: 实现术语冲突检测

As a 用户, I want 系统检测术语表中的冲突, So that 避免翻译时出现不一致。

验收标准:

Given 术语表包含多个术语 When 用户添加或修改术语 Then 检测以下冲突类型:

  • 同一原文有多个翻译
  • 不同原文翻译相同 (可能导致混淆)
  • 术语是另一个术语的子串 (如"魔法"和"魔法师") And 高亮显示冲突术语 And 提供冲突解决建议 And 用户确认后才允许保存冲突术语

技术任务:

  1. 创建 terminology/conflict_detector.py 模块
  2. 实现冲突检测规则引擎
  3. 实现冲突建议生成
  4. 集成到术语保存流程
  5. 编写单元测试验证检测规则

估算: 5 故事点


Story 4.4: 实现术语表导入导出

As a 用户, I want 导入和导出术语表, So that 可以在不同项目间复用术语表。

验收标准:

Given 用户有现成的术语表文件 When 用户导入术语表 Then 支持 CSV 格式 (原文,翻译,类型,备注) And 支持 JSON 格式 And 导入时验证数据格式 And 检测并报告导入冲突 And 显示导入结果摘要 When 用户导出术语表 Then 支持导出为 CSV 和 JSON And 包含所有术语字段 And 支持选择性导出 (按类型筛选)

技术任务:

  1. 创建 terminology/io.py 模块
  2. 实现 CSV 解析和生成
  3. 实现 JSON 序列化和反序列化
  4. 实现导入验证逻辑
  5. 编写单元测试验证导入导出

估算: 4 故事点


Story 4.5: 实现术语上下文标注

As a 系统, I want 在文本中标注术语出现的上下文, So that 用户可以根据上下文确定合适的翻译。

验收标准:

Given 文本包含多个术语实例 When 系统标注术语上下文 Then 为每个术语提取前后各 20 字的上下文 And 高亮显示术语位置 And 按术语分组显示所有实例 And 支持点击跳转到原文位置 And 支持用户根据上下文调整翻译

技术任务:

  1. 创建 terminology/context_annotator.py 模块
  2. 实现上下文窗口提取
  3. 实现术语实例索引
  4. 实现位置映射 (原文位置→清洗后位置)
  5. 编写单元测试验证标注准确性

估算: 5 故事点


Story 4.6: 实现术语翻译应用

As a 系统, I want 在翻译前将术语标注应用到文本, So that AI 翻译模型能识别并保留术语翻译。

验收标准:

Given 术语表已定义 When 系统准备翻译文本 Then 在术语前后插入特殊标记 (如 <TERM>原文</TERM><TRANS>翻译</TRANS>) And 长术语优先匹配 (避免"魔法"覆盖"魔法师") And 生成标注后文本预览 And 标记数量统计显示 And 翻译后提取术语翻译并移除标记

技术任务:

  1. 创建 terminology/term_tagger.py 模块
  2. 实现最长匹配算法
  3. 实现术语标记插入
  4. 实现翻译后术语提取
  5. 编写单元测试验证标记逻辑

估算: 5 故事点


Epic 4 总结: 6 个故事,共 30 故事点


Epic 5: 翻译模块

Epic 目标: 使用 GPU 加速的 AI 翻译引擎,支持批量处理、术语注入、断点续译和质量检查。

覆盖的需求: FR18 (AI 翻译集成), FR19 (GPU 加速), FR20 (批量处理), FR21 (术语注入), FR22 (断点续译), FR23 (质量检查)

Story 5.1: 集成 CTranslate2 翻译引擎

As a 系统, I want 集成 CTranslate2 和 m2m100 模型, So that 可以执行高质量的中文到英文翻译。

验收标准:

Given 系统已安装 CTranslate2 When 用户选择待翻译文本 Then 加载 facebook/m2m100_418M 模型 And 执行中文→英文翻译 And 支持自定义翻译参数 (beam_size, repetition_penalty) And 返回翻译结果和置信度分数 And 记录翻译耗时

技术任务:

  1. 创建 translation/ctranslate_engine.py 模块
  2. 实现 CTranslateEngine
  3. 实现模型加载和卸载
  4. 实现翻译参数配置
  5. 编写单元测试验证翻译功能

估算: 6 故事点


Story 5.2: 实现 GPU 自动检测和加速

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 显示当前使用的设备信息

技术任务:

  1. 创建 translation/device_detector.py 模块
  2. 实现 GPU 检测逻辑 (使用 pynvml 库)
  3. 实现显存大小检测
  4. 实现 CTranslate2 设备配置
  5. 编写单元测试验证检测逻辑

估算: 5 故事点


Story 5.3: 实现批量章节翻译

As a 用户, I want 批量翻译多个章节, So that 可以高效处理整本小说。

验收标准:

Given 用户已加载小说并选择待翻译章节 When 用户开始批量翻译 Then 按章节顺序执行翻译 And 每翻译完一个章节保存中间结果 And 显示实时进度 (当前章节/总章节) And 显示预估剩余时间 And 支持暂停/恢复翻译 And 翻译失败时记录错误并继续下一章节

技术任务:

  1. 创建 translation/batch_translator.py 模块
  2. 实现章节队列管理
  3. 实现批量翻译循环
  4. 实现中间结果保存
  5. 实现暂停/恢复控制
  6. 编写集成测试验证批量翻译

估算: 7 故事点


Story 5.4: 实现术语翻译注入

As a 系统, I want 在翻译前注入术语翻译提示, So that 确保术语翻译一致性。

验收标准:

Given 术语表已定义 When 系统翻译包含术语的文本 Then 在翻译提示中加入术语对照表 And 使用 few-shot 提示示例引导模型 And 翻译后验证术语是否按指定翻译 And 记录术语应用统计 (成功/失败) And 失败时在报告中标注

技术任务:

  1. 创建 translation/term_injector.py 模块
  2. 实现术语提示模板生成
  3. 实现术语翻译验证
  4. 实现统计记录
  5. 编写单元测试验证注入效果

估算: 5 故事点


Story 5.5: 实现断点续译机制

As a 用户, I want 从中断位置继续翻译, So that 意外中断后无需重新翻译已完成内容。

验收标准:

Given 批量翻译任务执行中 When 任务被中断 (程序关闭/崩溃) Then 系统保存已翻译章节索引 And 保存翻译任务状态到磁盘 When 用户重新启动并选择继续翻译 Then 系统检查已翻译章节 And 从第一个未翻译章节开始 And 显示续译提示"从第 X 章继续"

技术任务:

  1. 创建 translation/checkpoint.py 模块
  2. 实现检查点数据结构
  3. 实现检查点保存和加载
  4. 集成到批量翻译流程
  5. 编写集成测试验证续译功能

估算: 6 故事点


Story 5.6: 实现翻译质量检查

As a 系统, I want 自动检查翻译质量, So that 发现潜在问题并提示用户审核。

验收标准:

Given 翻译完成 When 系统执行质量检查 Then 检测漏译 (原文行数≠译文行数) And 检测未翻译术语 (术语未按指定翻译) And 检测异常长度 (译文长度异常短/长) And 检测重复内容 (连续重复句子) And 生成质量报告并标注问题位置 And 显示质量分数 (0-100)

技术任务:

  1. 创建 translation/quality_checker.py 模块
  2. 实现各项质量检查规则
  3. 实现质量分数计算
  4. 实现 HTML 质量报告生成
  5. 编写单元测试验证检查规则

估算: 6 故事点



Story 5.7: 实现 GPU 批量失败降级

As a 系统, I want 批量翻译失败时降级为单条翻译, So that 提高翻译成功率。

验收标准:

Given 系统正在执行批量翻译 (batch_size > 1) When 批量翻译失败 (GPU OOM/超时) Then 自动切换为 batch_size=1 重试 And 记录降级事件到日志 And 显示降级提示给用户 And 单条翻译完成后继续处理下一批 And 统计批量/单条翻译成功率

技术任务:

  1. translation/batch_translator.py 中实现降级逻辑
  2. 实现异常类型检测 (区分可恢复和不可恢复错误)
  3. 实现 batch_size 动态调整
  4. 实现降级统计记录
  5. 编写集成测试验证降级机制

估算: 4 故事点


Story 5.8: 实现失败清单记录

As a 用户, I want 系统记录翻译失败的章节, So that 可以批量重试。

验收标准:

Given 翻译过程中出现失败 When 章节翻译失败 Then 失败信息写入 translate_failed.jsonl And 每行一条记录,包含:章节号、原文、错误类型、失败时间、重试次数 And 使用 JSONL 格式 (每行独立 JSON) And 支持导出失败清单 And 支持从失败清单批量重试

技术任务:

  1. 创建 translation/failed_recorder.py 模块
  2. 定义失败记录数据结构
  3. 实现 JSONL 写入逻辑
  4. 实现批量重试接口
  5. 编写测试验证失败记录

估算: 3 故事点


Epic 5 总结: 8 个故事,共 42 故事点


Epic 6: 上传模块

Epic 目标: 将翻译后的内容上传到目标平台 (RoyalRoad),支持章节分割、格式转换和错误重试。

覆盖的需求: FR24 (平台格式转换), FR25 (章节分割), FR26 (API 上传), FR27 (上传状态), FR28 (断点续传), FR29 (上传历史)

Story 6.1: 实现 RoyalRoad 格式转换

As a 系统, I want 将翻译内容转换为 RoyalRoad 格式, So that 可以正确显示在目标平台。

验收标准:

Given 翻译后的文本内容 When 系统执行格式转换 Then 转换为 HTML 格式 And 段落使用 <p> 标签包裹 And 对话使用 <p> 标签保留引号 And 章节标题使用 <h2><h3> 标签 And 保留斜体 <i> 和粗体 <b> 标记 And 生成格式预览

技术任务:

  1. 创建 upload/formatter.py 模块
  2. 实现 Markdown 到 HTML 转换
  3. 实现 RoyalRoad 特定格式规则
  4. 实现格式预览生成
  5. 编写单元测试验证格式输出

估算: 4 故事点


Story 6.2: 实现智能章节分割

As a 系统, I want 按章节标题分割长文, So that 每个章节可以作为独立作品发布。

验收标准:

Given 翻译后的完整文本 When 系统执行章节分割 Then 识别章节标题 (如"Chapter 1", "第一章") And 按标题分割文本为多个章节 And 每个章节包含标题和正文 And 生成分割预览 (章节列表和字数) And 支持手动调整分割点 And 支持合并连续章节

技术任务:

  1. 创建 upload/splitter.py 模块
  2. 实现章节标题识别规则
  3. 实现文本分割算法
  4. 实现手动调整接口
  5. 编写单元测试验证分割准确性

估算: 5 故事点


Story 6.3: 集成 RoyalRoad API 上传

As a 用户, I want 通过 API 直接上传到 RoyalRoad, So that 无需手动复制粘贴内容。

验收标准:

Given 用户已配置 RoyalRoad API 凭证 When 用户执行上传操作 Then 系统使用 RoyalRoad Fiction API 上传内容 And 设置作品标题、描述、标签 And 逐章节发布内容 And 支持设置为草稿或直接发布 And 显示上传进度 (当前章节/总章节) And 处理 API 错误并提示用户

技术任务:

  1. 创建 upload/royalroad_api.py 模块
  2. 实现 RoyalRoad API 客户端
  3. 实现作品创建和章节发布
  4. 实现错误处理和重试逻辑
  5. 编写集成测试验证上传流程

估算: 7 故事点


Story 6.4: 实现上传状态跟踪

As a 用户, I want 实时查看上传状态, So that 了解上传进度和问题。

验收标准:

Given 上传任务执行中 When 用户查看上传状态 Then 显示当前上传章节序号 And 显示已完成/失败/待上传章节列表 And 显示上传速度和预估剩余时间 And 失败时显示具体错误信息 And 支持点击失败章节查看详情

技术任务:

  1. 创建 upload/status_tracker.py 模块
  2. 定义 UploadStatus 数据类
  3. 实现状态更新逻辑
  4. 实现速度和剩余时间计算
  5. 集成进度通知到 UI

估算: 4 故事点


Story 6.5: 实现断点续传机制

As a 用户, I want 从失败位置继续上传, So that 网络中断后无需重新上传已完成内容。

验收标准:

Given 上传任务执行中 When 上传被中断 (网络断开/程序关闭) Then 系统保存已上传章节列表 And 保存上传任务状态 When 用户选择继续上传 Then 系统跳过已上传章节 And 从第一个未上传章节开始 And 显示续传提示"从第 X 章继续上传"

技术任务:

  1. 创建 upload/upload_checkpoint.py 模块
  2. 实现上传检查点保存和加载
  3. 实现已上传章节查询 (通过 API)
  4. 集成到上传流程
  5. 编写集成测试验证续传功能

估算: 5 故事点


Story 6.6: 实现上传历史管理

As a 用户, I want 查看和管理上传历史, So that 可以追踪已发布内容。

验收标准:

Given 用户已完成多次上传 When 用户查看上传历史 Then 显示所有上传任务列表 And 每条记录包含:时间、目标平台、章节数、状态 And 支持按状态筛选 (成功/失败/部分) And 支持查看任务详情 And 支持重新上传失败的任务 And 支持删除历史记录

技术任务:

  1. 创建 upload/history_manager.py 模块
  2. 定义 UploadHistory 数据模型
  3. 实现历史记录存储 (SQLite)
  4. 实现查询和筛选接口
  5. 编写单元测试验证历史管理

估算: 4 故事点



Story 6.7: 实现 CU 费用计算

As a 平台, I want 上传前计算并扣除章节 CU 费用, So that 按量计费。

验收标准:

Given 用户准备上传翻译内容 When 计算章节 CU 费用 Then CU = 章节字数 ÷ 100 (向上取整) And 上传前调用扣费 API And 扣费成功后继续上传流程 And 扣费失败时提示用户并阻止上传 And 记录扣费历史

技术任务:

  1. 创建 upload/cu_calculator.py 模块
  2. 实现 CU 计算逻辑 (math.ceil)
  3. 集成扣费 API 调用
  4. 实现扣费失败处理
  5. 编写测试验证 CU 计算

估算: 4 故事点


Story 6.8: 实现内容合规处理

As a 平台, I want 翻译内容添加标识并声明版权, So that 符合合规要求。

验收标准:

Given 翻译内容准备上传 When 添加合规标识 Then 在章节末尾添加 "Translated by 序灵 Matrix 助手" 标识 And 标识格式统一 (HTML 或纯文本) And 首次上传时显示版权声明弹窗 And 用户确认后继续上传 And 记录版权声明确认状态

技术任务:

  1. 创建 upload/compliance_handler.py 模块
  2. 实现标识添加逻辑
  3. 创建版权声明对话框 UI
  4. 实现确认状态持久化
  5. 编写测试验证合规处理

估算: 3 故事点


Epic 6 总结: 8 个故事,共 36 故事点


Epic 7a: 任务调度核心

Epic 目标: 用户可以暂停、恢复、取消翻译任务,并查看任务执行历史。

覆盖的需求: FR30-FR35, AR20 (任务历史记录)

Story 7.1: 实现任务队列管理器

As a 系统, I want 管理翻译任务队列, So that 可以控制任务执行顺序和状态。

验收标准:

Given 系统已初始化 When 添加新任务到队列 Then 任务获得唯一 ID 并进入 PENDING 状态 And 队列按优先级排序 (高/中/低) And 同优先级任务按添加时间排序 When 执行器从队列获取任务 Then 任务状态变为 RUNNING And 其他任务等待当前任务完成 And 支持查询队列状态 (等待/运行/完成)

技术任务:

  1. 创建 scheduler/task_queue.py 模块
  2. 定义 Task 数据类和 Priority 枚举
  3. 实现 TaskQueue
  4. 实现优先级排序逻辑
  5. 编写单元测试验证队列行为

估算: 5 故事点


Story 7.2: 实现任务优先级调度

As a 用户, I want 设置任务优先级, So that 重要任务优先执行。

验收标准:

Given 任务队列中有多个待执行任务 When 用户调整任务优先级 Then 支持将任务设为高/中/低优先级 And 高优先级任务插队到队列前部 And 显示调整后的队列顺序 And 保存优先级到任务配置

技术任务:

  1. 创建 scheduler/priority_scheduler.py 模块
  2. 实现优先级比较逻辑
  3. 实现队列重排序
  4. 集成到任务管理接口
  5. 编写单元测试验证调度逻辑

估算: 4 故事点


Story 7.3: 实现并行任务执行

As a 系统, I want 并行执行多个翻译任务, So that 充分利用多核 CPU 和 GPU。

验收标准:

Given 有多个独立翻译任务 When 系统执行并行调度 Then 根据配置的并发数 (默认 2) 启动任务 And 每个任务在独立线程中执行 And GPU 任务串行化 (避免显存冲突) And 非 GPU 任务可并行 (如清洗、格式转换) And 显示各任务的执行状态

技术任务:

  1. 创建 scheduler/parallel_executor.py 模块
  2. 实现 ThreadPoolExecutor 包装
  3. 实现 GPU 任务锁
  4. 实现任务类型分类
  5. 编写集成测试验证并行执行

估算: 6 故事点


Story 7.4: 实现任务暂停和恢复

As a 用户, I want 暂停和恢复正在执行的任务, So that 可以灵活控制任务执行时机。

验收标准:

Given 任务正在执行中 When 用户点击暂停按钮 Then 当前任务在下一个检查点暂停 And 任务状态变为 PAUSED And 保存任务执行进度 When 用户点击恢复按钮 Then 任务从暂停点继续执行 And 任务状态变回 RUNNING And 显示恢复进度

技术任务:

  1. 创建 scheduler/pause_controller.py 模块
  2. 实现暂停信号机制
  3. 实现检查点检测
  4. 集成到任务执行循环
  5. 编写单元测试验证暂停恢复

估算: 5 故事点


Story 7.5: 实现任务取消功能

As a 用户, I want 取消不需要的任务, So that 释放资源并避免浪费时间。

验收标准:

Given 任务在队列中或执行中 When 用户取消任务 Then 等待中任务直接从队列移除 And 执行中任务在下一个检查点停止 And 任务状态变为 CANCELLED And 释放已占用资源 And 记录取消原因和时间

技术任务:

  1. 创建 scheduler/cancel_controller.py 模块
  2. 实现取消信号机制
  3. 实现资源清理逻辑
  4. 集成到任务管理
  5. 编写单元测试验证取消行为

估算: 4 故事点


Story 7.6: 实现任务历史记录

As a 用户, I want 查看任务执行历史, So that 追踪已完成任务的状态和结果。

验收标准:

Given 系统已完成多个任务 When 用户查看任务历史 Then 显示所有已完成任务列表 And 每条记录包含:任务 ID、开始时间、结束时间、状态、结果摘要 And 支持按日期范围筛选 And 支持按状态筛选 (成功/失败/取消) And 支持查看任务详情和日志 And 支持重新执行历史任务

技术任务:

  1. 创建 scheduler/task_history.py 模块
  2. 定义 TaskRecord 数据模型
  3. 实现历史记录存储 (SQLite)
  4. 实现查询和筛选接口
  5. 编写单元测试验证历史管理

估算: 5 故事点


Story 7.22: 实现定时任务功能

As a 用户, I want 设置定时自动翻译, So that 在指定时间自动执行任务。

验收标准:

Given 用户打开定时任务设置 When 用户创建定时任务 Then 支持设置执行时间 (如每日 22:00) And 支持设置重复规则 (每日/每周/自定义) And 支持选择要执行的任务 And 到达设定时间后自动执行 And 任务执行完成后发送通知 And 支持启用/禁用定时任务

技术任务:

  1. 创建 scheduler/timed_task.py 模块
  2. 实现 APScheduler 集成
  3. 实现定时任务配置管理
  4. 实现任务触发通知
  5. 编写测试验证定时功能

估算: 6 故事点


Epic 7a 总结: 7 个故事,共 34 故事点


Epic 7b: 用户界面完整版

Epic 目标: 用户通过图形界面轻松操作翻译工具,包括文件导入、进度查看、配置管理和结果预览。

覆盖的需求: FR36-FR52, AR21, AR22

Story 7.7: 创建主窗口框架

As a 用户, I want 看到应用程序主窗口, So that 可以开始使用翻译工具。

验收标准:

Given 应用程序启动 When 主窗口加载 Then 显示应用标题 "BMAD Novel Translator" And 包含菜单栏 (文件、编辑、视图、帮助) And 包含工具栏 (常用操作按钮) And 包含主工作区 (文件列表/任务队列) And 包含状态栏 (当前状态/版本信息) And 窗口尺寸可调整 (默认 1200x800)

技术任务:

  1. 创建 ui/main_window.py 模块
  2. 实现 MainWindow 类继承 QMainWindow
  3. 创建菜单栏和工具栏
  4. 创建中心部件布局
  5. 编写 UI 测试验证窗口显示

估算: 5 故事点


Story 7.8: 实现文件选择组件

As a 用户, I want 选择待翻译的文件, So that 添加文件到处理队列。

验收标准:

Given 主窗口已打开 When 用户点击"添加文件"按钮 Then 打开文件选择对话框 And 支持选择 .txt, .md, .html 文件 And 支持多选 (Ctrl+点击) And 支持文件夹导入 And 选中的文件显示在文件列表 And 显示文件名、大小、状态

技术任务:

  1. 创建 ui/file_selector.py 模块
  2. 实现 QFileDialog 集成
  3. 实现文件列表模型
  4. 实现 QTableView 显示
  5. 编写 UI 测试验证选择功能

估算: 4 故事点


Story 7.9: 实现进度显示组件

As a 用户, I want 实时查看任务执行进度, So that 了解任务完成情况。

验收标准:

Given 任务正在执行 When 用户查看进度显示 Then 显示当前任务名称和状态 And 显示进度条 (0-100%) And 显示当前阶段 (如"正在翻译 第 5/10 章") And 显示已用时间和预估剩余时间 And 支持最小化到系统托盘 And 任务完成时显示通知

技术任务:

  1. 创建 ui/progress_widget.py 模块
  2. 实现 QProgressBar 组件
  3. 实现时间计算逻辑
  4. 实现系统托盘集成
  5. 编写 UI 测试验证进度显示

估算: 5 故事点


Story 7.10: 实现配置管理界面

As a 用户, I want 管理应用程序配置, So that 自定义翻译行为。

验收标准:

Given 用户打开设置对话框 When 用户查看配置选项 Then 显示分类配置项:

  • 翻译设置 (模型选择、GPU 加速开关、批处理大小)
  • 界面设置 (主题、语言、字体大小)
  • 路径设置 (工作目录、缓存目录、输出目录)
  • 高级设置 (日志级别、并发数) And 支持修改配置并实时保存 And 支持恢复默认配置 And 配置文件保存为 JSON 格式

技术任务:

  1. 创建 ui/settings_dialog.py 模块
  2. 创建 config/config_manager.py 模块
  3. 实现 QTabWidget 分页配置
  4. 实现配置持久化
  5. 编写测试验证配置管理

估算: 6 故事点


Story 7.11: 实现主题切换功能

As a 用户, I want 切换界面主题, So that 选择舒适的视觉风格。

验收标准:

Given 应用程序运行中 When 用户切换主题 Then 支持浅色主题 (默认) And 支持深色主题 And 支持系统主题 (跟随系统) And 主题切换立即生效 And 主题选择保存到配置

技术任务:

  1. 创建 ui/theme_manager.py 模块
  2. 实现主题样式表定义
  3. 实现主题切换逻辑
  4. 集成到设置界面
  5. 编写 UI 测试验证主题切换

估算: 4 故事点


Story 7.12: 实现多语言界面支持

As a 用户, I want 切换界面语言, So that 使用熟悉的语言操作软件。

验收标准:

Given 应用程序已启动 When 用户切换语言 Then 支持中文 (简体) And 支持英文 And 所有界面元素文字相应切换 And 语言切换立即生效 And 语言选择保存到配置

技术任务:

  1. 创建 ui/i18n.py 国际化模块
  2. 创建语言资源文件 (zh_CN.json, en_US.json)
  3. 实现 QTranslator 集成
  4. 实现动态语言切换
  5. 编写测试验证多语言支持

估算: 5 故事点


Story 7.13: 实现快捷键支持

As a 用户, I want 使用快捷键操作软件, So that 提高操作效率。

验收标准:

Given 应用程序运行中 When 用户使用快捷键 Then 支持常用快捷键:

  • Ctrl+O: 打开文件
  • Ctrl+S: 保存配置
  • Ctrl+T: 开始翻译
  • Ctrl+P: 暂停任务
  • Ctrl+,: 打开设置
  • F1: 打开帮助 And 快捷键在菜单中显示 And 支持自定义快捷键

技术任务:

  1. 创建 ui/shortcut_manager.py 模块
  2. 实现 QShortcut 定义
  3. 集成到菜单和按钮
  4. 实现快捷键编辑器
  5. 编写测试验证快捷键功能

估算: 4 故事点


Story 7.14: 实现拖拽上传功能

As a 用户, I want 直接拖拽文件到窗口, So that 快速添加待翻译文件。

验收标准:

Given 主窗口已打开 When 用户拖拽文件到窗口 Then 窗口高亮显示拖拽区域 And 释放鼠标后文件添加到队列 And 支持拖拽多个文件 And 支持拖拽文件夹 And 不支持的文件格式显示错误提示

技术任务:

  1. 创建 ui/drop_zone.py 模块
  2. 实现 dragEnterEvent 和 dropEvent
  3. 实现文件类型验证
  4. 集成到主窗口
  5. 编写 UI 测试验证拖拽功能

估算: 4 故事点


Story 7.15: 实现日志查看器

As a 用户, I want 查看应用程序日志, So that 诊断问题和了解执行详情。

验收标准:

Given 应用程序运行中 When 用户打开日志查看器 Then 显示按时间排序的日志列表 And 支持日志级别过滤 (DEBUG/INFO/WARNING/ERROR) And 支持关键词搜索 And 支持导出日志到文件 And 错误日志高亮显示 And 自动滚动到最新日志

技术任务:

  1. 创建 ui/log_viewer.py 模块
  2. 实现 QListView 日志显示
  3. 实现日志过滤逻辑
  4. 实现搜索功能
  5. 编写测试验证日志查看

估算: 5 故事点


Story 7.16: 实现错误提示对话框

As a 系统, I want 显示用户友好的错误提示, So that 用户理解问题并知道如何处理。

验收标准:

Given 应用程序运行中 When 发生错误 Then 显示错误对话框 And 包含错误类型和描述 And 包含建议的解决方案 And 提供"查看详情"按钮显示完整错误信息 And 提供"复制错误信息"按钮 And 支持"不再提示此错误"选项

技术任务:

  1. 创建 ui/error_dialog.py 模块
  2. 定义错误类型和解决方案映射
  3. 实现错误对话框 UI
  4. 实现详情显示
  5. 编写测试验证错误提示

估算: 4 故事点


Story 7.17: 实现报告导出功能

As a 用户, I want 导出翻译报告, So that 分享或存档翻译结果。

验收标准:

Given 翻译任务已完成 When 用户选择导出报告 Then 支持导出为 HTML 格式 (包含样式) And 支持导出为 PDF 格式 And 报告包含:任务摘要、翻译统计、质量分析、术语使用 And 支持自定义报告内容和样式 And 导出进度显示

技术任务:

  1. 创建 ui/report_exporter.py 模块
  2. 实现 HTML 报告生成
  3. 集成 PDF 生成库 (weasyprint)
  4. 实现导出对话框
  5. 编写测试验证报告生成

估算: 6 故事点


Story 7.18: 实现内容预览功能

As a 用户, I want 预览翻译前后内容, So that 验证翻译效果。

验收标准:

Given 翻译已完成或进行中 When 用户打开预览窗口 Then 左侧显示原文 And 右侧显示译文 And 支持同步滚动 (一侧滚动时另一侧跟随) And 高亮显示差异位置 And 支持全屏预览 And 支持在预览中直接编辑译文

技术任务:

  1. 创建 ui/preview_widget.py 模块
  2. 实现双栏对比视图
  3. 实现同步滚动逻辑
  4. 实现差异高亮
  5. 编写 UI 测试验证预览功能

估算: 6 故事点


Story 7.19: 实现术语表编辑器

As a 用户, I want 可视化编辑术语表, So that 方便管理术语翻译。

验收标准:

Given 用户打开术语表编辑器 When 用户查看术语表 Then 显示术语表格 (原文、翻译、类型、备注) And 支持添加新术语 (弹出对话框输入) And 支持编辑现有术语 (双击编辑) And 支持删除术语 And 支持搜索和筛选术语 And 支持导入/导出术语表

技术任务:

  1. 创建 ui/terminology_editor.py 模块
  2. 实现 QTableView 表格显示
  3. 实现增删改查操作
  4. 实现搜索和筛选
  5. 编写 UI 测试验证编辑器功能

估算: 5 故事点


Story 7.20: 实现一键翻译功能

As a 用户, I want 一键执行完整翻译流程, So that 简化操作步骤。

验收标准:

Given 用户已选择文件并配置好参数 When 用户点击"一键翻译"按钮 Then 自动执行完整流程:清洗 → 术语提取 → 翻译 → 格式化 And 每个步骤显示进度 And 步骤失败时暂停并提示用户 And 完成后显示结果摘要 And 提供打开输出文件夹按钮

技术任务:

  1. 创建 core/one_click_workflow.py 模块
  2. 实现工作流编排逻辑
  3. 集成进度通知
  4. 实现错误处理
  5. 编写集成测试验证工作流

估算: 5 故事点


Story 7.21: 实现批量操作功能

As a 用户, I want 对多个文件执行批量操作, So that 高效处理多个文件。

验收标准:

Given 文件列表中有多个文件 When 用户选择批量操作 Then 支持全选/反选文件 And 支持批量开始翻译 And 支持批量暂停 And 支持批量删除 And 支持批量导出 And 显示批量操作进度

技术任务:

  1. 创建 ui/batch_operations.py 模块
  2. 实现文件选择逻辑
  3. 实现批量操作调度
  4. 实现批量进度显示
  5. 编写测试验证批量功能

估算: 5 故事点


Story 7.23: 实现统计面板

As a 用户, I want 查看翻译统计数据, So that 了解工作量和效率。

验收标准:

Given 用户打开统计面板 When 用户查看统计数据 Then 显示以下统计:

  • 总翻译字数
  • 总翻译章节数
  • 总翻译时长
  • 平均翻译速度 (字/分钟)
  • 术语使用率
  • 任务完成率 (成功/失败) And 支持按日期范围筛选 And 支持图表可视化 (柱状图、折线图) And 支持导出统计报告

技术任务:

  1. 创建 ui/statistics_panel.py 模块
  2. 实现统计数据计算
  3. 集成 matplotlib 绘图
  4. 实现日期筛选
  5. 编写测试验证统计准确性

估算: 6 故事点



Story 7.24: 实现导入预览界面

As a 用户, I want 导入 TXT 后看到预览信息, So that 确认导入正确。

验收标准:

Given 用户选择并导入 TXT 文件 When 文件解析完成 Then 显示预览界面包含:

  • 章节数量
  • 总字数统计
  • 预计翻译时间 (基于 GPU 速度估算)
  • 前 3 章标题预览 And 提供"确认开始翻译"按钮 And 提供"取消导入"按钮 And 支持在预览界面调整翻译参数

技术任务:

  1. 创建 ui/import_preview.py 模块
  2. 实现预览信息收集逻辑
  3. 实现时间估算算法
  4. 创建预览界面 UI
  5. 编写测试验证预览功能

估算: 4 故事点


Story 7.25: 实现离线翻译支持

As a 用户, I want 网络断开时继续翻译, So that 不受网络状态影响。

验收标准:

Given 用户正在使用翻译工具 When 检测到网络断开 Then 显示离线模式提示 And 继续执行本地翻译任务 And 上传任务保存到本地队列 When 检测到网络恢复 Then 自动执行队列中的上传任务 And 显示"网络已恢复,正在上传..."提示 And 支持手动触发队列上传

技术任务:

  1. 创建 network/status_monitor.py 模块
  2. 实现网络状态检测 (ping/API 测试)
  3. 创建 upload/offline_queue.py 离线队列模块
  4. 实现队列自动执行逻辑
  5. 编写测试验证离线/恢复流程

估算: 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 完整产品

需求覆盖确认

  • ✅ 所有 52 个功能需求 (FR1-FR52) 已覆盖
  • ✅ 所有 24 个架构需求 (AR1-AR24) 已覆盖
  • ✅ 所有 6 个非功能性需求 (NFR-P1 到 NFR-P6) 已考虑