project-infoREQ-BILI-DYNAMIC-COLLECTOR-20260804-001DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001msg_20260810005439384_edc9a9f1HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-EXTENSION-ZERO-MANUAL-STANDARD-LOAD-ASSIGN-20260810-001dev.developer.project.secondary / infodev-2dev.reviewer.project / inforev,沿原事项审核链oidmclckpdmpabbfedplkbdplmfcenbb本增量涉及扩展发布、Chrome 管理策略、当前用户注册表写入和卸载恢复,属于重型高失败成本变更。按照编码规范,V003 必须先取得独立方案审核 PASS/0,才允许创建部署代码、测试或离线候选包。
方案和实现审核前的真实动作固定为:扩展发布 0、安装策略写入 0、Chrome 启动/控制 0、Cookie/session 读取 0、网络 0、下载 0、真实媒体与 F:\video 写入 0、正式 ana-data 写入 0、转写 0。
当前 build-005 Native Host 已按 exact bytes 安装,但 Chrome 控制策略禁止 Codex 访问 chrome://extensions,也不能检查工具栏扩展列表。继续依赖开发者模式“加载已解压的扩展”既需要手工操作,也无法形成标准签名、策略状态和自动卸载证据。
本增量只解决一个问题:
ExtensionInstallForcelist 策略,强制安装 Web Store 签名扩展;“零手工”指最终用户不进入 chrome://extensions、不点击开发者模式或“加载已解压的扩展”。Web Store 发布和一次受控策略安装是独立的治理动作,不属于用户重复手工加载。
本版本只支持:
冻结扩展源码
-> 确定性 Web Store 上传 ZIP + schema 1 build receipt
-> 受权发布者提交 Chrome Web Store
-> reviewer 核对 Web Store 返回的 exact extension ID/version,创建树外 release approval
-> 受控 installer 写 HKCU ExtensionInstallForcelist 单一值
-> Chrome 在后续获授权的正常启动/策略刷新中从 Web Store 官方更新 URL 安装
固定官方更新 URL:
https://clients2.google.com/service/update2/crx
策略位置:
HKCU\Software\Policies\Google\Chrome\ExtensionInstallForcelist
策略值正文:
oidmclckpdmpabbfedplkbdplmfcenbb;https://clients2.google.com/service/update2/crx
策略值名称不是在代码中猜测。受控安装前由管理员冻结一个当前未使用的十进制值名,写入 install approval;installer 只消费该 exact 值名,绝不覆盖或重排其他扩展策略。
chrome://extensions、chrome://policy 或其他受限 URL。--load-extension、开发者模式、unpacked 自动加载、快捷方式参数或计划任务启动浏览器。.pem、私钥或 Web Store 账号凭据。离线实现不能证明 Web Store 已接受发布,也不能证明 Chrome 已加载扩展。因此:
方案 PASS 后仅新增独立目录,不修改冻结的 bili_authenticated_extension/ 17 文件树:
dev/project-dev/bili_authenticated_extension_managed_load/
managed-load-contract.json
build_webstore_upload.ps1
install_managed_extension_policy.ps1
README.md
dev/project-dev/test/bili_authenticated_extension_managed_load/
test_managed_load.py
开发文档:
dev-doc/project-doc/B站已登录会话完整视频扩展入口.md 追加标准加载章节;禁止修改或重新构建:
dev/project-dev/bili_authenticated_extension/ 全部17个批准文件;dev/project-dev/bili_video_download_bridge.py 及其测试;managed-load-contract.json 是 builder 与 installer 共同读取的唯一 source-controlled 合同,schema 固定为1,至少冻结:
task_id、target、extension_id、extension_version、extension_version_name;webstore_update_url;policy_key 与策略正文;[1-9][0-9]{0,3},但不预占具体值。五个 payload 固定为:
manifest.jsonbackground.jssidepanel.htmlsidepanel.csssidepanel.jsbuilder 在任何输出前必须递归验证原冻结源码树(excluding source manifest)仍是 17/17 exact、无额外/缺失/哈希漂移/reparse;然后只投影上述五文件进入 ZIP。Python、PowerShell、wheel、配置、receipt、缓存和其他文件不得进入扩展包。
build_webstore_upload.ps1 只有两种公开模式:
-ValidateOnly:只验证源码、合同和外部 source approval,输出 VALIDATION_PASS_ONLY;-Build:向一个不存在的输出目录写唯一 ZIP 与 schema 1 build receipt。ZIP 规则:
.. 或重复项;project-info-bili-auth-ingress-webstore.zip 与 webstore-upload-build-receipt.json。builder 不调用 Chrome、不签名、不上传、不联网,也不接受 Web Store 凭据。开发测试只在 TemporaryDirectory 或 dev/tmp 生成候选。
实际策略安装必须同时取得两份树外、不可由 developer 自批的文件:
由原 reviewer 在发布证据核对后创建,schema 1 exact keys:
schema=1scope=install-exact-webstore-extensionapproved_by_role=dev.reviewer.projectextension_id、extension_version、webstore_update_urlapproved_atrelease evidence 不得含账号、邮箱、Cookie、token、授权 header 或后台页面正文;只允许 item ID、版本、公开状态、时间和不可变哈希。
由 project.admin 在只读环境 preflight 后创建,schema 1 exact keys:
scope=install-exact-managed-extension-policyapproved_atinstaller 必须在读取 Web Store build payload、创建目录或触碰 HKCU 前验证两份树外 approval;任一 bytes/hash/path/schema/role/scope 漂移即 fail closed。
install_managed_extension_policy.ps1 公开模式:
-ValidateOnly-Install-HealthCheck-Rollback测试专用 file-registry seam 必须是隐藏参数;生产参数不能选择任意 policy root、host name、extension ID、update URL 或禁用 gate。
lstat/reparse 检查,再解析最终绝对路径;网络路径、相对路径、ADS、设备路径和软链接/junction 均拒绝。com.project_info.bili_auth_ingress、type=stdio、单 origin=chrome-extension://oidmclckpdmpabbfedplkbdplmfcenbb/、path 指向 exact build-005 EXE。执行全部共同门禁后输出单行 canonical JSON:
{"result":"VALIDATION_PASS_ONLY",...}
receipt root、HKCU、Chrome 和任何正式路径副作用必须为0。
逐步 ownership:
preflight
-> CreateNew receipt root
-> CreateNew install-receipt.pending.json(含前像与 exact bindings)
-> 写入选定 HKCU value(禁止覆盖)
-> 回读 value name/type/data 与所有其他值前像
-> 原子 rename pending -> managed-extension-install-receipt.json
-> SUCCESS
从 receipt root 创建到最终 receipt rename 的整个边界捕获 BaseException。任一步失败:只删除本次创建的 policy value;仅当 policy key 由本次创建且仍为空时删除该 key;删除本次 receipt root。原有其他 values 不得修改。rollback 二次异常保存在外部失败证据,不覆盖原异常。
只读复算 contract、approvals、Native Host、install receipt、policy exact value 和其他 values 前像;返回 HEALTH_PASS 或固定错误码。它不启动 Chrome,也不声称扩展 enabled。
Rollback 只允许在 install receipt 与当前 policy exact 匹配时执行:
preflight exact active state
-> CreateNew rollback-receipt.pending.json
-> 删除本次 policy value(不删其他 values)
-> 回读确认目标 absent、其他 values 原样
-> rename pending -> managed-extension-rollback-receipt.json
-> ROLLBACK_COMPLETE_POLICY_REMOVED
若删除后 receipt 持久化失败,优先恢复 exact policy value,再清理 pending,并保留双错误证据。成功 rollback 保留 install/rollback 两份 receipt 作为审计历史;不删除 Chrome profile 文件。Chrome 实际卸载/禁用只在后续获授权的正常策略刷新中验证,不在离线脚本中虚报。
stdout 只输出单行 canonical JSON,stderr 只允许固定无秘密错误码。主要终态:
VALIDATION_PASS_ONLY / exit 0INSTALL_COMPLETE / exit 0HEALTH_PASS / exit 0ROLLBACK_COMPLETE_POLICY_REMOVED / exit 0SAFETY_STOP / exit 3FAILED_ROLLED_BACK / exit 4KeyboardInterrupt/SystemExit 保留原类型,但必须先完成同一回滚和外部失败证据。主要错误码:E_SOURCE_DRIFT、E_APPROVAL、E_RELEASE_ID、E_PATH、E_REPARSE、E_NATIVE_HOST_IDENTITY、E_POLICY_PREIMAGE、E_POLICY_CONFLICT、E_RECEIPT、E_ROLLBACK。错误响应不得回显注册表其他 value 数据、个人路径之外的环境信息、账号或第三方正文。
cookie/token/password/authorization/signed_url/client_secret/private_key 等字段名。chrome://,不点击 toolbar。ValidateOnly PASS;build 后 ZIP exact 5、receipt exact。KeyboardInterrupt、SystemExit;失败后目标 value absent、其他 values 与 receipt root 恢复前像。SAFETY_STOP/E_POLICY_PREIMAGE,不删除额外对象。chrome://extensions、--load-extension、remote-debugging/CDP、profile Preferences 写入、自托管 server、第三方 Host 依赖或 Cookie/token 字段。TemporaryDirectory、file-registry seam、合成 hashes 和非秘密 JSON;真实 HKCU/Chrome/network/media=0。本工具只处理五个小文件和一个注册表值,无专项性能风险。离线 builder/installer 每次目标 <5s(不含完整 project regression)。
-Install 安全停止,使用 -HealthCheck。本 V003 先提交原 dev.reviewer.project / inforev 做方案审核。只有 PASS/0 后才能实现第4节文件、运行纯离线测试和形成一次实现证据包。
实现审核 PASS 仍不授权 Web Store 发布、policy 安装、Chrome 启动或真实下载。后续最少四个独立事实门:
第4门通过前,既有 BV1HA3o6oEJJ runtime 授权继续冻结。任何门失败都不得回退到开发者模式、命令行加载、profile 注入或第三方扩展。