edit | blame | history | raw

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_MOVEDCOMPLETETERMINAL_MOVED,按 V002 投影为 ALREADY_MOVED、exit 0。
  2. 最新状态为 VIDEO_MOVED_SOURCE_RETAINEDTERMINAL_RETAINED,按 V002 投影为同名状态、exit 4。
  3. 最新状态精确等于 TODO_QUEUEDMOVE_FAILEDACTIVE_MOVE,允许进入阶段 B 的源/目标安全预检。
  4. 最新状态为 PROCESSING_HANDOFF_CONFIRMEDPROCESSINGPROCESSING_FAILED,事件缺少/空白 status,或任何未知状态:在阶段 A 返回 E_STATUSSAFETY_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_STOPerror.code=E_STATUS;manifest 原始 bytes、源文件、正式目标集合和所有业务文件均完全不变;无 .partial、锁残留或新增事件。

5. 门禁

V001+V002+V003 为唯一组合实施合同。V003 限定复审 PASS 前,代码、配置、测试和 fixture 继续冻结。PASS 后只实施前序 HOLD/5 五项,不增加网络、浏览器、下载、调度、自动发送或正式数据能力。