edit | blame | history | raw

B 站动态主动刷新采集器 V001 编码方案

创建人员:dev.developer.project.secondary / infodev-2

文件职责:冻结 DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001 在实现前的页面刷新、证据、状态、正式保存、重跑和验收合同。

管理规范/模板:../../../../common/dev-doc/编码规范.md../../../../common/dev-doc/开发审计规范.md../../../../common/dev-doc/编码方案范本.md

引用文件:../../../开发事项总纲.md../../../开发事项计划.md../../../开发执行日志.md../../../../ai-video-downloader/draft/2026-08-04-哔哩哔哩动态采集需求.md../../../../dev/project-dev/bili_dynamic_collector.py../../../../dev/project-dev/test/test_bili_dynamic_collector.py

记录方式:重型开发方案;本方案独立审核 PASS/0 前不得修改产品代码、测试、fixture、正式采集目录或小时任务。

1. 事项、角色与重型判断

  • 事项:DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • 需求:REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;正式分派消息=msg_20260813110304034_ea344f45
  • 唯一 owner:dev.developer.project.secondary / infodev-2 / 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 原 reviewer:dev.reviewer.project / inforev / 019fb7c5-e1fd-7df0-8ec9-c87edea4215d
  • 请求方:case_analysis.video_downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 分类:重型。原因是新增真实页面控制编排、跨调用 durable run、正式正文/图片落盘、两个 append-only manifest 的事务协同、小时重跑和故障恢复;不是对原 check 的局部改名。

单一实施与审核链保持不变;原 MVP DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001PASS/0 / ACCEPTED_CLOSED 是冻结历史,本事项不改写它。

2. 问题与冻结基线

2.1 真问题

现有小时流程在页面读取失效后,只使用公开搜索或 API 摘要;空结果被误表述为“无新增”。公开索引既不能证明页面已刷新,也不能证明身份、正文、72 小时覆盖和分页完整性,必须从权威 no-new 判定中移除。

2.2 代码和文档基线

工件 bytes SHA-256
dev/project-dev/bili_dynamic_collector.py 60090 67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8B
dev/project-dev/bili_dynamic_collector.example.json 1117 42A9AA7EE29ED061DC408C6C9A907FA7B20FD8C2B41605C54B6716A0FE388951
dev/project-dev/test/test_bili_dynamic_collector.py 31303 D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322
dev/project-dev/test/fixtures/bili_dynamic_collector/dynamic_items.json 1216 0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F
dev-doc/project-doc/B站博主动态采集辅助工具.md 11950 2EE6B01528509D8D6E57D7800BF877FAB7C7F63AE83C1EE8E86D7D247FA730A2
ai-video-downloader/draft/2026-08-04-哔哩哔哩动态采集需求.md 4114 DC5807D6325AA13B1E0C72C92B9534003CC4F8046A1789AA70FCC98DECC9AB87

原公开命令 check / move-completed / handoff、退出码、安全路径、secret gate、选择器、移动事务、terminal evidence 和 canonical handoff 均为已通过合同,不得回退。

2.3 正式数据前像

  • ana-data/news-青枫浦上Q/manifest.jsonl=51598 bytes / 0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73 / 48 lines
  • 48 行是事件,不是 48 条唯一动态;其中 SAVED=16,其余主要是同一视频的 blocked/pending/processing 状态。
  • 最后一条事件 collected_at=2026-08-10T00:41:10+08:00;文件系统 manifest 写入时间约 2026-08-10T00:41:54+08:00
  • 最近正式业务文件为 20260809-201835_video-cover_...BV1dwum6UEEq.jpg
  • 新实现只在后续获准运行时追加新 schema 事件,不修改、删除、排序、压缩或迁移上述 48 行。

3. 产品边界与唯一受支持控制面

3.1 能力拆分

Python CLI 不假装能够直接调用 Codex Chrome 工具,也不引入 CDP、remote-debugging、profile 读取、Playwright 持久 profile、浏览器 Cookie 导出或未审核扩展。小时流程由两个已登记组件组成:

  1. 受支持 Chrome 控制步骤:由 case_analysis.video_downloader 的 Codex 小时任务使用项目可用的 Chrome 控制能力,对唯一 creator.dynamic_url 最多执行一次 navigatereload,读取页面可见 DOM,并生成无秘密 browser-evidence.json 与本地 intake 附件。
  2. 项目 CLI 持久化步骤bili_dynamic_collector.py refresh-begin/refresh-commit 创建运行合同、严格验证浏览器证据、统一标准化/去重、原子落盘并输出五种业务终态。

