# B 站博主动态采集辅助工具 HOLD/5 最小修复设计 V003 ## 1. 唯一修订点 - 事项:`DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001` - 基线组合:V001 `11917/16C14FB2751A0EAB63F76371E75D0569FF8EF5B47FDD8724BE861314B6062733` + V002 `6342/DA3B3DDAA3C8B8EE33E2C0B6857B962754D740EB4BEE075E3BFB0F0FD4382736` - 前序唯一阻断:`F1_R1_ACTIVE_MOVE_ALLOWLIST_REGRESSION` - 本修订只覆盖 V002 第 2.1 节第 4 项、2.2 节和第 3 节的活动状态允许列表;其他文字与全部已通过合同不变。 ## 2. ACTIVE_MOVE 精确允许列表 V002 中“或没有移动终态”“无终态”两处表述废止,禁止作为实施依据。 读取每个实体最新有效 manifest 事件后,只允许按以下顺序分类: 1. 最新状态为 `VIDEO_MOVED` 或 `COMPLETE`:`TERMINAL_MOVED`,按 V002 投影为 `ALREADY_MOVED`、exit 0。 2. 最新状态为 `VIDEO_MOVED_SOURCE_RETAINED`:`TERMINAL_RETAINED`,按 V002 投影为同名状态、exit 4。 3. 最新状态精确等于 `TODO_QUEUED` 或 `MOVE_FAILED`:`ACTIVE_MOVE`,允许进入阶段 B 的源/目标安全预检。 4. 最新状态为 `PROCESSING_HANDOFF_CONFIRMED`、`PROCESSING`、`PROCESSING_FAILED`,事件缺少/空白 `status`,或任何未知状态:在阶段 A 返回 `E_STATUS`、`SAFETY_STOP`、exit 3。 第 4 类禁止进入阶段 B,禁止 stat/resolve 源文件,禁止复制、创建目标、删除源文件或追加 manifest;正式业务文件和 manifest 原始 bytes 必须不变。该安全停止不改变 V001 的任何状态、exit code 或产品边界。 ## 3. 修正后的精确矩阵 | 最新状态 | 分类 | 是否进入阶段 B | 输出/exit | manifest 变化 | | --- | --- | --- | --- | --- | | `VIDEO_MOVED` / `COMPLETE` | `TERMINAL_MOVED` | 否 | `ALREADY_MOVED` / 0 | 无 | | `VIDEO_MOVED_SOURCE_RETAINED` | `TERMINAL_RETAINED` | 否 | `VIDEO_MOVED_SOURCE_RETAINED` / 4 | 无 | | `TODO_QUEUED` / `MOVE_FAILED` | `ACTIVE_MOVE` | 是 | 按冻结事务合同 | 仅运行时事务可追加 | | `PROCESSING_HANDOFF_CONFIRMED` / `PROCESSING` / `PROCESSING_FAILED` | 禁止状态 | 否 | `E_STATUS` + `SAFETY_STOP` / 3 | 无 | | 缺失、空白或未知 `status` | 禁止状态 | 否 | `E_STATUS` + `SAFETY_STOP` / 3 | 无 | ## 4. 参数化非真空入口反例 测试通过 CLI/`main()` 入口参数化覆盖: - `PROCESSING_HANDOFF_CONFIRMED` - `PROCESSING` - `PROCESSING_FAILED` - 缺少 `status` - `status=""` - `status="UNKNOWN_STATE"` 每个 case 均在 `TemporaryDirectory` 中准备净化 manifest、合法 mapping 和一个哨兵源文件;调用前记录 manifest 原始 bytes、源文件 bytes、业务目录树和所有文件哈希。调用后统一断言:exit 3、stdout 中 `status=SAFETY_STOP` 且 `error.code=E_STATUS`;manifest 原始 bytes、源文件、正式目标集合和所有业务文件均完全不变;无 `.partial`、锁残留或新增事件。 ## 5. 门禁 V001+V002+V003 为唯一组合实施合同。V003 限定复审 PASS 前,代码、配置、测试和 fixture 继续冻结。PASS 后只实施前序 HOLD/5 五项,不增加网络、浏览器、下载、调度、自动发送或正式数据能力。