因此“主动刷新”属于小时任务编排的第一步,CLI 是其 durable begin/commit 与正式保存入口。文档必须明确:只运行 refresh-commit 或只查公开索引不等于完成刷新。

3.2 禁止控制面

不得使用 chrome://extensions、开发者模式、--load-extension、Raw CDP、坐标脚本、profile 注入、Cookie/localStorage 读取、签名媒体 URL、HTTP 412 绕过、验证码处理、循环刷新或更换 header/参数规避平台限制。本事项不下载视频,不修改/发布扩展,不写 policy/HKCU。

4. 配置增量

保留 schema version 1 和现有字段,新增必填 refresh object;缺少时只有旧三命令可用,调用 refresh 命令必须 E_CONFIG,避免旧配置静默获得正式写权限。

{
  "creator": {
    "name": "青枫浦上Q",
    "uid": "1420210197",
    "dynamic_url": "https://space.bilibili.com/1420210197/dynamic"
  },
  "refresh": {
    "archive_dir": "<authorized archive root>",
    "formal_manifest": "<archive root>/manifest.jsonl",
    "intake_dir": "<owned credential-free intake root>",
    "timeout_seconds": 30,
    "page_ready_timeout_seconds": 15,
    "dom_read_timeout_seconds": 8,
    "max_refresh_count": 1,
    "run_history_slots": 168,
    "max_items": 200,
    "max_images_per_item": 20,
    "max_image_bytes": 31457280,
    "max_text_bytes": 5242880
  }
}

冻结规则:

  • creator name、UID 和 dynamic URL 必须精确为 青枫浦上Q / 1420210197 / https://space.bilibili.com/1420210197/dynamic;本事项不支持第二个账号。
  • archive_dir、formal manifest 和 intake root 必须 lexical lstat 后位于配置允许根内,父链无 reparse;不得依赖个人机器绝对路径写进代码。
  • archive/formal 路径只在正式运行配置中由视频下载员消费;示例和测试只使用 dev/project-dev/tmpTemporaryDirectory
  • 允许调整 window_hours、超时、数量和大小上限,但 window 仍限定 1..744h,一次刷新仍固定为 1。

5. 小时入口与 durable run

5.1 refresh-begin

python dev/project-dev/bili_dynamic_collector.py --config <authorized.json> refresh-begin --now <offset-aware-time>

在现有 StateLock 下创建 state_dir/refresh/pending.json,schema 1 必含:

  • run_id:由 task、creator UID、started_at 和 128-bit OS random nonce 派生的 32 位小写十六进制;nonce 不属于认证秘密。
  • task_idcreator_namecreator_uidcreator_dynamic_url
  • started_atdeadline_atwindow_startwindow_end
  • config_sha256formal_manifest_preimage_bytes/sha256state_manifest_preimage_bytes/sha256
  • max_refresh_count=1page_ready_timeout_seconds=15dom_read_timeout_seconds=8
  • phase=BROWSER_REFRESH_REQUIRED

pending 采用 CreateNew + flush/fsync;已有 pending 时先按第 11 节恢复,不能覆盖。begin 不读取浏览器、不碰 archive 内容或两个 manifest。

5.2 Chrome 步骤

小时任务取得 begin stdout 后:

  1. 精确匹配现有目标 tab;没有时只导航一次到 exact URL。
  2. 现有目标 tab 时只 reload 一次;navigate 和 reload 合计不得超过 1。
  3. 等待页面 ready 最多 15 秒;成功后只读 DOM/可见页面最多 8 秒;整体不得超过 pending deadline。
  4. 可在同一已刷新页面内做有界滚动/分页读取,但不得再次 reload/navigate;达到 window 下界或明确 end-of-feed 后停止。
  5. 只生成第 6 节 evidence 和无秘密 intake 附件;不得提取 Cookie/token/localStorage/profile、网络 headers、签名请求 URL或媒体流地址。

5.3 refresh-commit

python dev/project-dev/bili_dynamic_collector.py --config <authorized.json> refresh-commit --input <browser-evidence.json> --now <offset-aware-time>

commit 必须绑定唯一 pending run_id、config hash 和 deadline;没有 begin、run ID 不一致、deadline 超期或 refresh count 不等于 1均失败。它先完成证据/身份/覆盖/秘密/内容校验,再进行任何正式写入。

6. 浏览器证据 schema 1

根 exact keys:

schema_version, run_id, transport, requested_url, final_url,
refresh_action, refresh_count, refresh_started_at, refresh_finished_at,
read_finished_at, page_outcome, page_title, creator,
coverage, items, discovery_summary, safe_diagnostics

固定合同:

  • transport=codex_chrome_visible_page
  • refresh_action=navigate|reloadrefresh_count=1
  • page_outcome=READABLE|UNREADABLE_TIMEOUT|UNREADABLE_ERROR|ACCESS_BLOCKED
  • creator exact keys=uid,name,profile_url;READABLE 时必须精确匹配 UID/name/profile URL。
  • coverage exact keys=requested_window_start,requested_window_end,oldest_item_published_at,reached_window_start,end_of_feed,pagination_complete,page_truncated,all_cards_parsed,unparsed_card_count
  • items 最多 200;每项 canonical fields=dynamic_id,opus_id,bvid,content_type,published_at,title,source_url,body_text,body_complete,duration_seconds,artifacts
  • artifacts 只登记 intake root 下相对路径、kind、sequence、extension、bytes、sha256 和去 query/fragment 的 canonical public source URL;不得登记网络请求 header 或原始带签名 URL。
  • discovery_summary 只允许状态与计数,不携带响应体;公开搜索/API 不得给 page_outcome=READABLE 或 coverage complete。
  • safe_diagnostics 只允许固定枚举、timeout 秒数和 bounded count,不接受 raw exception、HTML、header、response body 或 URL query。

所有未知字段、secret-like key、控制字符、绝对 intake 路径、reparse、hash/size 不符、超限或 URL credential/query 风险均在正式写前停止;错误 stdout 只含固定 code/path,不回显值。

7. 五种终态的唯一判定

status 必要条件 exit 正式业务写入
NEW_ITEMS_SAVED 页面 READABLE、身份匹配;至少一条完整新内容经事务保存。coverage 可完整或不完整,但 stdout 必须给 no_new_confirmed=false 0 新 artifact、state event、formal event
REFRESH_CONFIRMED_NO_NEW READABLE、身份匹配、相对 formal/state catalog 无新增,且 coverage 全部硬门通过 0 无;只更新有界 run evidence
REFRESH_FAILED_PAGE_UNREADABLE 页面 ready/DOM/evaluate 超时或无可靠 DOM,且没有明确 access interstitial 4
REFRESH_BLOCKED_AUTH_OR_ACCESS 登录、验证码、会员/DRM/访问控制提示,或 UID/name/profile 身份不匹配 3
PARTIAL_DISCOVERY_UNCONFIRMED 只有公开搜索/API 摘要;或页面可读但 coverage 不足且没有可安全保存的新完整内容 4

REFRESH_CONFIRMED_NO_NEW 的 coverage 硬门全部为真:时间字段绑定 pending;page_truncated=falseall_cards_parsed=trueunparsed_card_count=0pagination_complete=true;并且 reached_window_start=true,其依据必须是 oldest_item_published_at<=window_start 或 exact end-of-feed。空页面只有身份匹配且 explicit end-of-feed 才可 no-new。

优先级:creator mismatch/access blocked > unreadable > readable new items > readable complete no-new > partial。公开 discovery 永远不能提升 page 权威级别。

8. 两份补充真实证据的冻结解释

8.1 Chrome 单次刷新样本

  • 日期:2026-08-13。
  • exact URL=https://space.bilibili.com/1420210197/dynamic;tab title=青枫浦上Q个人动态-青枫浦上Q动态记录-哔哩哔哩视频
  • 受支持 Chrome 控制执行 reload 恰好 1 次;DOM content/snapshot 在 15 秒边界超时;对同一已刷新页面只读 evaluate 在 8 秒边界超时;没有第二次刷新。
  • Cookie/token/localStorage 读取=0;正式 ana-data 写入=0。
  • 唯一合法 replay 结果=REFRESH_FAILED_PAGE_UNREADABLE / exit4,不得是 no-new。该真实刷新已满足本事项验收 B 的“只允许一次”样本;实现阶段只把脱敏同构 fixture 送入 CLI,不重复真实刷新。

8.2 公开 endpoint 样本

  • 无 Cookie/token;仅普通 UA 与 Accept: application/json 请求 https://api.bilibili.com/x/polymer/web-dynamic/v1/feed/space?host_mid=1420210197
  • 15 秒内返回 JSON code=-412,message=request was banned;重试=0,header/参数绕过=0。
  • 它只能形成 discovery_summary=BLOCKED_412,总体在页面不可读时仍为 REFRESH_FAILED_PAGE_UNREADABLE;如果本轮只有 discovery 证据则为 PARTIAL_DISCOVERY_UNCONFIRMED。不得用它证明 no-new,也不得再次尝试规避。

9. 标准化、去重与混合历史 catalog

9.1 共享逻辑

新入口必须复用/抽取原代码的时间、URL、Windows stem、stable token、entity ID、atomic write、StateLock 和 manifest helper;不得复制一套不同的 dynamic/opus/BV/source URL 判定。

9.2 formal manifest 只读兼容

新增私有 load_formal_catalog() 只读处理:

  1. 历史 schema_version=1 事件:从 stable_idbvidsource_url、可选 creator UID 抽 token。
  2. schema_version=2,event_type=DYNAMIC_CONTENT_SAVED:从 dedupe_keys 和 artifacts 抽 token。
  3. 同 token 的多个状态事件合并为同一实体;事件行数和唯一动态数分别统计。
  4. 非 JSON、关键 scalar 控制字符、同 token 映射到冲突身份、未知 creator 或损坏已保存 hash 一律 fail closed。

历史 48 行保持 byte prefix;不把历史 blocked 状态当新内容,也不因 SAVED=16 就推断唯一动态恰为 16。

9.3 新 state events

  • text/article/image 完成保存后,在既有 state manifest 写 CONTENT_SAVED 并加入 ACTIVE_OR_SUCCESS_STATUSES,避免旧 check 再次生成待办。
  • video 保存 cover/metadata 后仍写既有 TODO_QUEUED,继续走已通过的 move/handoff 主链;本事项不下载视频。
  • check/move-completed/handoff 对既有状态和退出码不变。

10. 正式内容与 manifest schema 2

10.1 artifact 规则

  • text/article:body_complete=true,正文按 LF 规范化、strict UTF-8、无 BOM、一个终止 LF,exact 1 个 .txt;不得保存 HTML 或摘要冒充全文。
  • image:caption 可生成一个 .txt;原图为 .jpg/.jpeg/.png/.webp,逐件 magic/extension/size/hash、sequence 唯一,最多 20 张;不转码、不缩放。
  • video:必须有 exact BVID、canonical Bilibili video URL、finite positive duration 和 exact 1 个 cover artifact;只保存 metadata/cover,不允许 video/audio artifact。
  • 命名继续复用 YYYYMMDD-HHmmss_<type>_<safe-title> 和实体冲突后缀;正式目标 CreateNew/no-overwrite,同名异 hash 停止。

10.2 formal event

每个新实体只追加一条 canonical schema 2 event:

schema_version=2, event_type=DYNAMIC_CONTENT_SAVED, creator,
creator_uid, entity_id, dynamic_id, opus_id, bvid, dedupe_keys,
content_type, published_at, title, source_url, collected_at,
artifacts[{kind,sequence,path,bytes,sha256}], duration_seconds,
page_run_id, coverage_complete, status=SAVED

相同实体重跑不再追加 SAVED;no-new、unreadable、blocked 和 partial 不写 formal manifest。

11. 原子提交、崩溃恢复与竞争写

11.1 内容事务

在任何正式发布前,写 state_dir/refresh/transaction.pending.json,绑定:run、证据 hash、所有源/目标 bytes/hash、state/formal 两份 manifest preimage 和候选 after hash、created targets 列表、phase。阶段顺序:

  1. validate all;
  2. 创建 archive 内 owned staging,逐件 flush/fsync/hash;
  3. 以 no-overwrite hard link 或等价 CreateNew 发布 artifacts;不支持安全语义即停止;
  4. 原子提交 state manifest;
  5. 再次复算 formal manifest 当前 bytes/hash 必须仍等于 preimage;
  6. 原子提交 old exact bytes + canonical new lines,这是业务 commit point;
  7. 写 final transaction receipt、更新 bounded run evidence、清理 staging/pending。

11.2 恢复矩阵

  • formal manifest 未到 candidate hash:验证没有外部漂移后,把 state manifest恢复至 preimage并只删除本 run CreateNew 且 hash 匹配的 artifacts;任一身份不明则 E_RECOVERY_AMBIGUOUS,不猜测删除。
  • formal manifest 已到 candidate hash:artifacts/state 必须匹配 intent;匹配则只补 final receipt和 run status,不重复 append;不匹配则 E_RECOVERY_FAILED,不改业务文件。
  • formal manifest 是第三个 hash/bytes 或旧 bytes 加了别的 writer 内容:E_MANIFEST_RACE,不覆盖,不删除别人的文件。
  • ordinary exception、KeyboardInterrupt/SystemExit 在 Python 实现中按原类型/exit 收口;transaction pending 保留给下次恢复,异常消息不得含输入值。

11.3 no-new 与失败状态有界化

不得把每小时 no-new/timeout/412 追加到 formal manifest。state_dir/refresh/runs/latest.json 加 168 个固定环形 slot(epoch hour modulo 168),每次原子替换对应 slot;最多 169 个状态文件。slot 必含 run_id/time/status/evidence hash/count/error code,不含正文或秘密。相同 run 重放字节一致;旧 slot 被新的小时证据覆盖是预期 bounded 状态,不是业务历史删除。

12. 错误、stdout 与时间预算

  • stdout 始终一行 canonical JSON,至少 schema_version,ok,status,error_code,run_id,creator_uid,refresh_count,page_authoritative,coverage_complete,new_items,saved_artifacts,formal_manifest_changed,run_evidence_path
  • NEW_ITEMS_SAVEDREFRESH_CONFIRMED_NO_NEW exit 0;unreadable/partial exit 4;access/identity/safety exit 3;输入合同 exit 2;内部失败 exit 1;用户中断 exit 130。
  • Chrome 阶段由 pending deadline 限制;页面 ready 15s、DOM read 8s,总预算默认 30s。截止后不重试,不再发网络/Chrome动作;commit 只处理已落本地证据。
  • 错误文本固定枚举:E_PAGE_TIMEOUT/E_PAGE_UNREADABLE/E_ACCESS_BLOCKED/E_CREATOR_MISMATCH/E_PARTIAL_DISCOVERY/E_COVERAGE_INCOMPLETE/E_SECRET_FIELD/E_MANIFEST_RACE/E_RECOVERY_* 等,不拼接 raw browser/API error。

13. 实现落点

设计 PASS 后最小变更:

  1. dev/project-dev/bili_dynamic_collector.py:增加 config、begin/commit CLI 和共享 helper 调用;保留原三命令。
  2. dev/project-dev/bili_dynamic_refresh.py:页面 evidence schema、formal catalog、内容计划和事务/恢复;不包含浏览器/CDP/network client。
  3. dev/project-dev/bili_dynamic_collector.example.json:仅加入开发 tmp refresh 配置。
  4. dev/project-dev/test/test_bili_dynamic_collector.py:冻结原 13 项并补公开 CLI non-regression。
  5. dev/project-dev/test/test_bili_dynamic_refresh.pyfixtures/bili_dynamic_refresh/:新增脱敏 fixtures。
  6. dev-doc/project-doc/B站博主动态主动刷新采集器.md 与实现证据;原工具文档增加迁移说明,不改写旧验收结论。

不新增服务、常驻 daemon、数据库、浏览器扩展、API server、Web UI 或下载器。

14. 离线测试与非真空验收

必须从 public CLI/main 入口覆盖:

  1. READABLE + new text/article/image/video:正文/原图/cover exact bytes/hash、video 无媒体文件、formal/state 事件和 stdout。
  2. READABLE + complete no-new:formal/state bytes 不变,仅 bounded run evidence 更新。
  3. 15s/8s timeout fixture:REFRESH_FAILED_PAGE_UNREADABLE,不得出现 no-new,正式树和 manifest bytes 不变。
  4. explicit login/captcha/access/DRM、UID/name/profile mismatch:blocked/exit3/零正式副作用。
  5. search-only empty、API -412 request was banned、页面 partial/truncated/unparsed/pagination incomplete:不得 no-new。
  6. empty page 只有 exact end-of-feed + identity + complete coverage 才 no-new。
  7. 时间窗 72h 与可配置边界、future/old item、URL/BVID/dynamic/opus token 交叉去重。
  8. 历史 48 行同构 fixture:事件数与 unique entity 数分开,blocked 重复不变成新动态;old bytes prefix 保留。
  9. 同 evidence 重跑、formal already committed crash replay、state-only crash rollback、artifact partial、manifest race、target same/different hash、KeyboardInterrupt/SystemExit 全点注入。
  10. body incomplete、image hash/magic/size/reparse/escape、video duration/cover/BVID 缺失均零正式提交。
  11. 配置/evidence/formal/state/intake 的 secret-like key、synthetic unique secret sentinel 和 raw error 注入;stdout/log/manifest/receipt/tree 全域 sentinel 0。
  12. 环形 168 slot 上界与相同 run 重放;小时 no-new 不增长 formal manifest。
  13. 原 13 项目标测试完整通过;项目级 discovery 做比例回归。

测试只用 TemporaryDirectory、数十字节合成图片与短文本,不复制真实正文/图片/视频,不联网、不启动 Chrome、不写正式路径。

15. 真实 smoke 验收口径

本事项已经取得第 8.1 节恰好一次真实 refresh timeout 样本,且公开 API 样本没有重试。实现后将用脱敏、字段等价 fixture 通过 public CLI 重放,断言 REFRESH_FAILED_PAGE_UNREADABLE、formal write 0、no-new token 0。为尊重“一次刷新、无重试”,开发/审核阶段不再次刷新目标页。

若请求方在实现 PASS 后另行运行正常小时采集,那是按既有用户授权的运营动作,不是本开发验收补跑;仍须每轮一次刷新和本方案全部状态门禁。

16. 性能与小时运行

  • 本地 commit 的目标:无新增 <1s,100 items/20 images 元数据规划 <2s(不含外部 Chrome/intake 下载时间)。
  • formal manifest 目前 51KB,允许原子全文件重写;达到 10MB 前不引入数据库。超过阈值仅报告性能缺口,不在本事项自动迁移。
  • overlap 继续由 StateLock + durable pending 拒绝;调度不得重叠启动或后台遗留 Chrome动作。
  • 搜索/API discovery 可完全缺失;它不阻断可靠页面 new/no-new,只能作为非权威附证。

17. 文档、证据与审核门

设计审核需一次检查全目标:状态优先级、支持的 Chrome 编排、evidence schema、覆盖充分性、formal mixed-history、两个 manifest、内容事务、恢复、secret、fixture 与真实样本解释。PASS/0 前实现/测试/fixture修改=0。

实现后证据至少包含:

  • 变更文件 bytes/SHA-256;原基线与正式 48 行前像 hash。
  • targeted、原 13 项、project regression、compile/help、strict UTF8/no BOM/no trailing、secret scan、governance。
  • fixture cold/rerun/crash/race/slot timing。
  • 第 8 节真实样本 replay;真实 refresh/download/formal write=0。
  • 工具调用方式、状态表、恢复与小时任务 choreography。

实现提交原 dev.reviewer.project 一次完整审核;只有实现 PASS/0 后,视频下载员才可把新入口用于正式小时运行。审核 PASS 不授权视频下载、扩展发布、policy/HKCU 或访问控制绕过。

18. 当前终态

状态=V001_DESIGN_COMPLETE_PENDING_ORIGINAL_REVIEWER_IMPLEMENTATION_FROZEN

当前动作计数:产品 code/test/fixture modification=0;真实 Chrome refresh 新增=0(只接收请求方既有单次证据);network retry=0;download/video=0;formal ana-data write=0;extension publish/policy/HKCU/session secret=0。