edit | blame | history | raw

开发审计报告

创建人员:management.admin
文件职责:记录 project-info 根级编码体系的独立审核结论与证据入口。
管理规范/模板:../../common/dev-doc/开发审计规范.md
引用文件:开发事项总纲.md;开发事项计划.md;开发执行日志.md;开发问题记录.md;../项目事项审计报告.md
记录方式:append-only;执行方只登记候选,独立审核角色追加正式结论。

DEV-AUDIT-PROJECT-INFO-DEV-ROOT-RESTORE-20260724-001

  • 审计对象:DEV-SMOKE-PROJECT-INFO-ROOT-20260724-001
  • 关联事项:DEV-ENV-RESTORE-PROJECT-INFO-20260724-001
  • 执行方:management.admin
  • 独立审核方:management.observer
  • 检查范围:3 个根目录、8 份根文档、systems.dev 配置、目标映射、根级账本连通性和 no-code 边界。
  • 候选执行状态:完成,等待独立执行复审。
  • 审计状态:PENDING_INDEPENDENT_EXECUTION_REVIEW
  • 结论:尚未形成;本条不得解释为 PASS 或解除 blocker。

2026-07-24T18:20:20.8456249+08:00 独立执行复审归因

  • 外部独立审核:management.observer / mgobs
  • 管理审计:AUDIT-20260724-PROJECT-INFO-DEV-TARGET-RESTORE-EXEC
  • 审核终态:PASS/issue_count=0/blocking_issue_count=0
  • 本审计处置:PASS
  • 归因说明:本结论由 management.admin 严格依据 management.observer 的同一审计补充 PASS 终态追加,不是执行方自审;根目录、8 份根开发文档、配置、账本连通性和 no-code 边界均已独立复验通过。
  • 权限边界:本 PASS 只关闭环境恢复 dry-run,不授权 V007 源码、测试、synthetic、数据库或业务执行。

DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-20260801-001

  • 记录时间:2026-08-01T02:27:47+08:00
  • 审计阶段:重型性能优化方案独立审核;本条不是实现审核或真实资源验收。
  • 审计对象:DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-REVIEW-20260801-001
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 需求:ai-media-processor/draft/本地视频语音转写_4小时长视频性能与资源优化需求_v0.1.md,SHA-256 BB3030AD336CEE96194A26F691BF494D8D4976A4703D83BBF506BA3544CA0898
  • 方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-V001.md5697 bytes,SHA-256 23CD6FB7CE7D68283F4D1CAFEC6F09CB3318D5784BF2C1133D5B64308105453F;与交接快照一致。
  • 基线代码:dev/project-dev/transcribe_media.py,SHA-256 98BF04135CFAA7E9ADDB8F7D5ED5B8141C4BDFCC6CABDB3EF3B757C85B39C91E
  • 基线测试:dev/project-dev/test/test_transcribe_media.py,SHA-256 07761E66E8499EA1206AE1FCBF93032E52742F86EED17C3428E2F24C2306F9D2
  • 审核范围:模块边界、1200 s 核心块、双侧 5 s 重叠、分段中点归属、模型与语言复用、单临时块、失败清理和真实资源验收;未扩展 GUI、API、数据库、批处理、断点续跑或模型选择。

Findings

F1 — BLOCKING / 代码与方案:用户中断可能留下部分正式输出

  • 证据:V001 第 54 行要求正式输出提交和回滚逻辑保持不变;基线 _commit_outputstranscribe_media.py 第 345—364 行)逐个移动四个文件,只捕获 ExceptionKeyboardInterrupt 继承 BaseException,不会进入现有回滚分支。
  • 只读诊断:在临时目录模拟第二次 Path.replace 前发生 KeyboardInterrupt,结果为 moves_attempted=2partial_formal_outputs=['x.audio.flac']final_directory_exists=True
  • 影响:违反需求第 61 行“失败不留下可误认为完成的正式输出”和第 92 行“用户中断时清理”,也与 V001 第 14、52、54 行的失败安全声明冲突。4 小时运行结束后的提交窗口虽短,但该合同是明确硬门禁。

F2 — BLOCKING / 测试与证据:4 小时验收口径不足以产生可复核结论

  • 证据:V001 第 71—72 行只写“采样”Python/FFmpeg 工作集、GPU、块号和临时块大小,没有冻结采样器、采样周期、进程树归属、逐块峰值计算、证据文件或“前三块/最后三块”的判定公式;因此可能漏掉短生命周期 FFmpeg 子进程或把其他 GPU 进程计入本任务。
  • 正确性证据缺口:V001 未明确要求按需求第 79、104、115—117 行输出全部 20 分钟边界前后各 15 s 抽查、0 <= start <= end <= duration、逐段排序/连续序号、前三块与最后三块 RAM 峰值比较,以及源视频测试前后大小、时间戳、SHA-256 三项一致。V001 第 69 行只冻结了源哈希。
  • 影响:一次约 100 分钟的真实运行可能结束后仍无法证明 RAM/GPU/临时磁盘和全局时间轴合同,造成高代价重跑或错误放行。

Minimal required_fixes

  1. 另建后继方案 V002,明确把提交阶段纳入中断安全:四文件移动过程中捕获并回滚 KeyboardInterruptBaseException 后原样重抛;设计对应单元测试,在第 1、2、3 次移动后分别注入中断并断言正式四文件均不存在、暂存目录最终清理。不得借此改动外部 CLI 或输出合同。
  2. 在 V002 冻结一个外部只读资源采样与证据方案:绑定本次 Python 根 PID 及其 FFmpeg 子进程,按固定周期记录时间、块号、Python 工作集、FFmpeg 子进程工作集及合计、任务 GPU 显存、临时媒体数量与字节数,并生成逐块峰值表和汇总;明确 max(last_3_block_ram_peaks) - max(first_3_block_ram_peaks) <= 2 GiB(或由需求方确认的等价公式)。同时把全部边界 ±15 s、合法时间范围、排序/序号、四文件一致性和源文件大小/时间戳/SHA-256 前后对照列为必交证据。

已通过并冻结的方案合同

  • 公开 CLI 和四文件名称不变;duration <= 1200 s 走原路径,duration > 1200 s 才分块。
  • 每块核心 1200 s、两侧 5 s 重叠、首尾裁边、按全局分段中点归属非重叠核心区间的规则可实施。
  • 单任务只加载一次 large-v3 / CUDA / float16 模型;显式语言全块复用,未指定语言时首块检测并复用语言与概率。
  • 完整 FLAC 留在暂存目录,同时最多存在一个临时分块,块级和外层 finally 清理的模块边界合理。
  • 不新增 CPU/模型降级、GUI、API、数据库、批处理、断点续跑或其他产品功能。

审核命令与结果

  • 方案哈希核验:与交接 design_bytesdesign_sha256 一致。
  • python -B -m unittest discover -s dev/project-dev/test -p "test_*.py" -v6 tests / OK;仅证明现有基线测试通过,不覆盖上述两个阻断。
  • 临时目录提交中断注入:稳定复现一个部分正式 FLAC;未写项目业务产物。
  • 外部动作:源视频读取 0;FFmpeg 0;GPU 转写 0;4 小时媒体生成 0

Open questions

  • 无。required_fixes 均可在现有单脚本、测试和验收证据范围内完成,不需要扩展架构或产品范围。

结论

  • 审计状态:HOLD
  • 阻断问题数:2
  • 当前可读:V001 的有界分块、时间归属、模型/语言复用和单临时块方向成立。
  • 当前不可读:不得据此开始实现,也不得把 V001 视为已通过方案。
  • 复审条件:提交 V002 的路径、字节数、SHA-256,并逐项映射上述两项最小修复;复审只检查阻断闭环和已冻结合同是否回退。

DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-REREVIEW-20260801-001

  • 记录时间:2026-08-01T03:08:38+08:00
  • 审计阶段:V001 HOLD 后的必要方案复审;本条只复核原 F1/F2 闭环和已冻结合同,不是实现审核或真实媒体验收。
  • 审计对象:DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001
  • 前序审计:DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-20260801-001=HOLD/2
  • 请求交接:HANDOFF-INFODEV-INFOREV-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-REREVIEW-20260801-001
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 复审方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-V002.md10715 bytes,SHA-256 BB0A7478D0225467559E9AD46730FEC73DE7824C97FE445A5E179C723AFB5473;与复审交接快照一致。
  • 未提前实现核验:transcribe_media.py SHA-256 仍为 98BF04135CFAA7E9ADDB8F7D5ED5B8141C4BDFCC6CABDB3EF3B757C85B39C91Etest_transcribe_media.py SHA-256 仍为 07761E66E8499EA1206AE1FCBF93032E52742F86EED17C3428E2F24C2306F9D2,与前序审核基线一致。

Findings

  • 无新增 finding;限定复审范围内未发现仍未闭环的阻断。

F1 闭环结论:PASS

  • V002 第 20—28 行明确把提交捕获边界扩大到 BaseException,先回滚本次已移动正式文件和本次创建的空目录;KeyboardInterruptSystemExit 等非普通异常原样重抛,普通 Exception 继续包装为 MediaTranscriptionError,且回滚失败不得静默宣告“未提交”。
  • V002 第 30—40 行冻结第 1、2、3 个文件成功移动后的 KeyboardInterrupt 注入测试,并要求正式四文件、本次创建目录和集成暂存目录均不存在;另保留普通 OSError 回滚回归。
  • 该合同足以指导实现修复前序“中断留下部分正式输出”问题;具体代码和测试结果留待实现审核验证。

F2 闭环结论:PASS

  • V002 第 42—72 行冻结外部只读 PowerShell 采样器、500 ms 周期、根 Python PID 与递归 FFmpeg 后代归属、同一采样点合计工作集、任务 PID GPU 显存、块号和临时媒体采样,并规定缺字段时 sampling_valid=false、不得宣告 PASS。
  • 逐样本、逐块和汇总证据文件及字段已经明确;RAM 增长公式固定为 max(last_3_block_ram_peaks) - max(first_3_block_ram_peaks) <= 2 * 1024^3,同时保留任务 RAM、GPU、临时块数量与大小门禁。
  • V002 第 74—84 行补齐全部 20 分钟边界 ±15 s、合法时间范围、排序和连续序号、四文件一致性、短视频 705 段回归,以及原视频大小、创建时间、修改时间、SHA-256 前后对照;缺证据即 FAIL。
  • 该证据合同足以支撑后续 19:54 与约 4 小时真实验收;实际资源数值和正确性结论留待实现后运行验证。

已冻结合同回退检查

  • V002 第 14 行保持:公开 CLI 和四文件名称不变;duration <= 1200 s 原路径;长视频 1200 s 核心、双侧 5 s 重叠、首尾裁边和中点归属。
  • 保持单任务一次加载 large-v3 / CUDA / float16、首块语言检测后复用、完整 FLAC 加最多一个临时块,以及禁止 CPU/模型降级、GUI、API、数据库、批处理和断点续跑。
  • 未发现前序已通过合同回退,也未引入超出本事项的产品或架构范围。

复审命令与外部动作

  • 核验 V002 字节数、SHA-256、V001 SHA-256及代码/测试基线 SHA-256;结果均与交接或前序审计一致。
  • 静态逐项对照 V002 第 1—6 节、前序 F1/F2 和需求第 61、79、92、95—117 行。
  • 未运行代码或测试;未读取源视频;FFmpeg 0;GPU 转写 0;4 小时媒体生成 0

Open questions

  • 无。复审通过不要求继续修改方案,也不要求增加新审批层。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • F1/F2:均已在 V002 方案层闭环。
  • 实现授权:允许 dev.developer.project 按 V002 开始最小实现、离线测试、19:54 回归和约 4 小时资源验收。
  • 结论边界:本 PASS 只批准 V002 方案,不证明代码已实现、测试已通过或真实资源指标已达标;实现与验收证据完成后仍须按事项既定入口提交后续必要审核/验收。

DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-WDDM-GPU-EVIDENCE-20260801-001

  • 记录时间:2026-08-01T04:16:06+08:00
  • 审计阶段:V002 实现后的 WDDM GPU 资源证据口径等价性确认;本条不构成实现审核、19:54 回归验收或 4 小时验收。
  • 审计对象:DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001
  • 前序方案复审:DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-DESIGN-REREVIEW-20260801-001=PASS
  • 请求交接:HANDOFF-INFODEV-INFOREV-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-WDDM-GPU-EVIDENCE-20260801-001
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev

Findings

  • 无阻断 finding。Windows WDDM 下改用任务 PID 的 GPU Process Memory(*)\Dedicated Usage 作为显存数值来源,可与 V002 的“任务 PID 显存”证据目标等价,不属于门禁放宽。

等价性依据

  • V002 第 51 行要求的是根 Python 及后代 PID 的任务归属显存,不要求必须由 NVIDIA 驱动在 WDDM 下返回数值;系统全局显存仍不得替代任务归属值。
  • NVIDIA 官方 nvidia-smi 文档明确说明 Windows WDDM 下按进程 GPU Memory Usage 不可用,因为显存由 Windows KMD 管理;因此任务 PID 可被列出但 used_gpu_memory=[N/A] 是该驱动模型的预期限制,不代表任务未使用显存。
  • Microsoft 官方说明 WDDM 的 VidMm 负责 GPU 内存管理,任务管理器 GPU 数据直接来自 VidSch/VidMm,且覆盖 CUDA 等 API;离散 GPU 的 Dedicated GPU memory 对应板载 VRAM。因此同一任务 PID 的 GPU Process Memory(*)\Dedicated Usage 是本机 WDDM 下可归属、可量化的专用显存证据。
  • 独立探针 probe.json12 个样本;同一根 PID 205488 个样本的 nvidia-smi 原始输出中出现且显存均为 [N/A],Windows 专用显存计数器在 9 个样本中返回 267214848..3387805696 bytes(峰值 3230.863 MiB),数值随模型加载阶段上升,足以证明该本机口径可用。

批准的最小采样器变更

  1. 保持 500 ms 周期及每个采样点的根 Python PID、递归后代 PID 集不变;只筛选 GPU Process Memory 中实例名精确归属于该 PID 集的 Dedicated Usage,排除 _TotalShared Usage 和系统全局显存。
  2. 同一采样点按完整计数器实例去重后求和,再由 bytes 换算 MiB;保留实例名/计数器路径及逐 PID 数值,使多适配器或 PID 复用情形可追踪。
  3. 每周期继续保存 nvidia-smi 对任务 PID 的原始出现状态和 [N/A] 状态;nvidia-smi 不再提供 WDDM 下的数值,但仍作为 NVIDIA GPU 任务 PID 归属旁证。
  4. 若 GPU 阶段 nvidia-smi 从未出现根任务 PID、Windows 计数器查询/解析失败、任务 PID 实例无法归属,或整个 GPU 阶段任务专用显存始终为 0,必须写具体原因并令 sampling_valid=false
  5. V002 的任务 GPU 峰值 < 10 * 1024 MiB 门禁、同采样点取峰值、证据文件、RAM/临时块/正确性门禁全部保持不变。

证据与外部动作

  • 探针:dev/project-dev/tmp/DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001/gpu-memory-probe/probe.json,SHA-256 5B9C54A9584BA48AB0E1A64CBCD9E8B78EC0E2E3B756BF134C97FDB2ADF15FC8
  • 待修采样器:dev/project-dev/test/monitor_transcribe_resources.ps1,SHA-256 BDC7F367B041182C820FEFEEC5C059EF6BE1221C46E02C33FA7DA35CA7E29262;当前第 213—225 行仅接受数值型 nvidia-smi 行,会把 [N/A] 错记为 0 MiB,第 331 行也未据此判无效。
  • 方案:V002 SHA-256 BB0A7478D0225467559E9AD46730FEC73DE7824C97FE445A5E179C723AFB5473;本确认只替换其第 51 行在 WDDM 下不可取得的数值来源,不修改其他冻结合同。
  • 官方依据:Microsoft DirectX Developer Blog《GPUs in the Task Manager》;NVIDIA System Management Interface 文档的 WDDM GPU Memory Usage 限制说明。
  • 本轮只读检查现有探针、方案和采样器;源视频读取 0,FFmpeg 0,GPU 转写 0,4 小时媒体生成/运行 0

结论

  • 审计状态:PASS_EQUIVALENT_EVIDENCE
  • 阻断问题数:0
  • 授权:允许开发员仅按上述口径修复外部采样器,先重跑 19:54 回归;资源证据有效后再生成并运行 4 小时验收。
  • 边界:本结论不放行当前错误的 0 MiB 证据,也不预判后续 <10 GiB、4 小时资源门禁或实现审核结果;不得扩展产品、分块、模型或接口范围。

DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-IMPLEMENTATION-EVIDENCE-20260801-001

  • 记录时间:2026-08-01T06:11:54+08:00
  • 审计阶段:最终实现、离线测试、19:54 回归与唯一一次 4 小时真实资源/正确性证据审核。
  • 审计对象:DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-IMPLEMENTATION-EVIDENCE-REVIEW-20260801-001
  • 前序方案:V002 必要复审=PASS/0;WDDM 任务 PID 专用显存等价口径=PASS_EQUIVALENT_EVIDENCE/0
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 审核范围:只检查冻结合同、实现、离线测试、资源/正确性证据、源保护和范围;未运行媒体、FFmpeg 或 GPU 转写,未修改代码、测试或既有证据。

Findings

F1 — BLOCKING / 数据与产物:两次正式证据包都缺少必交的空 stderr.log

  • 证据:权威短回归 short-regression-wddm/evidence/ 和 4 小时 four-hour-run/evidence/ 均存在 command.jsonstdout.logresource_samples.csvresource_block_peaks.csvresource_summary.jsonacceptance_evidence.json,但两个目录都没有 stderr.log
  • 根因:冻结采样器 SHA-256 B5F5AA582D68B8B53CCF217AF71748A0836B42DDEBCFB5E8F7FBD506DCAF8AD0 第 96—97 行只定义日志路径,第 177—179、347—349 行仅在实际 dequeued stderr 行出现时才 AppendAllText;成功运行 stderr 为零行时不会创建文件。
  • 合同:V002 第 59—66 行把 stdout.logstderr.log 列为两次真实运行的固定最低证据;第 87—90 行规定采样或正确性任一必填证据缺失即 FAIL、不得推断补齐。现有退出码、资源 CSV、stdout 和产物可证明运行成功,但正式固定清单尚不完整。
  • 影响边界:该问题不否定实现正确性、资源数值、源文件保护或唯一一次 4 小时运行本身;只阻断当前证据包作为完整正式交付被最终放行。

Minimal required_fixes(不运行媒体)

  1. 仅修 monitor_transcribe_resources.ps1:在启动目标进程前用 UTF-8 无 BOM 预创建空 stdout.logstderr.log,以后即使零行也能满足固定文件合同;不得改采样周期、PID 归属、资源公式或门禁。
  2. 对两次既有成功运行各补录一个 0 bytesevidence/stderr.log,SHA-256 应为 E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855。这是对当前“仅有 stderr 行时才创建文件”行为的等价规范化,不得改写其他冻结证据。
  3. dev-doc/开发执行日志.md 追加简短纠偏说明:列出两个补录路径、原采样器哈希、空文件哈希、补录原因、补录时间,并确认下列核心证据哈希保持不变;随后只需做 PowerShell parser 和现有离线测试,不需要也不得重跑 19:54 或 4 小时媒体。
  4. 复审只核对本 F1:提交新采样器字节数/SHA-256、两个空日志 SHA-256、纠偏日志入口、parser/离线测试结果,以及核心证据哈希未变对照。

已通过的实现与测试合同

  • 生产入口 transcribe_media.py=20996 bytes / 309166EEFE11A74472EA355CA4AF87F9432A15393B9ABE6D69F7F1054055DE35;公开 CLI 和四文件名称不变,duration <= 1200 s 原路径,长视频 1200 s 核心/双侧 5 s 重叠/首尾裁边/中点归属实现与 V002 一致。
  • 长路径只把单个块交给模型;模型任务内加载一次,未指定语言时首块检测后复用;块文件固定为一个并在 finally 删除;未引入 CPU/模型降级、GUI、API、数据库、批处理或断点续跑。
  • _commit_outputs 捕获 BaseException、记录实际移动文件、先回滚再对非普通异常裸 raise;普通 Exception 保持 MediaTranscriptionError。第 1/2/3 次移动后中断和普通 OSError 路径均由测试覆盖。
  • 审核员只读编译五个 Python 文件=PASS;PowerShell parser=PASS / 3546 tokens;CLI help=PASS;目标环境 unittest=14/14 PASS。测试文件 SHA-256:主测试 87BD890436789BE2F813ADC57A37168A3C5A76C7815F2DA9B2FB04D4DE9D4512,validator 测试 9E04E9F819B69CD3C621BF6E98444630F400E08A1548991A94D3A37E8913A1F1

已通过的 19:54 回归证据

  • 权威路径:dev/project-dev/tmp/DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001/short-regression-wddm/
  • exit=0266.638 s531 样本、平均间隔 0.500598 s;无分块进度,证明 1193.607125 s <= 1200 s 走原路径。
  • RAM 峰值 3587469312 bytes;同任务 PID WDDM 专用显存峰值 4432.875 MiB;GPU 原始 PID/N/A 与计数器实例归属有效。
  • FLAC=flac/16000 Hz/1 ch;TXT/SRT/JSON=705 段逐项一致;四个文件 SHA-256 与此前 MVP 真实验收产物逐一相同。
  • resource_summary.jsonacceptance_evidence.json 哈希与交接一致;原视频四项指纹未变。

已通过的 4 小时资源证据

  • 生成媒体=14400.014 s / 1168506449 bytes / C9369B48312E63E69B484D9D58CED46CCEA42B20EA46B331361F5DAC7B4DA033,位于专属任务临时根。
  • 唯一一次运行 exit=0 / 3122.885 s,小于 6000 s;stdout 进度严格为 1..12 且各一次。
  • 审核员从 6222resource_samples.csv 独立复算:根 PID 恒为 8784,elapsed 单调;combined=python+ffmpeg 全部一致;GPU 完整实例无重复、实例 PID 全在当点任务 PID 集内、实例 bytes 求和与 task_gpu_memory_mib 全部一致;nvidia-smi 根 PID 共出现 6175 个样本且均保留 [N/A]
  • 全局 RAM 峰值 3344625664 <= 12884901888 bytes;GPU 峰值 4464.875 < 10240 MiB;临时块峰值 1 / 33869856 < 524288000 bytes
  • 逐块 CSV 与原始样本的 12 组样本数和峰值逐项一致;前三块最大 RAM=1818476544,最后三块最大 RAM=2007076864,差=188600320 <= 2147483648 bytes
  • 交接列出的 resource_samples.csvresource_block_peaks.csvresource_summary.json 哈希均复核一致;无相邻暂存目录残留。

已通过的 4 小时正确性与源保护证据

  • 正式输出目录仅含四个文件;FLAC=14399.050813 s / flac / 16000 Hz / 1 ch,与媒体容差 0.963187 s <= 1 s
  • JSON=large-v3/cuda/float16/vad_filter=true;TXT/SRT/JSON 均为 8732 段,文本逐项一致,SRT 时间与 JSON 一致,序号严格 1..8732,时间合法并按 (start,end,text) 非递减,无完全重复段。
  • 1200..13200 s11 个边界全部具有 ±15 s 窗口,自动无完全重复/有序检查为 PASS;审核员逐项读取现有窗口,未发现整句重复、逆序或明显连续语音缺失。开发方人工记录含 reviewer/time/result。
  • acceptance_evidence.json=180CC1A3E52684BDB1437BD023A4601589BE802F9124A6BF162E24BEFE1DD6E2,与交接一致。
  • 审核时再次只读计算原视频:96884891 bytes / 1647A9CCDCE0C728217C45A425B55697B2939733E506D1A4A06D5109ED61BEEE,创建/修改时间与前置快照一致;未移动、重命名、覆盖或删除。

Open questions

  • 无。F1 的事实、根因和无媒体重跑闭环方式均已确定。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • 已通过:冻结实现、F1 提交中断安全、离线测试、短回归、4 小时资源数值、正确性、源保护和范围控制。
  • 未通过:固定证据清单缺少两个零行 stderr.log;完成上述纯证据/采样器最小修复前,不得向 case_analysis.media_processor 宣告最终实现与证据 PASS。
  • 重跑边界:明确无需再次运行 19:54 或 4 小时媒体;不得以本 HOLD 为由生成第二份真实运行证据。

DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-IMPLEMENTATION-EVIDENCE-F1-REREVIEW-20260801-001

  • 记录时间:2026-08-01T06:26:12+08:00
  • 审核阶段:最终实现与真实证据审核之 F1 唯一阻断复审。
  • 审核对象:DEV-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-20260801-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-IMPLEMENTATION-EVIDENCE-REREVIEW-20260801-001
  • 前序审计:DEV-AUDIT-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-IMPLEMENTATION-EVIDENCE-20260801-001=HOLD/1
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 复审范围:只核对空 stdout.log/stderr.log 预创建、两次既有成功运行的空 stderr.log 补录、纠偏日志、冻结核心证据哈希和无媒体验证;未重新审核已通过的实现、资源、正确性、源保护或范围合同。

Findings

  • 无阻断 finding。前序唯一 F1 已按批准的最小方式完整闭环,未发现合同回退或额外问题。

F1 闭环证据

  • 采样器 dev/project-dev/test/monitor_transcribe_resources.ps1=22930 bytes / 4D9912D558CDE3B51BBEBBB24013F51A9F52C1F0D99389BE1A5823F950F613C6。第 103—104 行在目标进程启动前以 UTF8Encoding(false)stdout.logstderr.log 执行空 WriteAllText;仅补齐零行日志的固定产物,不改变 500 ms 周期、PID 归属、WDDM 显存口径、资源公式或门禁。
  • 短回归 short-regression-wddm/evidence/stderr.log=0 bytes / E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855;4 小时运行 four-hour-run/evidence/stderr.log=0 bytes / E3B0C44298FC1C149AFBF4C8996FB92427AE41E4649B934CA495991B7852B855。两文件均为叶文件,修改时间为 2026-08-01T06:19:02+08:00,符合成功运行零 stderr 行的等价规范化。
  • 纠偏记录 DEV-LOG-PROJECT-INFO-LOCAL-MEDIA-TRANSCRIBE-LONG-VIDEO-OPT-STDERR-EVIDENCE-REPAIR-20260801-001 已写入 dev-doc/开发执行日志.md;该日志=64409 bytes / AE13F53E96F5194B2C8217D3A6006DA63E438088DB7365E37B5B5C407240EA1A,记录前后采样器哈希、两条补录路径、空文件哈希、补录时间与原因、无媒体重跑及核心证据未变声明。
  • 实现与测试基线未变:transcribe_media.py=20996 bytes / 309166EEFE11A74472EA355CA4AF87F9432A15393B9ABE6D69F7F1054055DE35;主测试=87BD890436789BE2F813ADC57A37168A3C5A76C7815F2DA9B2FB04D4DE9D4512;验收器=546082ED5CC387B9394956C5C0704F78AD325BA0EEA8BAC67CE36539834C2C29;验收器测试=9E04E9F819B69CD3C621BF6E98444630F400E08A1548991A94D3A37E8913A1F1

冻结核心证据未变

  • 短回归 resource_summary.json=4B7D8E068DE3B688C22659942973E63F2DA804779074A06764588157C366B73Facceptance_evidence.json=AD864182A094985366AB444901857B6AC3BA601882C5B69329107CBF715D8938
  • 4 小时 resource_samples.csv=0EAD06CBA8AAD73AA24BE14F086FB3054C0612F338DDE516961D0678065C281Fresource_block_peaks.csv=0D8F33C15FDE9E9EFB3FF54888C3C1C0068E07FC1ADFA18213F664F7ADD2EE6Bresource_summary.json=73DC90C30991730CFFE868153B5007B907C9DE39CE3F10720EAEB77E92568534acceptance_evidence.json=180CC1A3E52684BDB1437BD023A4601589BE802F9124A6BF162E24BEFE1DD6E2

独立验证与外部动作

  • PowerShell parser=PASS;目标环境 D:/Anaconda/envs/project-info-media-transcribe/python.exe -B -m unittest discover -s test -p test_*.py -v=14/14 PASS
  • 本复审只读计算文件大小与 SHA-256,并执行解析器和全模拟离线测试;媒体生成=0、媒体读取/转写=0、FFmpeg=0、GPU 转写=0

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • F1 状态:CLOSED。前序实现、短回归、唯一一次 4 小时资源/正确性证据、源保护与范围控制的已通过结论继续有效。
  • 放行:本事项可交 case_analysis.media_processor 做最终验收;无需且不得为本 F1 再次运行 19:54 或 4 小时媒体。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-DESIGN-20260801-001

  • 记录时间:2026-08-01T14:08:46+08:00
  • 审核阶段:重型最小单工具 V001 编码方案审核。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 原始消息:msg_20260801135527958_2db4804bcorrelation_id=msg_20260801135527958_2db4804b
  • 恢复唤醒:HANDOFF-INFODEV-INFOREV-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-DESIGN-MBX-INBOX-WAKE-20260801-001,仅用于消费既有 inbox 消息,不构成第二次送审。
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 需求:ai-media-processor/draft/会议录屏PPT页面提取方案_v0.1.md=7781 bytes / 1B5797C1408A172328D488EE1C66E92893053C892929437F7DB85239F404B2E7
  • 方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V001.md=7335 bytes / 67B04259A13657577EF9AF990461C062D00E56EFC29DB374A848E1C4B006C4DD
  • 当前实现动作:脚本、测试和用法均不存在;真实业务视频读取=0,FFmpeg=0,合成视频=0

Findings

F1 — BLOCKING / 算法合同:相邻帧稳定判定会累积漂移,动画与全局去重的判定优先级又可能吞掉完整页替换

  • V001 第 37 行只要求相邻样本差异低于阈值。相似关系不具传递性;渐变、慢速翻页或逐步动画可让每对相邻帧都“小变化”,但首尾已经完全不同,当前合同会把整段错误视为稳定段,并可能选出过渡中间帧。这不能满足需求第 84 行“不把翻页过渡、动画中间状态当作页面”。
  • V001 第 42 行规定候选与“任一已确认页面”近似即跳过,第 43 行才规定与最近逻辑页比较并用更完整候选替换。A初始 -> A完整 恰可能同时满足近似重复和同页动画;如果先执行全局去重,A完整 会被跳过,直接违反需求第 107 行及 V001 自己第 68、75—77 行的预期。
  • 内容分数 仅被引用,未冻结其计算语义、比较方向和同分处理,开发者无法从方案唯一确定何时“更完整”、何时保留旧页。

最小 required fixes:

  1. 稳定段除相邻差异外必须绑定段锚点或等价累计差异约束;候选窗口内样本既要相邻稳定,也要相对稳定段基准未漂移。增加“多帧缓慢渐变/慢速翻页不产出中间候选”的离线测试。
  2. 冻结分类顺序:先对最近逻辑页判定同页动画并决定替换/保留,再对其余历史页做全局返回去重;或给出能证明等价且不会让同一候选同时命中冲突动作的互斥规则。
  3. 定义不依赖 OCR 的 content_score 计算、容差和同分处理;至少保证内容明显增加时采用后一个稳定时间、明显减少时不覆盖、相同完整状态返回时不重复。保留现有 A初始 -> A完整A -> B -> A 测试并补交叉阈值用例。

F2 — BLOCKING / 流程与恢复:4 小时 FFmpeg rawvideo 管道和 BaseException 下的子进程生命周期未形成可安全实现的合同

  • V001 第 35—36 行只有“固定大小帧读取”的目标,没有规定 pipe 短读拼帧、干净 EOF、半帧 EOF、FFmpeg 非零退出和 stderr 消费方式。普通 pipe read(frame_bytes) 不保证一次返回完整帧;若按单次 read 解释帧,会错位,若 stderr 使用未消费的 PIPE,长时 FFmpeg 还可能阻塞。
  • rawvideo 不携带时间戳,V001 第 38、50 行未冻结“输出样本序号如何映射回原视频时间”以及非零起始 PTS/VFR 时的归一规则,无法保证第二阶段提取的是第一阶段选中的原帧。
  • V001 第 58 行只保证 try/finally 删除暂存目录,没有要求在 KeyboardInterrupt、读取异常或提取异常时先关闭管道、终止并等待 FFmpeg。Windows 下遗留子进程可能继续占用源或暂存文件,使清理失败;这不足以证明“用户中断不留正式目录/暂存”。

最小 required fixes:

  1. 在单脚本内冻结一个统一的受管 FFmpeg 调用边界:read_exact(frame_bytes) 循环拼满一帧;零字节且无残片才是正常 EOF;半帧 EOF、非零退出或解码错误必须失败;stderr 采用不会填满管道的可追踪方案并检查退出码。
  2. 冻结 PTS 归一和时间映射,例如扫描端显式归零时间基并令第 n 个 1 fps 输出映射到确定的源相对秒数;第二阶段使用精确定位方式提取该时间的帧。不得从无时间戳 rawvideo 隐式猜测。
  3. 任一 BaseException 路径先关闭 stdin/stdout/stderr,终止子进程、限时等待、必要时 kill 并再次 wait,再清理暂存,最后原样重抛非普通异常;普通运行错误保持明确工具错误。
  4. 增加不运行真实视频的假进程/桩测试:多次短读组成一帧、半帧 EOF、非零退出、stderr 较多、扫描/原图提取期间 KeyboardInterrupt;断言无孤儿进程、无暂存、无正式目录且原异常语义保留。

F3 — BLOCKING / 测试与证据:当前 PDF 门禁既不能证明页内容/顺序,也不能证明多页生成不累计全分辨率页面

  • V001 第 52、69、78 行仅用 pdfinfo 证明 PDF 可打开和页数。pdfinfo 不能证明第 1 页对应 slide_001.png、第 2 页对应 slide_002.png,也不能发现空白页、错图或倒序页,故无法证明需求第 70 行“PDF 页面顺序与 PNG 编号一致”。
  • V001 第 84—85 行的长迭代器测试只覆盖扫描帧不累计;两页 CLI 的 RSS 基线不能证明 PDF 在页数较多时只保留一张原分辨率图像。第 51 行虽声明流式写入,但没有相应可复验门禁。

最小 required fixes:

  1. 合成视频验收中把 PDF 各页渲染或提取为图像,逐页与对应 PNG 的确定性颜色块/像素或允许容差的感知特征比对,明确证明 PDF 内容和顺序均为 A完整,B;继续保留页数与可打开检查。
  2. 冻结 PDF writer 的内存合同:压缩后的当前页立即写入暂存 PDF,只允许保留页对象编号/偏移等小型元数据,不保存全页像素或全部压缩图像 payload 列表。
  3. 增加多页离线测试,以受控图片 opener/writer 计数或等价证据证明任一时刻最多一个解码后的全分辨率页面处于存活状态;不要求真实业务视频或复杂性能矩阵。

已通过且后续默认冻结的方案边界

  • 单视频 CLI、默认/显式输出目录、Pillow+NumPy+FFmpeg/FFprobe、无 GPU 依赖及中文路径方向与需求一致;未扩展 PPTX、OCR、人像处理、裁剪、转写、批处理、GUI、API、数据库、Skill 或阈值 CLI。
  • 扫描阶段不建立全部采样帧列表、只保留当前/前一帧、稳定段摘要及每个确认输出页的小尺寸特征,方向满足“内存不随采样帧累计”;确认页描述符按最终输出页数增长属于必要状态。
  • 正式目录同级唯一暂存、既有输出/符号链接在 FFmpeg 前拒绝、完整后一次目录重命名、并发冲突失败以及源视频只读合同在方案层可接受;F2 只要求补齐子进程先回收再清理的顺序。
  • 首次真实 PPT 录屏的启发式效果交由 case_analysis.media_processor 后续普通验收合理;本次不要求也不允许提前读取真实业务视频。

Open questions

  • 无。三个阻断均可在 V002 方案和离线测试合同中闭环,不需要改变需求、增加依赖、拆模块或扩大产品范围。

结论

  • 审计状态:HOLD
  • 阻断问题数:3
  • 当前不得开始实现。开发方应只提交覆盖 F1—F3 的 V002;复审只核对上述三项及已冻结边界是否回退,一次完成后即可决定是否放行实现。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-DESIGN-REREVIEW-20260801-001

  • 记录时间:2026-08-01T15:07:08+08:00
  • 审核阶段:V001 HOLD/3 后的 V002 限定方案复审。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 原始消息:msg_20260801150116832_0f46183ccorrelation_id=msg_20260801150116832_0f46183c
  • 恢复唤醒:HANDOFF-INFODEV-INFOREV-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V002-MBX-INBOX-WAKE-20260801-001,仅用于消费既有 V002 inbox 消息,不构成第二次复审请求。
  • 前序审计:DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-DESIGN-20260801-001=HOLD/3
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • V002:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V002.md=11772 bytes / F28F50AD07954B940684E6FA8E0ADB4EDD1EB6F9FA82DE74969C1BDC5B367F28
  • 需求及 V001 未变:需求=1B5797C1408A172328D488EE1C66E92893053C892929437F7DB85239F404B2E7;V001=67B04259A13657577EF9AF990461C062D00E56EFC29DB374A848E1C4B006C4DD
  • 当前实现动作:脚本、测试和用法仍不存在;真实业务视频读取=0,FFmpeg=0,合成视频=0

Findings

  • 无剩余阻断 finding。V002 只闭环前序 F1—F3,未发现已冻结合同回退或新增范围。

F1 闭环:PASS

  • V002 第 21—30 行为稳定段增加不可变 segment_anchor,同时要求相邻差异和相对锚点差异通过;至少 3 个样本才产出,锚点漂移中间帧不得入选,并冻结 A稳定 -> 六帧渐变 -> B稳定 只输出 A,B 的反例,闭环相邻相似的累计漂移风险。
  • 第 34—44 行定义不依赖 OCR 的 edge_densitycontrastcontent_score,冻结增加、减少与容差内同分三种更新方向。
  • 第 48—54 行把候选分类固定为“最近逻辑页动画 → 除最近页外历史返回去重 → 新页”,并同时比较最近页的可更新状态和不可变逻辑锚点;三个动作互斥,交叉阈值测试明确禁止全局去重吞掉完整页替换。

F2 闭环:PASS

  • V002 第 60—64 行冻结同源受管子进程边界:参数数组、shell=False、长时 stderr 写暂存文件、正常路径 wait/退出码检查,以及 BaseException 时关闭管道、terminate、限时 wait、kill、再次 wait、关闭句柄、清暂存、非普通异常原样重抛的顺序。
  • 第 68—74 行完整定义 read_exact 的短读拼帧、干净 EOF、半帧 EOF 和非零退出行为,不再把单次短读误当完整帧,也不存在未消费 stderr PIPE 填满风险。
  • 第 78—80 行以 setpts=PTS-STARTPTS,fps=fps=1:start_time=0 冻结 n -> n.000 s 映射,并规定输入级准确 seek、第一视频流映射、PNG 尺寸复核及 VFR/非零 PTS 合成测试。
  • 第 84—87 行补齐短读、半帧、大 stderr、非零退出及扫描/截图阶段 KeyboardInterrupt 桩测试,验证无孤儿进程、无暂存/正式目录并保留异常语义。

F3 闭环:PASS

  • V002 第 93—100 行冻结逐页 PDF writer:只保留路径、对象编号和 xref 偏移;当前页 raw RGB 与压缩 payload 立即写入暂存 PDF并在下一页前释放,禁止任何全页图像或 payload 列表。
  • 第 104—110 行规定按 Page Kids 顺序解压每页 /DeviceRGB / 8 bits / FlateDecode 图像流,与对应 PNG 的 RGB SHA-256、宽高和 A完整/B 标记逐页一致;pdfinfo 仅作为可打开/页数的并列检查,因此能够证明非空白、内容和顺序。
  • 第 114—120 行以至少 20 页的可注入 opener 计数器证明 max_active_decoded_images == 1、上一页退出后才进入下一页,并再次逐页核对 RGB 哈希;不引入真实视频或复杂 RSS 矩阵。

冻结边界回退检查:PASS

  • 单视频、默认/显式输出、1 fps、原分辨率 PNG、一个 PDF、Pillow+NumPy+FFmpeg/FFprobe、无 GPU、中文路径、同级唯一暂存和一次目录重命名均保留。
  • PPTX、OCR、人像处理、裁剪/遮挡、会议界面移除、JSON、转写、批处理、GUI、API、数据库、Skill、阈值 CLI 仍全部排除;仍限一个脚本、一个测试文件和一页用法。
  • 扫描不累计全部帧,PDF 不累计全部页面;正式输出预拒绝覆盖、并发冲突失败和源只读合同均未回退。

已授权真实样本顺序:PASS

  • 项目消息账本确认 msg_20260801144622354_1c75b06bcase_analysis.media_processor 发给 dev.developer.project,授权只读使用 G:\熊猫财经\20260729192357-2026小郑掘金产业链之算力行业付费直播-视频-1-共享屏幕.mp4,已知 H.264 / 2560x1440 / 12866.880 s / 1268392019 bytes
  • V002 第 132—138 行正确保持顺序:方案 PASS 且离线/合成稳定后,先固定源四项指纹;仅在专属任务临时根可选生成一个短片副本;短片暴露具体问题时只做单一最小修复;稳定后完整视频只运行一次;输出和外部只读资源采样证据仍只写专属临时根;结束后再次逐项核对源指纹并保留产物供请求方只读复核。
  • 该追加只改变实现后的验收输入与顺序,不改变产品 CLI、算法输出、阈值接口或正式产物合同;实现审核与最终请求方验收的既有角色分离仍有效。

复审命令与外部动作

  • 只读核对 V002/V001/需求字节数与 SHA-256、前序审计、项目账本、消息事件和实现文件不存在状态;未执行代码、测试、FFmpeg、合成视频或真实视频读取。
  • 当前治理文档哈希与前序审核一致;复审未修改方案、实现、测试、执行日志或其他被审产物。

Open questions

  • 无。阈值真实效果是实现与已授权真实样本验收项,不构成继续阻断方案的理由。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 前序 F1/F2/F3:全部在 V002 方案层闭环。
  • 实现授权:允许 dev.developer.project 严格按 V002 开始单脚本、测试和用法实现,并按既定离线 → 合成 → 可选短片 → 完整视频一次的顺序收集证据;不得扩大产品范围。
  • 结论边界:本 PASS 仅批准方案,不证明代码已实现、测试已通过或真实样本结果已达标;实现与证据完成后仍须按既定入口提交必要实现审核,PASS 后再交 case_analysis.media_processor 最终功能验收。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-IMPLEMENTATION-20260801-001

  • 记录时间:2026-08-01T16:28:44+08:00
  • 审核阶段:V002 实现、离线测试与合成证据的必要独立审核。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 原始消息:msg_20260801153518062_c0082f2ecorrelation_id=msg_20260801153518062_c0082f2e
  • 本轮提示只用于唤醒既有 MB-X inbox 消息,不构成第二次送审。
  • 前序方案审计:DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-DESIGN-REREVIEW-20260801-001=PASS/0
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • V002:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V002.md=11772 bytes / F28F50AD07954B940684E6FA8E0ADB4EDD1EB6F9FA82DE74969C1BDC5B367F28
  • 实现:dev/project-dev/extract_ppt_slides.py=24973 bytes / 9AC4A9D05B3779374104A2C5DD11A9B29922B645A4098F2DDE73D85E21371EBA
  • 测试:dev/project-dev/test/test_extract_ppt_slides.py=20201 bytes / F5040F9AC53195EE81184030608BA6D12F4FD6A0C3EC50B95815A42865F782B7
  • 用法:dev-doc/project-doc/会议录屏PPT页面提取工具.md=3235 bytes / 9C7896A6BEC446343A0DF2FFC5EBD46E83D14C3ECB27A4D42B3CE40B95FB8C83

Findings

F1 — BLOCKING / 代码与正式产物合同:实现把已冻结的 pages/ 与视频名 PDF 布局改成了输出根目录文件

  • V001 第 13、56 行已冻结正式目录为 pages/slide_001.png...<视频名>.slides.pdf,V002 第 13—15 行明确这些已通过边界继续冻结且不得增加或改写业务产物合同。
  • 实现第 531 行把 PNG 直接写为暂存根的 slide_*.png,第 669 行把 PDF 固定写为 slides.pdf;用法文档第 27 行及合成产物也把这一回退固化为公开行为。当前合成证据实际为 合成验收.slides/slide_001.pngslide_002.pngslides.pdf,不是获批接口。
  • 这是正式消费者可见的输出路径和文件名错误,不是命名偏好;即使 PNG/PDF 内容正确,也不能按错误接口放行真实验收。

最小 required fixes:

  1. 仅调整暂存内布局:创建 pages/ 并把连续编号 PNG 写入其中;PDF 写为 <源视频 stem>.slides.pdf,成功后仍以一次同级目录重命名提交,不改变算法或 CLI 参数。
  2. 同步测试和一页用法;用合成视频重新证明正式目录只含获批的 pages/ 与视频名 PDF、PNG 连续且 PDF 逐页 RGB/顺序不变。无需读取、截取或运行真实业务视频。

F2 — BLOCKING / 代码与路径安全:先 resolve() 再检查使“输出符号链接预拒绝”在断链场景失效

  • V001 第 27 行及首次审计已通过边界要求:输出存在或为符号链接时必须在任何 FFmpeg 动作前拒绝;输入必须是普通文件。该边界在 V002 第 13 行继续冻结。
  • _validate_paths() 第 639、643 行先对输入/输出执行 resolve(strict=False),第 647 行才对解析后的目标调用 lexists()。这样会丢失调用者提供路径本身的链接身份:输入文件链接会被当作目标普通文件接受;输出若是指向尚不存在目标的断链符号链接,解析后的目标 lexists=False,随后可能在链接目标位置创建暂存并提交,而不是拒绝该链接路径。
  • 当前 test_existing_output_is_rejected_before_external_process 仅覆盖已存在目录,没有覆盖存活/断链输出链接,也没有证明输入普通文件边界。

最小 required fixes:

  1. 在跟随链接或规范化到目标之前,对调用者给出的绝对词法路径做 lstat/is_symlink/lexists 等价预检;拒绝输入链接/非普通文件以及任何已存在、存活或断链的输出链接,再进入 FFprobe/FFmpeg。父目录合法性和同级暂存规则保持不变。
  2. 增加不依赖真实媒体的预检测试,至少覆盖已存在目录/文件、存活输出链接、断链输出链接和输入链接;环境不能创建 Windows 符号链接时可用受控桩证明分支,但不得以权限不足跳过合同。

F3 — BLOCKING / 代码与测试:失败包络未完整覆盖,V002 要求的两个阶段中断证据被拆散后没有证明主流程清理

  • V002 第 60—64、82—87 行要求两个 FFmpeg helper 的整个受管边界都遵守 BaseException 清理/普通异常包装,并要求在扫描阶段和原图提取阶段分别注入 KeyboardInterrupt,同时证明子进程回收、暂存/正式目录不存在和原异常类型不变。
  • _run_file_command() 第 137 行与 scan_video() 第 443 行在各自 try 之前打开 stderr 文件;打开失败不会进入该 helper 的普通异常包装。extract_slides() 第 657 行又在清理 try 之前创建暂存目录;第 676 行的并发提交 OSError 清理暂存后仍作为裸系统异常越过只捕获 SlideExtractionError 的 CLI。上述路径没有实现方案所称的统一明确工具错误/清理包络。
  • 两个 test_keyboard_interrupt_reaps_* 只分别调用底层 helper,未断言正式目录和主流程暂存;test_baseexception_removes_staging_and_leaves_no_formal_output 又只在 probe_video 注入中断、没有子进程。三项测试拼在一起仍没有按 V002 门禁证明“扫描中断”和“原图提取中断”各自贯穿完整主流程后同时满足回收与目录清理。

最小 required fixes:

  1. 把 stderr 文件打开、子进程启动/回收和句柄关闭纳入同一受管异常边界;把暂存创建与最终目录提交纳入可清理、可定位的主流程错误边界。普通文件/并发提交错误应转为含阶段的 SlideExtractionError 或等价用户可定位错误;KeyboardInterrupt/SystemExit 仍原样重抛,且清理错误不得替换原非普通异常。
  2. 增加两个完整主流程离线测试:分别在扫描和原图提取期间注入 KeyboardInterrupt,记录 close -> terminate -> timed wait -> 必要时 kill -> wait,并在同一用例断言子进程已退出、暂存/正式目录不存在、原异常类型不变;再覆盖 stderr 文件打开失败和提交冲突的明确错误/清理。无需任何真实媒体重跑。

已通过且冻结的实现部分

  • F1 算法主体已按 V002 实现:不可变稳定段锚点、相邻/锚点双约束、anchor_drift 反例、edge_density + 0.25 * contrast 内容分数,以及最近页动画 → 历史去重 → 新页的互斥顺序均有对应测试。
  • F2 的 read_exact 短读/干净 EOF/半帧 EOF、stderr 文件重定向、正常 wait/退出码、setpts=PTS-STARTPTS,fps=fps=1:start_time=0、输入级准确 -ss 和 VFR/非零 PTS 合成映射通过复验;本次 F3 只阻断尚未纳入完整失败包络与主流程门禁的路径。
  • F3 PDF 主体已按 Page Kids 顺序写 /DeviceRGB / 8 bits / FlateDecode 图像流,逐页 RGB 与 PNG 一致;20 页 opener 的 max_active=1 通过。PPTX/OCR/人像/裁剪/JSON/GUI/API/数据库/批处理/转写/Skill 等排除项未回退。

独立验证与证据

  • Python=3.12.7,Pillow=10.4.0,NumPy=1.26.4;FFmpeg/FFprobe=2024-12-19。源码/测试 compile()=PASS,CLI help=PASS
  • python -B -W error::ResourceWarning -m unittest dev/project-dev/test/test_extract_ppt_slides.py -v=15/15 PASSpython -B -W error::ResourceWarning -m unittest discover -s dev/project-dev/test -p "test_*.py" -v=34/34 PASS
  • 既有合成源只读复核:3875 bytes / 41BBCE50D3E5B28D82239A9061A27F4D8301ADD112C4D1154F05730542E5E06A,FFprobe=15.000000 s / 640x360;PNG=2,PDF 解压页=2,两页 RGB SHA-256 均与对应 PNG 一致,尺寸均为 640x360。既有 PDF 渲染页目视为 A完整/B,无空白、错序或裁切。
  • Windows 当前会话无创建符号链接权限(独立动态探针返回 WinError 1314);F2 依据已冻结合同、Path.resolve(strict=False)/lexists 的确定语义和缺失测试作静态判定,不把环境权限不足当作通过证据。
  • 本轮只运行离线桩、临时 VFR/合成视频测试并只读检查既有合成证据;真实业务视频读取=0、截取=0、完整运行=0,未访问其路径或元数据。

Open questions

  • 无。三项阻断均可由单脚本、单测试文件、一页用法及合成证据的最小修复闭环,不需要修改 V002、扩展产品范围或运行真实业务视频。

结论

  • 审计状态:HOLD
  • 阻断问题数:3
  • 当前不得进入可选短片或完整真实视频验收。开发方只需完成 F1—F3 的最小代码/测试/用法修复并重跑离线与合成证据,再按原消息链提交限定复审;已通过的算法、时间映射和 PDF 内容合同不得回退。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-IMPLEMENTATION-REREVIEW-20260801-001

  • 记录时间:2026-08-01T17:33:14+08:00
  • 审核阶段:首次实现 HOLD/3 后仅复审 F1—F3 的限定实现复审。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 原始消息:msg_20260801172720145_4e8aa710correlation_id=msg_20260801172720145_4e8aa710
  • 本轮提示只用于唤醒既有 MB-X inbox 消息,不构成第二次复审请求。
  • 前序实现审计:DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-IMPLEMENTATION-20260801-001=HOLD/3;前序回执=msg_20260801163131253_03ae58a1
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 实现:dev/project-dev/extract_ppt_slides.py=26791 bytes / 96348DF5B9C88B79A4E401F160E76EC444A1D2DF302AE1A8A868F8DCD3BE3662
  • 测试:dev/project-dev/test/test_extract_ppt_slides.py=25590 bytes / 9D78AD3850D7864E46C6A10C1364AD463090EBBED224FB2BE57BD964A66DD162
  • 用法:dev-doc/project-doc/会议录屏PPT页面提取工具.md=3372 bytes / 8FA1335973D5F84070DF5706C53C8CDDED8F92CC97DADEECA96B0B64EE7F3052

Findings

F3-R1 — BLOCKING / 代码与测试:stderr 句柄关闭失败仍会替换原 KeyboardInterrupt/SystemExit

  • 前序 F3 required fix 明确要求“KeyboardInterrupt/SystemExit 原样重抛且清理错误不得替换原非普通异常”。当前 _attempt_reap() 已保护子进程回收错误,但 _run_file_command() 第 173—175 行和 scan_video() 第 506—508 行仍在 finally 中直接执行 stderr_handle.close(),没有保存/合并关闭错误的保护。
  • Python 的 finally 异常会覆盖正在传播的异常。独立桩让目标进程首次 wait()KeyboardInterrupt、回收成功、随后 stderr handle 的 close()OSError("stderr close denied"),实际观察为 observed_exception_type=OSError,原中断类型被替换。这是前序同一 F3 的未闭环分支,不是新增审核范围。
  • 当前 test_cleanup_error_does_not_replace_keyboard_interrupt 只让 terminate() 抛清理错误,未让 stderr 关闭失败;20/20 因而没有覆盖该确定性反例。相同问题同时存在于文件输出 helper 与扫描 helper。

最小 required fixes:

  1. 仅把两个 helper 的 stderr 关闭纳入与 _attempt_reap 等价的受保护清理:原异常为 KeyboardInterrupt/SystemExit 时,关闭失败不得替换原类型;原异常为普通异常时可附加有界清理错误;正常路径关闭失败必须转为含当前阶段的 SlideExtractionError 或等价明确工具错误。
  2. 增加不使用媒体的关闭失败桩测试,至少证明文件输出 helper 和扫描 helper 在原 KeyboardInterrupt 下均保留原类型,并证明正常/普通失败路径的关闭错误不会以无阶段裸 OSError 泄漏。无需改 F1/F2、算法、PDF writer、CLI 或用法,无需重跑合成/真实媒体。

F1 闭环:PASS

  • 正式输出已恢复为 pages/slide_001.png...<source_stem>.slides.pdfextract_original_pages() 在暂存根创建 pages/,PDF 使用源视频 stem 命名,完整后仍只执行一次同级目录 rename
  • 新合成产物根只含 pages/合成会议录屏.slides.pdf;2 张连续 PNG 与 2 个 PDF Page Kids 的 RGB SHA-256、顺序和 640x360 尺寸逐页一致。F1 不再阻断。

F2 闭环:PASS

  • _absolute_lexical() 使用 abspath 形成不跟随链接的绝对词法路径;输入先拒绝 is_symlink/非普通文件,输出在解析目标前以 lexists 拒绝已存在文件、目录及存活/断链链接,均发生在任何 Popen 前。
  • 单测覆盖已存在文件/目录、存活/断链输出链接受控桩和输入链接,均断言外部进程未启动。F2 不再阻断。

F3 已闭环部分

  • stderr 打开已移入 helper try;子进程回收普通错误不再替换原中断;暂存 mkdir、提交竞争和阶段错误已进入主流程包络。
  • 扫描 read 与原图提取 wait 的两个完整 extract_slides() 中断用例均证明子进程 close/terminate/wait、无暂存/正式目录及原 KeyboardInterrupt;提交冲突与 stderr 打开失败均有明确错误测试。仅 F3-R1 所述句柄关闭失败分支仍未闭环。

独立验证与外部动作

  • compile()=PASS;CLI help=PASS
  • python -B -W error::ResourceWarning -m unittest dev/project-dev/test/test_extract_ppt_slides.py -v=20/20 PASSpython -B -W error::ResourceWarning -m unittest discover -s dev/project-dev/test -p "test_*.py" -v=39/39 PASS
  • 新合成证据只读复核:源=3875 bytes / 41BBCE50D3E5B28D82239A9061A27F4D8301ADD112C4D1154F05730542E5E06A,FFprobe=15.000000 s / 640x360;PNG=1900/2290 bytes,PDF=4328 bytes / 5E6F5BFC5432045728967EF2A3B31C16CE9E4F0418891395C4C6B77013554F88,根布局、2 页尺寸与逐页 RGB 均 PASS。
  • 独立关闭失败反例只使用 Python 桩对象和 mock,无文件或媒体输入。真实业务视频读取=0、截取=0、完整运行=0,未访问其路径或元数据。

Open questions

  • 无。唯一剩余阻断可由极小 helper 清理修复和离线桩测试闭环,不需要修改方案、产品合同或证据顺序。

结论

  • 审计状态:HOLD
  • 剩余阻断问题数:1
  • F1=CLOSED;F2=CLOSED;F3=PARTIAL / F3-R1 OPEN
  • 当前仍不得进入可选短片或完整真实视频验收。开发方只需修复 F3-R1 并提交 F3-R1-only 限定复审;F1/F2、算法、时间映射、PDF 内容和排除项不得再改,且无需重跑合成或真实媒体。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-IMPLEMENTATION-F3-R1-REREVIEW-20260801-001

  • 记录时间:2026-08-01T18:23:01+08:00
  • 审核阶段:前序 HOLD/1 后的 F3-R1-only 限定实现复审。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 原始消息:msg_20260801180914484_3f58002dcorrelation_id=msg_20260801180914484_3f58002d
  • 本轮提示只用于唤醒既有 MB-X inbox 消息,不构成第二次复审请求。
  • 前序审计:DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-IMPLEMENTATION-REREVIEW-20260801-001=HOLD/1;前序回执=msg_20260801174041344_38dc2a9e
  • 执行方:dev.developer.project / infodev
  • 独立审核方:dev.reviewer.project / inforev
  • 实现:dev/project-dev/extract_ppt_slides.py=27482 bytes / 052F5B3BA40EA6C1BB87AF9A7BB4E9C50A84C5A45929540F23606582D30D7D1B
  • 测试:dev/project-dev/test/test_extract_ppt_slides.py=29015 bytes / 35CB570ACC6C9EE3AB25EB9B1B15C11691F0902AE23314445B645A1BA3760484
  • 用法未变:dev-doc/project-doc/会议录屏PPT页面提取工具.md=3372 bytes / 8FA1335973D5F84070DF5706C53C8CDDED8F92CC97DADEECA96B0B64EE7F3052

Findings

  • 无剩余阻断 finding。仅核对 F3-R1;F1/F2、算法、时间映射、PDF、布局、链接和排除项未重新审核。

F3-R1 闭环:PASS

  • _run_file_command()scan_video() 均新增 active_error: BaseException | None。主流程一旦进入 except BaseException 即记录原异常;finally 中 stderr close() 的普通错误只有在 active_error is None 时才转换为带阶段的 SlideExtractionError,已有 KeyboardInterrupt/SystemExit 或普通主异常不会被关闭错误替换。
  • _attempt_reap() 的既有合同未回退:子进程清理普通错误不替换非普通主异常;正常或普通运行错误仍保留阶段语义。
  • 新增离线桩同时覆盖文件输出 helper 与扫描 helper:wait/read -> KeyboardInterrupt 后 stderr close -> OSError,两者均保留 KeyboardInterrupt;正常成功后的 close 错误转为“关闭 stderr 失败”的阶段错误;非零 exit=7 后 close 错误仍保留含阶段的非零退出错误。

独立验证与外部动作

  • 两个提交文件 compile()=PASS
  • 仅运行三个无媒体目标桩:test_cleanup_error_does_not_replace_keyboard_interrupttest_stderr_close_error_preserves_interrupt_in_both_helperstest_stderr_close_error_is_staged_on_normal_and_ordinary_failure=3/3 PASS,并启用 ResourceWarning 作为错误。
  • 独立桩复算:wait -> KeyboardInterrupt、回收成功、stderr close -> OSErrorinterrupt_probe=KeyboardInterrupt;无主异常且 close -> OSErrornormal_close_probe=SlideExtractionError,消息含 probe-stage关闭 stderr 失败
  • 开发方提交的完整离线回归为目标 22/22 PASS、project 41/41 PASS;本限定复审遵照请求未重跑包含合成/VFR 视频的完整套件,也未读取既有媒体证据。
  • 真实及合成媒体读取=0、截取=0、运行=0;未访问任何媒体路径或元数据。
  • 并发新增开发员的治理配置不属于本事项授权范围,本审核未修改或修复。复审结束前只读执行 mbx validate --project project-info --governance 时当前状态=OK / warnings=0,该瞬时结果不冒充对并发管理变更的审核。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • F3-R1=CLOSED;结合前序 F1/F2 已关闭结论,首次实现审核的三个阻断均已闭环。
  • 放行边界:允许 dev.developer.project 按 V002 已授权顺序进入真实样本验收;本 PASS 不替代 case_analysis.media_processor 对真实页面效果、资源、源指纹和最终功能的验收,也不授权本审核员或开发员处理并发治理配置。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-20260801-001

  • 记录时间:2026-08-01T22:41:43+08:00
  • 审核阶段:project 级股票估值端到端协调层 V2 重型方案首次独立审核。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V002-20260801-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V002.md=17465 bytes / D0F69CE0B1CD4338C4318D4B920E53412EA96E42CA28F814AFE41CEE3C07F3F3,与交接快照一致。
  • 接管记录:ai-infodev-2/worklog/2026-08-01-stock-valuation-v2-takeover.md=1437 bytes / 09A634CF4B51F534C902C6D3C96B4C86856CB28B6154BDC7EE41B86CFA9606C5
  • 前序方案:dev-doc/ana-doc/开发方案/CODE-DESIGN-ANA-STOCK-VALUATION-PIPELINE-V2-V001.md=16980 bytes / 0F24A636E4C6E22E7792746447E3E837A11DFCCACC275E6936551762D44C574D;无独立 PASS,本轮不把其视为已审核基线。
  • 外部动作:V2 实现读取/创建=0ana-dev 修改=0;网络请求=0;真实或 fixture 运行=0。本轮仅做静态方案、治理记录和既有 V1 公共合同的只读核对。

Findings

F1 — BLOCKING / 单一实施权属:V002 声明已接管,但全局事项、计划和旧阻塞记录仍把同一 task 标成 ana 角色的活动事项

  • V002 第 13—17 行已经正确选择 project 落点并把 V001 降为历史证据;但 dev-doc/开发事项总纲.md 第 697—705 行、dev-doc/开发事项计划.md 第 788—797 行仍把当前方案指向 V001,负责人/审核员仍为 dev.developer.ana.cai / dev.reviewer.ana.cai,状态仍为旧方案待审。
  • DEV-ISSUE-ANA-STOCK-VALUATION-V2-REVIEW-SESSION-20260801-001 仍是 OPEN_BLOCKING_IMPLEMENTATION,关闭条件是管理员修复或正式改派;现有接管日志和本次原生交接证明已发生改派,但正式事项链尚未追加该事实。仅在 V002 内自称“取代”不足以让另一活动计划、旧 inbox 请求和新 project 实施形成单一真相,存在双实现或双审核风险。

最小 required fixes:

  1. 以 append-only 方式在事项总纲、事项计划和问题记录追加同一 task 的正式接管/替代记录:引用本次原生委派或管理授权,固定新 owner/reviewer、project 代码/测试/文档/审计落点,标记 V001 与旧 ana 审核请求为历史/已替代、ana-dev 全部只读,并关闭旧会话阻塞记录。
  2. 不改写历史 V001,不删除旧消息;V003 只引用上述唯一当前入口。若当前开发角色无权关闭管理记录,先由 project.admin 代写该最小治理闭环;闭环前不得实现。

F2 — BLOCKING / V1 只读桥接:方案点名了公共函数,却没有冻结实际可调用签名、注册表解析和退出码映射

  • 只读核对当前 V1:run_pipeline(snapshot_path, output_dir, source_registry_path, *, force=False) 强制需要 source_registry_pathcompute_valuation(snapshot, registry) 强制需要 registry。V002 第 86、125 行只说调用 run_pipelineload_snapshotcompute_valuation,没有说明 V2 如何解析并传入 V1 的 source_registry.json,也没有冻结所加载模块必须来自 dev/ana-dev/stock_valuation_pipeline/
  • V1 run_pipeline 返回状态对象,不返回进程退出码;退出码 0/2/3 是 V1 cli.py 对成功、InputErrorOSError/json.JSONDecodeError 的映射。V002 宣称“保留退出码”,但未给桥接异常表,因此不同实现可产生不兼容结果。若通过复制 CLI/公式来补洞,又违反单实现边界。

最小 required fixes:

  1. 在 V003 冻结 v1_bridge 的完整调用表:从仓库相对路径解析 V1 包与默认 registry;记录实际加载模块路径、V1 版本/引擎指纹和 registry 哈希;分别列出 --inputrun_pipeline(..., source_registry_path, force) 与 judgment 模式的 load_snapshot -> load registry -> compute_valuation(snapshot, registry) 参数、返回和异常映射。
  2. 明确复现 V1 CLI 的 0/2/3 语义而不复制计算/校验/报告代码;测试同时证明加载路径确为只读 V1、V1 三件套及 GENERATED/REUSED 与直接 CLI 一致、judgment 数值对象与直接公共函数一致。V1 公共合同不匹配时 fail-fast 并停止,不做第二实现。

F3 — BLOCKING / 四类公开提供者:目前只冻结“类别”,未冻结可审计的 provider registry 与字段取得合同

  • V002 第 147—161 行描述法定公告、行情、结构化财务、机构预测的职责,但没有列出实际 provider ID、域名/端点、请求参数、字段路径、日期字段、单位/缩放、支持市场、主备顺序或解析版本;计划中的 provider_registry.json 尚不存在,也未作为送审附件冻结。
  • 当前 V1 registry 对 quote_providerprofessional_databaseinstitution_aggregator 仍是泛型且 allowed domains 为空,不能替代 V2 的网络 allowlist。由开发时临场选站会让 HTTPS 限制、A1 回链、4/3 forecast gap、90 秒请求数和真实 smoke 都不可预测,也无法在方案审核时确认未使用登录/付费/受限来源。

最小 required fixes:

  1. 在 V003 内或以带 bytes/SHA-256 的随附 registry 草案冻结首期实际提供者:每类至少一个明确 provider,机构预测至多两个;列 provider ID、公开域名和协议、端点/方法/规范化参数、支持市场、权威日期、字段映射、原始单位与换算、响应类型/上限、adapter version、A1/B1/B2 等级、核心/非核心和确定的回退/停止顺序。
  2. 对每个 provider 固定最小成功、空数据、4xx/5xx、字段漂移与 as-of 过滤 fixture;未知域名或未登记回退必须在发请求前拒绝。不得把“另一公开站点”作为运行时自由选择。

F4 — BLOCKING / 90 秒硬预算:方案允许截止后等待在途请求,与自身验收门禁直接冲突

  • V002 第 169 行规定达到 90 秒后“等待中的请求依自身超时结束”,因此在截止前刚开始的请求仍可继续 20 秒并再叠加重试/退避;ThreadPoolExecutor 的普通退出也会等待运行中的 future。第 263 行却要求外站异常“必须在预算内结束”,两者不能同时成立。
  • 连接 8 秒、读取 20 秒和最多两次重试只限制单次动作,不能自动形成 acquisition 级绝对截止;当前设计也未说明流式读取、DNS/连接、退避和重试如何扣减剩余预算。

最小 required fixes:

  1. 用单调时钟冻结唯一 network_deadline = network_started + 90s;每次请求、读取循环、退避、重试和 provider 二次搜索都先检查剩余预算,并把本次总超时裁剪到剩余时间。截止后不得创建新请求,所有在途调用必须按同一 deadline 协作返回,协调层不得因 executor shutdown 再无界等待。
  2. 遥测保存 budget start/deadline/end、每 provider/request 消耗和超时 gap;离线阻塞服务器/桩覆盖四 worker、截止前启动、重试退避和退出清理,证明整个机械网络阶段在冻结容差内结束,而非只证明“停止提交新 future”。

F5 — BLOCKING / 内容寻址缓存与公司基线:complete=true 不是可复用性的充分语义,指纹和负缓存合同缺失

  • V002 第 194—198 行没有定义 request fingerprint 的规范化前像;不同参数顺序、请求体、provider/adapter、ticker/as-of 或 fixture/real 来源可能碰撞或误复用。
  • 请求索引同时保存 HTTP/业务状态与 complete=true,但复用门禁没有要求 HTTP 成功、解析/schema 成功或 ProviderResult 可用。于是完整写下来的 404、5xx、超时页、字段漂移响应或 GAP/BLOCKED 也可能被永久视为有效命中,后续复评不会重新取得数据。
  • 单个 baseline.json 的 schema/version、baseline as-of、watermark、字段来源集合及“自身哈希”前像未冻结;也未定义从较新基线回跑较旧 as-of、并发写同一公司或部分动态模块刷新失败时的保留/回退规则。

最小 required fixes:

  1. 冻结 request fingerprint 的规范化字段和编码,至少覆盖 provider/adapter version、method、canonical URL/query/body、ticker、as-of、数据种类及 fixture 身份;原始 blob 可归档失败响应,但可复用逻辑索引必须把传输完成、允许的 HTTP 状态、内容类型、哈希、解析/schema、as-of 与 provider semantic status 分开记录。
  2. 明确负结果只按有界 TTL/本次运行使用或必须重试,不得用 complete=true 永久复用;冻结 baseline schema/version/as-of/watermark/source hashes/data hash、原子并发提交和新旧 as-of 选择规则。增加 404/5xx/字段漂移、哈希篡改、较新基线回跑较旧 as-of、局部刷新失败及并发提交测试,始终保持字段到 A1 document ID/raw hash 的回链。

F6 — BLOCKING / --force 原子替换:只有目标描述,没有可验证的目录交换与 BaseException 回滚状态机

  • V002 第 249—254 行说明 staging、manifest-last 和备份交换,但未冻结 Windows 下 output -> backup -> staging -> output -> remove backup 的逐步所有权,也未说明在第一次/第二次 rename 后遇到 KeyboardInterrupt/SystemExit、回滚自身失败或备份清理失败时哪个目录为正式结果、原异常如何保留。
  • 失败目录命名和输出路径预检也未处理既有文件、符号链接/reparse point、同名 .failed-* 或 backup 冲突。实现者无法据此证明旧完整结果永不丢失、半成品永不冒充正式目录。

最小 required fixes:

  1. 冻结 absent-output 与 force-output 两条目录状态机、每一步唯一 owner、预检和冲突处理;提交边界捕获 BaseException,在已移动旧目录而新目录未成功就位时优先恢复旧目录,清理失败不得替换原 KeyboardInterrupt/SystemExit,只有新目录成功就位后才允许清除备份。
  2. 离线注入每个 mkdir/write/manifest/第一 rename/第二 rename/恢复/清理点,逐项断言旧输出字节哈希、正式目录唯一性、staging/backup/failed 归属、COMPLETE manifest 不外泄和原异常类型。默认拒绝存在的文件、目录及链接必须发生在网络前。

F7 — BLOCKING / 终态、正式产物与双墙钟:缺少可消费的状态矩阵,且 staged metrics 无法证明“到提交完成”的墙钟

  • V002 分散列出部分产物,但没有按 COMPLETE / COMPLETE_WITH_GAPS / DATA_READY_NEEDS_JUDGMENT / BLOCKED / FAILED 冻结必有、可有、禁止文件及 manifest/status/CLI exit code;尤其无 judgment 虽禁止 V1 两件套,却未固定 16 节报告、QA、source evidence、gap、runtime 和 manifest 的确切文件名及成功退出语义。
  • --task-start 只标为 ISO-8601 可选,没有时区、未来值、来源或默认策略;阶段耗时也没有要求单调时钟。任意未来 task-start 可制造负值,系统时钟跳变可破坏阶段和 task/process wall。
  • runtime_metrics.json 在 staging 中、manifest 又必须最后哈希;若其终点是第 258 行的 commit_ready_at,就尚未包含目录 rename 的提交完成。提交后再改 metrics 又会破坏第 227 行的 manifest 哈希门禁。当前合同没有解释如何同时满足原子包与“所有终态记录到最终提交的 task/process wall”。

最小 required fixes:

  1. 给出终态矩阵:每个状态的 CLI exit code、stdout 最小 schema、正式/失败产物精确文件名、manifest status/complete、必有/禁止项;固定 DATA_READY_NEEDS_JUDGMENT 是预期数据终态而非伪 COMPLETE,BLOCKED/FAILED 必须非零且不可留下正式 COMPLETE 包。
  2. 冻结 task_start 的带时区解析、arg|process_start 来源、不得晚于 process start 的校验与原值留证;wall timestamp 用带时区 UTC/本地值,所有 duration/budget 用单调时钟。
  3. 明确 commit_ready_at 与实际 commit_finished_at 的权威终点及落证方式,使提交后 task/process wall 可审计且不重写已被 manifest 哈希覆盖的文件;正常、data-ready、blocked、failed、force rollback 各测双墙钟非负、阶段和总耗时关系、最终 stdout/receipt 与 committed manifest 的关联。

F8 — BLOCKING / 验收可复算性:铖昌 fixture、V1 10/10 与真实 smoke 还没有冻结输入快照、期望值、命令和证据包

  • V002 第 277—291 行只写“与既有 fixture 一致”和“001270.SZ 或另一只深市股票”,没有列基线文件哈希、关键期望值/容差、fixture request map 或真实两次运行的隔离缓存/输出命令。实现方可在生成 fixture 时同时改变输入与 expected,测试仍会自洽通过。
  • 当前可用只读基线为:铖昌 snapshot=10585 bytes / 4C27EE81A670BFA8BBD1E2DFB03A9730F6940D7A340D410D232585C57598A138,V1 results=9766 bytes / 27671D42A75C82125B893B3374E27497E33B929BB1AFEFA61A5D3370BC446559;V1 测试=7231 bytes / C1ECD2A8C8C0C9131C3E93B1E384616508314CB2843571D169876CA155D171CD,长城 fixture=7142 bytes / 06AB6A7C45C2E43F71654C616F15A826B21E468C4BA72AFB0B253C9DD89FACD8。V002 未把这些或等价批准快照固定到验收前像。

最小 required fixes:

  1. 在 V003 冻结铖昌 fixture 的来源文件 bytes/SHA-256、request fingerprint→fixture response 清单、judgment overlay、关键数值的精确值/容差,以及 4 汇总/3 明细只形成一个 gap 的 expected;expected 必须来自独立只读基线,不能由被测 V2 在测试时生成。
  2. 冻结 V1 10/10 的测试入口和基线快照,并同时运行直接 V1 与 V2 bridge 比较。
  3. 冻结 L4 的首选 ticker/as-of、空缓存冷跑与同缓存复跑的两条命令、允许换股的唯一条件,以及必须留存的 stdout/stderr/runtime、request indexes、raw hashes、provider/gap、A1 links、cache/baseline diff 和 90 秒证据;真实值可随站点变化,但来源身份、日期、单位、预算、复用与缺口真值不能省略。该修订只冻结后续验收,不授权现在联网或运行。

已通过且冻结的方案部分

  • project 代码/测试落点、ana-dev 只读、不复制 V1 公式的总体方向正确;F1/F2 要求的是把正式权属与可调用边界补成单一、可执行合同,不授权回到 ana 实现。
  • 无 judgment 时固定 DATA_READY_NEEDS_JUDGMENT、不构造伪 V1 snapshot/results、不输出方向性价格结论;有 judgment 时禁止覆盖价格、股本、法定利润、日期和 A1 身份。这一两阶段边界通过,不得回退。
  • 四类来源、可信信源停止条件、publish/data 双日期 as-of 禁止未来信息、字段级 A1 回链、机构汇总 4/明细 3 只形成一个 gap、16 节顺序、统一数值源和自动 QA 的业务方向通过;F3—F5 仅要求补足实际 provider/deadline/cache 可执行细节。
  • 不扩展 GUI、API、数据库、服务、批处理、交易指令、付费/登录来源或 V1 公式修改;原操作手册仍须管理员单文件授权或代同步,该文档权限事项不阻断 project 方案返修。

Open questions

  • 无。上述八项均可通过 append-only 治理闭环和 V003 方案/随附 registry 的最小返修解决,不需要创建 V2 代码、读取网络或修改 ana-dev

结论

  • 审计状态:HOLD
  • 阻断问题数:8
  • 当前不得创建 V2 代码、测试或 fixture,不得修改 ana-dev,也不得开始真实网络 smoke。开发方应一次闭环 F1—F8 后提交 V003 限定复审;已通过的无 judgment、16 节报告、A1/as-of、4/3 forecast gap 与范围排除项不得回退。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-REREVIEW-20260801-001

  • 记录时间:2026-08-01T23:40:10+08:00
  • 审核阶段:前序 HOLD/8 后仅复审 F1—F8 的限定方案复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V003-20260801-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-20260801-001=HOLD/8
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 复审方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V003.md=28030 bytes / 358C37EE1FE7F5F832FAF33EBDEB1B1714DE46F315A55A1C1D53AF43D687C61F,与交接快照一致;strict UTF-8=PASS,尾随空白=0
  • 管理闭环:已只读核对 HANDOFF-INFOADMIN-INFODEV2-STOCK-VALUATION-V2-TAKEOVER-LEDGER-CLOSE-TERMINAL-20260801-001 及总纲第 710—721 行、计划第 803—813 行、问题记录第 362—369 行。
  • 外部动作:V2 代码/测试/fixture 目录均不存在;ana-dev 修改=0;真实网络=0。本轮只运行既有 V1 只读回归命令的 -B 变体,10/10 PASS / 0.208 s,未产生字节码。

Findings

F5-R1 — BLOCKING / 原 F5 未完全闭环:动态字段“未过期”仍是未定义判断,无法安全决定局部刷新失败后的复用

  • V003 第 151—155 行已正确分离 raw archive 与 reusable index,冻结负缓存、baseline schema/hash/as-of 和并发提交;但第 155 行允许局部刷新失败时保留“未过期”的旧动态字段,却没有按 price/shares/cash-debt/corporate-action/forecast 定义 freshness predicate、最长允许年龄或必须成功完成的增量检查。
  • 该缺口会让实现者自行决定旧价格、股本或预测是否仍可作为核心输入;只满足 field_date<=requested_as_of 并不能证明它是 requested as-of 的最近有效时点。相同 as-of 并发结果又只写“按 data_hash 字典序作幂等选择”,未冻结取最小还是最大,current.json 仍可能因实现选择不同而漂移。
  • 这是前序 F5 对“局部刷新失败和新旧 as-of 选择规则”的同一未闭环分支,不是新增缓存功能要求。

最小 required fixes:

  1. 在后继方案用一张小表为每种动态 data kind 冻结可执行 freshness predicate:需要哪些日期/成功增量检查、允许复用到哪个 requested as-of、失败时是核心阻断还是非核心 gap;核心价格/股本不得仅凭“日期不晚于 as-of”沿用旧基线。
  2. 明确相同 as-of 并发 data_hash 的唯一选择方向(例如 ordinal min 或 max)及 current 更新条件;对应局部刷新失败与双提交测试直接断言选中的 baseline/data hash。

F7-R1 — BLOCKING / 原 F7 未完全闭环:stdout、正式产物和 task-start 三处权威合同仍不自洽

  • V003 第 177 行冻结的 stdout schema 不含 receipt_sha256receipt_bytes,第 205 行却要求两者写 stdout;BLOCKED/FAILED 明确无 manifest/receipt,但 stdout 的 manifest_path/receipt_path 未冻结为 null,消费者无法按同一 schema 解析所有终态。
  • 第 179—185 行仍用“data snapshot、16 节报告、QA、gaps、sources、runtime、manifest”等类别描述正式目录,没有给出前序 required fix 要求的精确文件名;只有 data_snapshot.jsonsnapshot_build_report.jsonvaluation_snapshot.jsonvaluation_results.json 和失败包三件套在其他章节可定位,正式报告、QA、gap、source、manifest 的公共路径仍需实现时猜测。
  • 第 258—265 行把两次真实 smoke 的 --task-start 固定为 2026-08-01T00:00:00+08:00。只读原生任务证据显示上游用户“按照这个思路去做”turn 起点为 2026-08-01T21:20:48+08:00,日常开发接管 turn 起点为 21:54:15+08:00;午夜值不对应任一任务起点,会使本事项要求的 user-task wall 成为人为放大的名义值。
  • 这是前序 F7 对“可消费状态矩阵与权威 task/process wall”的同一闭环,不扩展 telemetry 范围。

最小 required fixes:

  1. 统一 stdout schema 与 receipt:增加 receipt_sha256/receipt_bytes,并按状态冻结 manifest_path/receipt_path/receipt_* 的 string/null 规则;正常 stdout 的最终 wall 必须逐值复制已绑定 manifest 的 receipt,失败状态不得伪造 receipt。
  2. 给状态矩阵中的正式类别各指定一个精确相对文件名,至少覆盖 16 节报告、QA、gaps、sources、runtime log/metrics 和 run manifest;各状态的必有/禁止项直接引用这些名称。
  3. 两条 smoke 命令使用有原生证据的实际 task-start(并登记来源 turn),或省略参数而明确此次只能验 process wall;不得用任意午夜常量冒充用户任务起点。

F8-R1 — BLOCKING / 原 F8 未完全闭环:冻结的长城 V1 fixture 路径不存在

  • V003 第 248 行写 dev/ana-dev/test/stock_valuation_pipeline/fixtures/greatwall_example.json,只读检查 Test-Path=False
  • 同一行给出的 7142 bytes / 06AB6A7C45C2E43F71654C616F15A826B21E468C4BA72AFB0B253C9DD89FACD8 实际对应 dev/ana-dev/test/stock_valuation_pipeline/fixtures/great_wall_military_20260731.json。冻结 hash 正确、路径错误;按当前 V003 执行直接 V1 与 V2 bridge 比较会在读取输入前失败,或诱使实现者创建一个不应存在的 alias。
  • 既有 V1 测试入口的只读 -B 运行已证明 10/10 PASS,因此这里只需修正验收前像路径,不要求改 V1、复制 fixture 或增加测试范围。

最小 required fix:

  1. 后继方案仅把第 248 行 fixture 路径改为现存的 dev/ana-dev/test/stock_valuation_pipeline/fixtures/great_wall_military_20260731.json,保留既有 bytes/hash、V1 10/10 和 direct-vs-bridge 比较合同;禁止创建 alias 或修改 ana-dev

F1—F8 闭环状态

  • F1=CLOSED:管理员三本 append-only 账、唯一 owner/reviewer/project 落点、旧 ana 会话关闭及条件单文件授权均已核实。
  • F2=CLOSED:V1 路径、版本、四项哈希、registry、函数签名和 0/2/3 映射均与只读实物一致。
  • F3=CLOSED:首期登记 provider、allowlist/endpoint/字段/日期/单位/fixture/停止顺序已冻结;运行时自由换站仍禁止。
  • F4=CLOSED:唯一 monotonic deadline、remaining 裁剪、协作返回、91 秒上限、telemetry 与四 worker 阻塞测试已冻结。
  • F5=PARTIAL / F5-R1 OPEN
  • F6=CLOSED:absent/force 状态机、BaseException、恢复真值、receipt 失败和全点注入已冻结。
  • F7=PARTIAL / F7-R1 OPEN
  • F8=PARTIAL / F8-R1 OPEN

已通过且继续冻结的合同

  • 无 judgment=DATA_READY_NEEDS_JUDGMENT,不生成伪 V1 snapshot/results 或方向性结论;judgment 不得覆盖价格、股本、法定财务、日期和 A1 身份。
  • 16 节顺序、A1 回链、publish/data 双日期 as-of、forecast 汇总 4/明细 3 只一个 gap、V1 单一数值源、交易指令禁令均未回退。
  • project 落点、ana-dev 只读、无第二套估值核心,以及 GUI/API/数据库/服务/批处理/付费登录来源/V1 公式修改等排除项未回退。

Open questions

  • 无。三项均为 V003 现有 F5/F7/F8 合同的局部确定性修正,可一次写入 V004;不需要创建代码、测试、fixture,修改 ana-dev 或运行真实网络。

结论

  • 审计状态:HOLD
  • 剩余阻断问题数:3
  • 当前仍不得进入实现。开发方只需一次闭环 F5-R1 / F7-R1 / F8-R1 并提交 V004 限定复审;F1—F4、F6 及所有已通过业务合同不得再改,且无需联网或运行新增测试。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V004-REREVIEW-20260801-001

  • 记录时间:2026-08-01T23:57:01+08:00
  • 审核阶段:V003 HOLD/3 后仅复审 F5-R1 / F7-R1 / F8-R1 的限定方案复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V004-20260801-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-REREVIEW-20260801-001=HOLD/3
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 组合方案基线:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V003.md=28030 bytes / 358C37EE1FE7F5F832FAF33EBDEB1B1714DE46F315A55A1C1D53AF43D687C61F
  • 限定修订:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V004.md=12117 bytes / 50DE1F7E765E8B828DEF1C25D6D5BEA32C3C0B07FD034929542AAE0CB4E84799,与交接快照一致;strict UTF-8=PASS;尾随空白=0
  • 外部动作:V2 代码目录和测试目录均不存在;本轮只读核对方案、账本、原生任务时间与既有 V1 fixture,未创建代码、测试或 fixture,未修改 ana-dev,未运行真实网络。

Findings

  • 无剩余阻断。V004 仅替换 V003 第 9、13、15、18、20 节中与三个开放 finding 对应的局部合同,未重开或回退 F1—F4、F6。

F5-R1 复审

  • CLOSED。V004 第 22—57 行为每个可复用字段组冻结统一 freshness 输入、固定 process_start 判断时刻、FRESH|STALE|MISSING 三态,以及逐 data_kind 的 TTL、水位、刷新动作、核心阻断/非核心 gap 和停止规则。
  • STALE 只保留诊断原始 blob,禁止进入正式字段;核心行情、股本和财务不得靠陈旧值降级,forecast 两个登记来源后以唯一 gap 停止。
  • 同一 requested as-of 的候选选择固定为:最大 baseline_as_of,再取最大规范 watermark,最后取 64 位小写十六进制 data_hash 的 ASCII 字典序最大值;current.json 使用同一比较,且相反插入顺序测试必须得到同一结果。
  • 结论:前序关于动态字段“未过期”语义和 data hash 选择方向的歧义已消除,满足可实现、可重跑和可验收要求。

F7-R1 复审

  • CLOSED。V004 第 61—82 行冻结成功包、失败包和同级外部 receipt 的精确相对文件名及各终态必有/禁止集合;manifest.json 仍为包内最后写入文件,失败终态不得创建 manifest/receipt。
  • 第 84—124 行冻结 ticker 模式六类终态的 stdout exact-key schema、JSON null 规则、exit/status 字段值和 manifest/receipt 路径、hash、bytes、双墙钟逐值关系;receipt 不自引用本体 hash/bytes,消费者不再需要猜测缺失字段。
  • 第 126—139 行把真实 smoke 的 task-start 回链到 Codex task 019fb338-fe89-7d52-9ba6-513e82de54d8 / turn 019fbd7c-00c5-7962-8a80-3206ca5a58d9。只读原生任务核对 startedAt=1785590448,对应 2026-08-01T21:20:48+08:00;两条 smoke 命令和 task/process 双墙钟不等式均使用该实际起点。
  • 结论:前序 stdout/receipt 冲突、正式产物文件名缺失和任意午夜 task-start 三项不自洽均已闭环。

F8-R1 复审

  • CLOSED。V004 第 141—147 行废止不存在的 greatwall_example.json,禁止创建 alias,并把 V1 与 bridge 的全部比较入口统一为 dev/ana-dev/test/stock_valuation_pipeline/fixtures/great_wall_military_20260731.json
  • 只读实物核对:实际文件存在,7142 bytes / 06AB6A7C45C2E43F71654C616F15A826B21E468C4BA72AFB0B253C9DD89FACD8;不存在旧 alias。路径、字节数和哈希与 V004 完全一致。

已通过且继续冻结的合同

  • F1—F4、F6 保持 CLOSED:project 单一实施权属/V1 只读桥接、公开 provider registry、唯一 90 秒单调 deadline、BaseException 原子状态机均不得回退。
  • 无 judgment=DATA_READY_NEEDS_JUDGMENT,不得伪造 V1 snapshot/results 或方向性结论;judgment 不得覆盖价格、股本、法定财务、日期和 A1 身份。
  • 16 节报告、A1 与 publish/data 双日期 as-of、forecast 汇总 4/明细 3 只形成一个 gap、V1 单一数值源、无交易指令保持冻结。
  • project 级落点、ana-dev 只读、无第二套估值核心,以及 GUI/API/数据库/服务/批处理/付费登录来源/V1 公式修改等排除项保持冻结。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 剩余阻断问题数:0
  • F5-R1 / F7-R1 / F8-R1 全部关闭;结合前序已关闭的 F1—F4、F6,V003+V004 组合方案可作为唯一实施合同。
  • 允许 dev.developer.project.secondary / infodev-2 按 V003+V004 开始创建 V2 代码、测试和项目级 fixture,并按冻结顺序完成离线测试、fixture 性能、受控真实网络 smoke、文档和实现独立审核。ana-dev 继续只读;本 PASS 不授权扩大 GUI/API/数据库/服务/批处理、付费登录来源或修改 V1 公式。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V005-PROVIDER-DELTA-20260802-001

  • 记录时间:2026-08-02T00:44:29+08:00
  • 审核阶段:V003+V004 方案 PASS 后,首次真实 smoke 触发的两请求限定 provider delta 方案审核。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V005-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序方案结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V004-REREVIEW-20260801-001=PASS/0
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 限定修订:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V005.md=4028 bytes / B4ABD0456BFA0C219C8C2A7A2A92CBE8B40804901A984A69B941A92F87571B6D,与交接快照一致;strict UTF-8=PASS;尾随空白=0
  • 继承基线:V003=28030 bytes / 358C37EE1FE7F5F832FAF33EBDEB1B1714DE46F315A55A1C1D53AF43D687C61F;V004=12117 bytes / 50DE1F7E765E8B828DEF1C25D6D5BEA32C3C0B07FD034929542AAE0CB4E84799
  • 审核动作:只读核对 V005、当前 provider/registry/test/fixture、失败包和原始 blob;未联网、未运行 smoke、未修改实现/测试/fixture/ana-dev

触发证据核验

  • 首次真实 smoke 失败包 dev/tmp/valuation-v2-real-smoke-001/cold.failed-b036e888ea644a1db66df5d967ffa26f/ 存在;failure.jsonBLOCKED / E_CORE_INPUT / 缺少非经营性金融资产组成字段runtime_metrics.json 记录 process wall=1.4540000000270084 s、task-start=2026-08-01T21:20:48+08:00,没有伪装成功。
  • 简版 balance 原始 blob 可复算为 30407 bytes / 819144DA9256200C0FEEB1B03BB2E3715B08827817EC58871C7761CA5DD60F81;2026-03-31 行含 MONETARYFUNDS/TOTAL_EQUITY/TOTAL_ASSETS/TOTAL_LIABILITIES,但确实不含 TRADE_FINASSET_NOTFVTPL/NONCURRENT_LIAB_1YEAR/LEASE_LIAB
  • 当前实现仍使用 RPT_DMSK_FN_BALANCEbeg=end=as_of;当前 fixture 仍为前序聚合字段前像。V005 请求/fixture 变更尚未激活,符合 delta PASS 前门禁。

Findings

F1 — BLOCKING / 数据合同:字段集合只以“任一字段存在”为成功条件,仍会把部分 schema 漂移静默计为 0

  • V005 第 32—33 行对金融资产和有息债务都规定:列举字段中“一个字段都不存在”才 BLOCKED,只对实际存在字段求和;存在字段为 null 可按 0。这样只要响应保留任意一个候选键,即使其余可能承载非零金额的键因 schema 漂移被删除,也会继续求和并把缺失组成隐式当 0。
  • 第 31 行的 MINORITY_EQUITY|null→0 同样没有区分“键明确存在且值为 null”和“键完全缺失”。这与本次真实 smoke 已证明的根因相同:摘要/漂移响应可能保留部分资产负债字段,但不能据此证明缺失明细为零。
  • 第 43 行测试只覆盖“全部明细字段存在但均为 null”和“所有字段都不存在”,没有覆盖只缺一个或只保留一个字段的 partial-schema 情况;当前合同仍可能低估非经营性金融资产、有息债务或少数股东权益,进而污染估值输入。

最小 required fixes:

  1. 在后继限定修订中,为 RPT_F10_FINANCE_GBALANCE 冻结可执行的 schema 完整性规则:明确每个经济组成是独立可加字段还是互斥 alias 组;每个必需组成/alias 组都必须在响应中有键,缺任何必需键即 BLOCKED。只有通过该键集合校验后,显式 null 才可按法定表无该项目计 0。
  2. MINORITY_EQUITY 也必须区分 absent 与 explicit null:absent=BLOCKED,键存在且 null 才为 0。
  3. 增加 partial-schema 反例(至少金融资产缺一个组成键、债务缺一个组成键、MINORITY_EQUITY 缺键)及 alias 双存在用例;断言缺键阻断、互斥 alias 不重复求和、完整键集合精确得到 95338761.64 / 825466.20。不需要新增 host/provider 或联网复跑。

已通过的 delta 部分

  • balance reportName 从 RPT_DMSK_FN_BALANCE 替换为同一登记 host 上的 RPT_F10_FINANCE_GBALANCE,保持 HTTPS/GET/filter/分页/排序/响应上限、B1+A1/as-of/预算与停止规则,方向合理;本 HOLD 不要求新增来源或 fallback。
  • K 线 beg=as_of-14 calendar days / end=as_of、仅保留 f51<=as-of 并取最大日期、空窗口 BLOCKED,正确实现既有“取不晚于 as-of 的最近交易日”合同,PASSED_AND_FROZEN
  • 首次真实失败证据、不得以 0 掩盖缺失值、V003+V004 其余合同和 ana-dev 只读边界继续冻结。

Open questions

  • 无。唯一阻断可由字段键集合/alias 组合同和离线 partial-schema 测试闭环,不要求新网络来源或真实 smoke。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • V005 provider delta 当前不得实施。开发方只需提交关闭 F1 的后继限定修订;K 线窗口和同 host 完整 balance 端点选择已经通过,不得回退。PASS 后再实施并按原计划重跑全套离线、fixture cold/warm 和真实 cold/warm smoke。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V006-BALANCE-SCHEMA-REREVIEW-20260802-001

  • 记录时间:2026-08-02T01:18:41+08:00
  • 审核阶段:V005 provider delta HOLD/1 后,仅复审 balance schema-completeness F1 的限定方案复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V006-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V005-PROVIDER-DELTA-20260802-001=HOLD/1
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 复审方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V006.md=3278 bytes / 0A997EFB1D8237EB4102E7BAD71BDADE7F0BD2C1178DDAC9F74117254E3FD209,与交接快照一致;strict UTF-8=PASS;尾随空白=0
  • 继承方案:V005=4028 bytes / B4ABD0456BFA0C219C8C2A7A2A92CBE8B40804901A984A69B941A92F87571B6D;V003+V004 及 V005 已通过端点/K 线条款继续冻结。
  • 审核动作:只读核对 V006、V005 F1 和当前 provider 实现;当前实现仍为 RPT_DMSK_FN_BALANCEbeg=end=as_of,证明 provider delta 尚未激活。本轮未联网、未运行 smoke、未修改实现/测试/fixture/ana-dev

Findings

  • 无剩余阻断。

F1 闭环核验

  • CLOSED。V006 第 13—20 行把非经营性金融资产冻结为一个完整互斥 alias 组和两个独立组成;全部键均为 schema 必需键,缺任一键即 E_BALANCE_SCHEMA_DRIFT/BLOCKED,只有完整性校验通过后 explicit null 才能计 0。
  • alias 组 0/1/多非 null 的行为确定:全 null=0;单值采用;多值只有数值完全相等才计一次,不等即 E_BALANCE_ALIAS_CONFLICT/BLOCKED,消除了重复求和或漂移字段被静默忽略的风险。
  • 经济口径明确排除长期战略性 OTHER_EQUITY_INVEST、债权投资和其他非流动金融资产,不把它们自动当现金等价物抵减企业价值;冻结完整响应仍精确得到 non_operating_financial_assets=95338761.64,没有扩大 V1 数值口径。
  • 第 24—30 行要求六个债务键全部存在,缺任一键即 schema drift;完整后 explicit null=0、非 null 必须非负,精确债务=825466.20
  • 第 32—34 行明确 MINORITY_EQUITY absent=BLOCKED、present null=0、数值必须非负,不再由 dict.get(...,0) 混淆 absent/null。
  • 第 36—44 行要求逐一删除每个金融资产、债务和 minority 必需键的反例,并覆盖 alias 相等/不等、全 null 与冻结精确总额;测试合同已覆盖前序 required fixes 的全部分支。

已通过且继续冻结的合同

  • V005 已通过的同 host RPT_F10_FINANCE_GBALANCE 端点选择和 K 线 14 日窗口保持 PASSED_AND_FROZEN;不新增 provider、域名、fallback 或网络预算。
  • 首次真实失败证据、不得把缺失字段填 0、V003+V004 全部通过合同、project 落点和 ana-dev 只读边界均未回退。
  • 本 PASS 只授权实施 V005+V006 provider delta;不替代后续离线、fixture、真实 cold/warm smoke 和最终实现独立审核。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 剩余阻断问题数:0
  • V005 F1 已由 V006 完整关闭。允许 dev.developer.project.secondary / infodev-2 按 V003+V004+V005+V006 组合合同实施 balance 端点/schema 与 K 线窗口变更,随后完成全套离线测试、V1 10/10、fixture cold/warm、真实 cold/warm smoke、文档和最终实现独立审核。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-20260802-001

  • 记录时间:2026-08-02T02:11:28+08:00
  • 审核阶段:V003+V004+V005+V006 组合合同下的完整实现、离线测试、project fixture、fixture cold/warm、真实 cold/warm smoke、工具文档与证据链独立审核。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-REVIEW-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序方案结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V006-BALANCE-SCHEMA-REREVIEW-20260802-001=PASS/0
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:仅审核 project 级 V2 实现、测试、fixture、既有 smoke 证据和配套文档;dev/ana-dev/ 全程只读;本轮未联网、未重跑真实 smoke、未修改实现/测试/fixture/输出或原操作手册。

冻结快照与独立验证

  • 交接声明的 12 个冻结工件均逐文件复算并匹配字节数/SHA-256:workflow.pyproviders.pyhttp_client.pycache.pyv1_bridge.pyprovider_registry.jsontest_pipeline_v2.py、project fixture manifest、工具文档、实现与验收证据、目录导读和接管 worklog;实现与测试/fixture 共 34 个非 pyc 文件纳入只读快照。
  • V1 六个冻结文件与 V003/V004 记录的路径、字节数和 SHA-256 一致,ana-dev 未被本任务修改;V2 没有复制第二套 V1 估值公式。
  • 审核员独立运行:V2 unittest=24/24 PASS5.679 s);V1 readonly unittest=10/10 PASS0.180 s);compileall=PASS;CLI help=PASS;治理校验=OK / projects=1 / warnings=0
  • 既有 fixture cold/warm/judgment 与 real cold/warm 的 manifest/receipt 哈希、manifest 内文件字节数与 SHA-256、成功包文件数和 task/process 双墙钟不等式内部一致;real cold=6E905229...E0F0F6 / D5F9488F...B20B48,real warm=0DFFD45E...FEDD5D / 984B2566...FB0275
  • 已通过并继续冻结:V1 bridge 的路径/哈希/直接与桥接单一数值源、V1 10/10;V006 balance 必需键/alias 完整性与精确总额 95338761.64 / 825466.20;16 节外形、无交易指令、现有工件哈希链及早期 BLOCKED 证据保留。上述通过项不抵消下列合同级阻断。

Findings

F1 — BLOCKING / 历史 as-of 数据合同被伪满足,现有真实成功 smoke 不可作为正确性证据

  • providers.py:224-249 对 K 线先过滤 f51<=as_of,但随后取 eligible[-1],没有按冻结合同取最大 f51;审核员用乱序离线响应复核时错误选择了 2026-07-31,尽管响应中存在 2026-08-01
  • 同一实现直接采用实时 quote 的 f84/f116,未校验 f124 的数据日期,却把股本日期回填为所选历史交易日。既有 real cold quote 原始响应 7963180...f124=0,因此不能证明请求日 2026-07-31 的历史股本/市值;按 V004 必须 BLOCKED,不得输出 DATA_READY_NEEDS_JUDGMENT
  • providers.py:136-145 把公告截止日的“本地日终”构造成 UTC 日终,实际可放入上海时区次日 07:59:59 前的信息;forecast providers.py:470-536 未按响应自身 REPORT_DATE/UPDATE_DATE<=as_of 过滤,且在原始响应缺少这些日期时把 publish_date/period_end 伪造为 as_of

最小 required fixes:

  1. K 线在解析合法日期后按 f51 取不晚于 as-of 的最大日期,并补乱序、周末、空窗口、未来行反例。
  2. 严格执行 V004 shares/market-cap freshness:只有 quote 的可证明本地数据日等于 requested as-of 才可直接采用;历史请求只能使用在该 as-of 合法取得并留痕的基线,否则核心输入 BLOCKED,不得把实时值回填到历史日期。
  3. 公告使用 Asia/Shanghai requested-as-of 日终比较;forecast 必须从真实响应字段建立 publish/data 日期并过滤,缺失必要日期时形成阻断或既定非核心 gap,禁止以 requested as-of 代填来源日期。

F2 — BLOCKING / 核心字段血缘、A1 回链和自动 QA 仅有 provider 级外形,没有落实字段级证明

  • finance provider 没有生成其核心财务字段使用的 sources;既有 real snapshot_build_report.jsonfield_lineage.finance.source_ids=[],却仍通过构建和 QA。构建器只检查“任意 A1 source 含同报告期”,没有证明每个法定财务值实际来自哪一份 A1 原文及对应 raw hash。
  • snapshot_builder.py:89-92 对缺失 publish_date/period_end 使用 requested as-of 兜底,未知日期因而会被判定安全;这与“不知道即不能证明 as-of safe”的冻结合同相反。
  • report_qa.py:16-55 只检查 16 个标题、少量禁词、一个布尔位、存在任意 raw hash 和两个 V1 数值;未校验每个核心字段的 source_id→A1→raw hash 回链、全量数值一致性、表格/围栏/本地链接、受保护字段和 manifest。工具文档/证据文档关于“全部核心字段已回链且全部日期安全”的表述与实物不符。

最小 required fixes:

  1. 生成可机读的字段级 lineage;价格、股本、法定财务、balance、日期与 A1 身份逐字段绑定 provider/source_id/raw hash/publish date/data date,财务字段必须回链到对应报告期的 A1 原文。
  2. 缺失必要 publish/data 日期、source_id 或 raw hash 必须拒绝正式值;不得用 requested as-of 兜底。
  3. 将 V003 自动 QA 清单落实为可执行校验和正反测试,并按真实能力纠正工具文档、证据文档与报告文字。

F3 — BLOCKING / 公司基线与 FRESH/STALE/MISSING 状态机未实现,warm 只复用了请求缓存

  • cache.py 只有请求级 load_reusable/store/promote_reusable 和只写 write_baseline;workflow 每次仍调用全部 provider,未按 data-kind 读取/选择公司基线,也没有逐类 TTL/watermark/freshness、核心 stale 禁止入正式值、非核心 gap、局部刷新/停止规则。
  • 既有 baseline 缺少冻结合同要求的逐 data-kind 数据日期、发布日期、fetched/expires、schema/as-of/semantic 状态等输入;write_baselinecurrent.json 的读-比-写无 ticker 锁,存在并发 TOCTOU,测试仅顺序写入,未覆盖逆序与并发确定性。
  • 请求 fingerprint 未纳入冻结 headers,body 未按 content type 规范化,query 结构也不能充分保留重复值;工具文档却宣称已包含 headers。

最小 required fixes:

  1. 实现 V004 的逐 data-kind 基线载入、共同 freshness predicate、确定性候选选择、FRESH/STALE/MISSING 行为、核心/非核心分流与 ticker 级并发安全 current 更新。
  2. 实现冻结的 canonical fingerprint preimage、raw 与 reusable 索引、PENDING_PARSE→确认可复用、negative TTL,并补每个 data-kind 的 fresh/stale/missing、逆序、并发、篡改和 partial-write 测试。
  3. fixture warm 必须证明公司基线语义复用,而不只是同一请求 blob cache 命中。

F4 — BLOCKING / provider allowlist 与单调 90 秒截止不能阻止越界请求或超时后后台写入

  • http_client.py:74-82 只校验 provider/version、HTTPS host 和 method,未校验冻结 endpoint/path/query/reportName、响应 content type 和 provider 独立响应上限;读取统一允许 20 MiB
  • retry backoff 睡眠后不重新校验 remaining,且 timeout 下限强制 0.05 s;阻塞 read 继续沿用请求开始时的 socket timeout,不能保证 deadline+1 秒内退出。acquisition.py:85 使用 shutdown(wait=False),截止后仍运行的任务可能继续写 cache。
  • 现有“四 worker”测试只是合作式 stub 轮询 remaining,未覆盖真实 HttpClient 的阻塞 read/backoff、截止后 request count=0、无后台写入等合同。

最小 required fixes:

  1. 按 registry 精确校验 host+path+method+固定 query/reportName、content type 与逐 provider 响应上限,拒绝重定向及所有未登记变体。
  2. 让所有 retry、open、read 和 worker 收束于同一 monotonic deadline;睡眠后先复核,不得在剩余时间耗尽后创建请求,截止返回后不得再产生正式 cache/baseline 写入。
  3. 增加可控阻塞 transport 测试,证明 task 内/外双墙钟、deadline+1 秒上界、request count 和无后台副作用。

F5 — BLOCKING / 路径预检与 force 原子提交状态机违反冻结 BaseException 合同

  • workflow.py:207-215lstat/reparse 检查前调用 Path.resolve(),会先消解词法 symlink/junction 身份;同时未逐级验证父链 reparse,不能证明输出/cache/fixture 落点安全。
  • workflow.py:381-406 把备份清理失败纳入通用异常路径,继而删除新成功输出并恢复旧输出。审核员离线 fault probe 在 cleanup_backup 注入失败时得到 exit=5 且旧输出被恢复;冻结合同要求新输出/receipt 保持成功,备份保留并仅记 warning。
  • rollback 再失败仅通过 add_note 附着,failure package/终端摘要不能可靠保留主异常和回滚异常双证据;commit_finished 在 receipt 写入/fsync 之前采集,声称的 final double-wall 没有覆盖实际 receipt commit。
  • 现有 KeyboardInterrupt 仅覆盖一个注入点,没有逐点覆盖 SystemExit、receipt、cleanup 和 rollback 双失败。

最小 required fixes:

  1. 在任何 resolve/mkdir/写入前对词法路径及父链执行 lstat/reparse 校验,之后再形成规范绝对路径;拒绝 symlink/junction/reparse 和类型冲突。
  2. 按 V003/V004 重写 absent/force BaseException 状态机:备份清理失败保持新成功并报告 warning;提交失败回滚旧输出/receipt;主异常原样重抛或映射且双异常进入 failure evidence。
  3. final receipt/summary 的 commit_finished 与 task/process wall 必须覆盖 receipt 的实际原子写入和持久化;补齐每个冻结故障点的 Exception/KeyboardInterrupt/SystemExit 与 rollback/cleanup 组合测试。

F6 — BLOCKING / 终态矩阵、离线测试与实现证据对未实现能力作了过度声明

  • 无 judgment 时只有 forecast coverage gap;当 fixture 为 3/3 时可得到 DATA_READY_NEEDS_JUDGMENTgap_count=0,违反 V004 要求的强制人工判断 gap。
  • CLI parser 级输入错误仍走 argparse 的 stderr/SystemExit,不是冻结的单行 canonical JSON stdout INPUT_ERROR 合同。
  • 24 个 V2 测试没有覆盖六种终态 exact stdout/file matrix、BLOCKED/FAILED 文件集、每类 baseline freshness、provider 4xx/5xx/空/schema/future、全部 force 故障点、cleanup/rollback 双失败及 V1 bridge success/reuse/force/input byte equivalence;所谓 future-source 测试没有调用 builder,属于空断言。
  • 因 F1-F5,现有 real cold/warm 虽然工件内部哈希一致,但其 DATA_READY_NEEDS_JUDGMENT 正确性结论无效;实现与验收证据文档对覆盖面和 as-of/A1 成功作了过度声明。

最小 required fixes:

  1. 无 judgment 终态始终加入独立 judgment gap;统一 parser 级和运行级六终态的 exact exit/stdout/artifact/receipt 合同。
  2. 补齐 V003+V004+V005+V006 已冻结测试矩阵,删除或改成真正执行被测入口的空测试;独立重跑 V2、V1、fixture cold/warm/judgment。
  3. 修复后在新隔离目录运行一组真实 cold+warm,保留旧 smoke 不覆盖。若冻结公开来源不能证明 requested as-of 的历史股本,正确结果应是诚实 BLOCKED,不得伪造成功或擅自新增 provider;真实来源变化如需新口径,先提交限定方案 delta。同步纠正工具文档、实现证据和有权限的正式执行日志。

操作手册条件授权

  • 当前结论为 HOLD,管理员的条件单文件授权尚未满足;不得同步 outputs/20260730_stock_valuation_guide/股票价格合理性评估操作手册_v1.0.md,也不得修改该目录其他文件。
  • F1-F6 全部关闭并取得实现复审 PASS 后,可按管理员既有条件授权只同步上述一个操作手册文件;同步完成后必须提交一次“操作手册单文件限定确认”,只核对该文件与已通过实现/工具文档的一致性和变更边界,无需为该限定确认重跑网络或真实 smoke。

Open questions

  • 无。六组问题均可由组合合同内的代码、离线测试、文档修正和一次新的受控 real cold/warm 闭环;不授权新增 provider、修改 V1 公式或改动 ana-dev

结论

  • 审计状态:HOLD
  • 阻断问题数:6
  • 当前实现与既有真实成功证据不得交最终交付或同步原操作手册。开发方应仅按 F1-F6 的最小 required fixes 修复,保持已通过的 V1/V006/工件哈希链边界,完成离线矩阵和一组新隔离 real cold/warm 后提交一次完整实现复审。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-HOLD6-REREVIEW-20260802-001

  • 记录时间:2026-08-02T04:36:44+08:00
  • 审核阶段:首次实现 HOLD/6 后,对 F1—F6 修复、最终代码/测试、fixture 与既有真实证据的完整限定复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-HOLD6-REREVIEW-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序实现审计:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-20260802-001=HOLD/6
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复核前序 F1—F6 及更正后的测试、文档和证据;V003+V004+V005+V006 继续冻结,dev/ana-dev/ 只读。本轮未联网、未运行真实 smoke、未修改实现/测试/fixture/输出或操作手册。

冻结快照与独立验证

  • 四份设计以及交接列明的实现、测试、fixture、工具文档、证据文档、目录导读、执行日志、worklog、操作手册均逐文件复算,字节数和 SHA-256 全部匹配交接快照;操作手册仍为 68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6,未进入本轮审核。
  • 审核员独立运行:V2 unittest=46/46 PASS20.611 s);V1 readonly unittest=10/10 PASS0.139 s);compileall=PASS;CLI help=PASS。这些结果证明现有断言全绿,但不能替代下列冻结合同反例。
  • 既有 fixture valuation-v2-fixture-acceptance-003 三态的 manifest/receipt、文件哈希、16 节、23 条核心 lineage、V1 数值及 cold/warm 请求计数均复算一致;既有 real valuation-v2-real-smoke-006 两次均诚实 BLOCKED/E_HISTORICAL_SHARES_UNPROVEN,各有 10 条 telemetry/raw,且无 OUT/manifest/receipt/current/market reusable。无需为本次复审重新访问真实来源。
  • F1 的 K 线最大合法日期、f124/历史股本阻断、上海时区公告截止及 forecast 真实日期合同已闭环;真实 smoke 的诚实 BLOCKED 也与冻结合同一致。F1 状态为 CLOSED

Findings

F2-R1 — BLOCKING / “23 条核心血缘”仍未证明财务值与对应报告期 A1 一致

  • snapshot_builder.py:129-160 只选取 annual A1 与 current A1;除 annual 外的所有财务路径都绑定 current A1。正式 fixture 中 financials.prior_year_same_period.*data_date=2025-03-31、结构化来源为 SRC-EM-FINANCE-*-20250331,但 a1_source_id=SRC-Q1-2026a1_period_end=2026-03-31。该 A1 source 的 supports 也不含 financials.prior_year_same_period
  • test_29 只断言 A1 ID/raw hash 出现在集合中,QA 也只校验存在性,因而上述期间错配仍得到 QA PASS。这不满足前序 F2 required fix 和 V003 第 7/11 节“财务字段回链对应/同报告期 A1”的硬门禁。

最小 required fixes:

  1. 为 prior-year-same-period 每个核心字段绑定真正支持该比较期的 A1 证据;若采用 2026 Q1 报告中的同比列,必须从同一 A1/结构化记录的明确比较字段取值并记录可机读的比较期关系,不能把独立的 2025-03-31 行直接挂到 2026-03-31 A1。
  2. QA 与正反测试逐字段断言 data_date/A1 period/support/raw field 的一致关系,加入当前 fixture 的期间错配反例;只检查 ID/hash 存在不足以放行。

F3-R1 — BLOCKING / data-kind 基线仍按 provider 全有或全无,局部刷新退回请求缓存

  • cache.py:fresh_provider_results 只有当同一 provider 的所有 data-kind 都为 FRESH 时才复用整个 provider result;任一财务表 STALE/MISSING 就丢弃其余三个 FRESH 表的公司基线。
  • 审核员离线反例:先形成合法公司基线,仅把 finance_income 设为 STALE,并移除 eastmoney.finance 的请求级 reusable index;第二次入口运行仍对 finance_main/finance_income/finance_balance/finance_cashflow 四个 reportName 全部执行 transport(transport_count=4),而冻结合同要求只请求缺项或陈旧 reportName。现有 warm=0 请求依赖整组 provider 或请求 cache,未证明逐 data-kind 公司基线语义复用。

最小 required fixes:

  1. 从公司基线逐 data-kind 载入和合并 FRESH 值,只刷新 STALE/MISSING 表;刷新成功项独立提交,STALE 核心值不得进入正式结果。
  2. 增加入口级 partial-refresh 测试:仅一个财务 data-kind STALE/MISSING、其请求索引不存在时只发生一个对应 transport,其余 FRESH 值来自公司基线;同时覆盖刷新失败和不更新 current 的合同。

F4-R1 — BLOCKING / HTTPError 响应体读取绕过唯一 monotonic deadline

  • http_client.py:427-445except urllib.error.HTTPError 直接执行 exc.read(max_bytes + 1);与正常 2xx 分块读取不同,它没有按 remaining 设置读超时、没有分块复核 deadline,也没有在读取中响应 cancel。
  • 审核员离线慢 404 桩以 deadline=0.5 s、响应体 read 阻塞 1.2 s 复现:只创建 1 次请求,但 fetch1.453 s 才以 NetworkBudgetExceeded 返回。即使后续拒绝归档,调用已越过共享截止及冻结容差;现有四 worker 测试只覆盖正常 response,不覆盖 HTTPError body。

最小 required fixes:

  1. 让 HTTPError/4xx/5xx 响应体与正常响应共用分块读取、remaining socket timeout、大小上限和 cancel/deadline 检查;截止后不得重试、归档或提升 reusable。
  2. 补慢 4xx 与慢 5xx(含 retry/backoff)离线 transport 测试,断言截止上界、请求计数和返回后 cache mutation 不增长。

F5-R1 — BLOCKING / final receipt 双墙钟仍早于实际最终持久化

  • workflow.py:457-487 先写一次 provisional receipt,再在第二次最终 atomic_write 之前捕获 commit_finished/task_wall/process_wall;正式 receipt 与 stdout 虽逐值相等,但它们排除了第二次 receipt 写入及其持久化时间。
  • 审核员在不改产物语义的离线桩中仅给第二次 receipt 写入增加 0.25 s 延迟,得到实际成功返回 0.617 s、receipt/summary process_wall=0.359 s,遗漏 0.258 s。因此前序 F5 required fix“权威 final wall 覆盖实际 receipt commit”尚未闭环。

最小 required fixes:

  1. 重新定义并实现可验证的 receipt 完成协议,使 receipt 与 stdout 的权威终点确实不早于最终原子写入/持久化;若现有精确字段形成自引用时序,先提交只解决该时序的限定设计 delta,不得继续用写前时间冒充写后完成时间。
  2. 用可控的最终写入延迟和写入/replace/fsync 失败桩证明:权威 wall 覆盖最终提交、receipt/summary/hash/bytes 一致,失败仍按 force 状态机恢复旧 output/receipt。

F6-R1 — BLOCKING / 46 个测试仍未覆盖已冻结的完整矩阵,证据文档继续过度声明

  • test_31 只直接调用 data_kind_state 判断构造记录,没有对每个 data-kind 运行入口级 FRESH/STALE/MISSING、STALE 正式值排除、局部刷新/失败/current 行为;这也是 F3-R1 未被发现的原因。
  • test_42 只对 finance_income 覆盖 404/500/schema/future,未落实 V003 第 6/19 节“每个 provider 成功/空/4xx/5xx/schema/future”的表驱动入口矩阵。
  • test_43 的全点声明只包含无 judgment 的 staging writes、manifest 和一个 rename1 场景;未覆盖 judgment-only valuation_snapshot.json/valuation_results.json、每个 replace、第二阶段 receipt/最终 hash、restore/cleanup 组合,以及每个冻结点的 KeyboardInterrupt/SystemExit。test_44 也只比对 force 后三文件与无效输入返回码,没有完成 V1 无 force/复跑/force/输入错误的 stdout/stderr/0-2-3 与字节等价矩阵。
  • 因此 46/46 PASS 不能支持工具/证据文档关于 F2—F5“完整合同已验证”的表述;当前发现均可由冻结范围内离线测试触达,无需新增 provider 或扩展产品范围。

最小 required fixes:

  1. 按 V003+V004 已冻结 L1/L3 表补齐非空断言:每 provider 负 fixture、逐 data-kind 入口状态、全部提交故障点与非普通异常、六终态精确 stdout/文件/receipt、V1 直接与 bridge 四路径等价。
  2. 让上述测试真正经过入口或被声明验证的 helper;修复 F2—F5 后重跑 V2/V1 及 fixture cold/warm/judgment,并把工具文档、实现证据和执行日志收敛到实际覆盖面。

已关闭与保留结论

  • F1=CLOSED;F2=OPEN / F2-R1;F3=OPEN / F3-R1;F4=OPEN / F4-R1;F5=OPEN / F5-R1;F6=OPEN / F6-R1
  • V1 只读 10/10、无第二套公式、V006 balance 完整键与精确总额、无 judgment 强制 gap、canonical argparse INPUT_ERROR、真实历史股本诚实 BLOCKED、16 节/无交易指令及既有 evidence 哈希链继续有效,不因本 HOLD 回退。
  • 本轮问题均可先由代码与离线测试闭环;无需为这五项重复访问真实网络。若修复实际改变 real BLOCKED 路径,再由开发方在下次提交中明确说明证据等价性,不得擅自新增 provider 或伪造成功。

操作手册条件授权

  • 本轮结论为 HOLD,尚不满足管理员的条件单文件授权;不得同步 outputs/20260730_stock_valuation_guide/股票价格合理性评估操作手册_v1.0.md
  • 待 F2-R1—F6-R1 全部关闭并取得实现复审 PASS 后,才允许按既有管理员授权只同步该一个文件;同步完成后仍只需一次操作手册单文件限定确认,无需为该确认重跑网络或真实 smoke。

Open questions

  • 无。五个残余问题均已给出冻结范围内的可执行最小闭环;F5 若选择调整 receipt 自引用时序,唯一允许的范围扩展是先提交该点的限定设计 delta。

结论

  • 审计状态:HOLD
  • 阻断问题数:5
  • 当前实现不得交最终验收,不得同步操作手册。开发方只需关闭 F2-R1—F6-R1;F1 与其余已通过合同不得回退。完成后提交同一事项的完整限定实现复审。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V007-RECEIPT-TIMING-DELTA-20260802-001

  • 记录时间:2026-08-02T04:49:57+08:00
  • 审核阶段:实现复审 F5-R1 receipt 自指时序阻断的单点限定方案审核;不是 F2/F3/F4/F6 实现复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-DESIGN-V007-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-HOLD6-REREVIEW-20260802-001=HOLD/5;其中仅 F5-R1 获准提交 receipt 时序限定 delta。
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:只审核 V007 对 V004 第 3.3/4 节的 receipt 最终墙钟条款替换;F1、其他已通过合同及 F2/F3/F4/F6 均未重开。本轮未修改或运行代码/测试,未联网,未读取或修改操作手册内容。

冻结快照

  • V007:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-V007.md=7099 bytes / E6216F8986FE5DFB2DC5E8B6F9479A7D234214C5E59B8FEAC165D168B7FC74AC,与交接一致;strict UTF-8=PASS;尾随空白=0
  • 继承设计未变:V003=28030 / 358C37EE1FE7F5F832FAF33EBDEB1B1714DE46F315A55A1C1D53AF43D687C61F;V004=12117 / 50DE1F7E765E8B828DEF1C25D6D5BEA32C3C0B07FD034929542AAE0CB4E84799;V005=4028 / B4ABD0456BFA0C219C8C2A7A2A92CBE8B40804901A984A69B941A92F87571B6D;V006=3278 / 0A997EFB1D8237EB4102E7BAD71BDADE7F0BD2C1178DDAC9F74117254E3FD209
  • worklog=4848 bytes / 1C02372D15C7C18CAB49754CEE54B9CEA88FA724C28D9A42A175A531970A4E9A;执行日志=98948 bytes / CBFEF3E88BC37DE996F51DA3C7098EFF8E7757B5601CFE996F6510DBBAA7DAFE;治理校验前像=OK / projects=1 / warnings=0
  • F5 现有实现仍为 workflow.py=22564 bytes / 8ECA6CE2FEDAF8493EDB4BE855EEF6BB1567BA8643553BBB9CF8D7B4387A0074,证明 V007 PASS 前没有提前实施 receipt 变更。

Findings

  • 无阻断 finding。V007 只修正已确认不可满足的 receipt 自指时序,没有改变正式目录、manifest、receipt 路径、ticker stdout schema、失败包、V1 模式或产品/数据范围。

F5-R1 限定方案核验

  1. PASS:schema 2 receipt 只不可变绑定 run/status/output/manifest、提交准备时点和 receipt 写入开始下界,明确删除 commit_finished_at/task_wall_seconds/process_wall_seconds,不再让文件自报自身最终写后时刻,也不引入 receipt hash 自引用、第二次回写或 sidecar。
  2. PASS:成功 stdout 保持 V004 schema 1;terminal_at/task_wall_seconds/process_wall_seconds 在一次 receipt 原子写返回、正式实物重读/hash/stat 校验及 backup cleanup 尝试之后捕获,成为唯一最终墙钟权威。包内 runtime 仍冻结在 through_commit_ready,不改写 manifest 已封存文件。
  3. PASS:receipt temp write/flush/fsync/replace/final read/hash/stat 均属于真正提交边界;absent 不留伪成功,force 恢复旧 output+receipt 并保存次生 rollback 证据。已验证新 receipt 后的 cleanup 失败只保留新真值、剩余 backup 和 warning,不反向回滚。
  4. PASS:限定测试覆盖最终写和 cleanup 的 0.25 s 延迟、每个 receipt 故障点的普通异常/KeyboardInterrupt/SystemExit、三种成功终态、force、hash/bytes 与时间不等式;足以离线证明 F5-R1,无需真实网络。

继承解释与实现门禁

  • V007 第 4 节的“FAILED/BLOCKED 失败包”按未被替换的终态矩阵解释:进入成功 receipt 提交阶段后的普通 I/O/校验故障固定为 FAILED/5KeyboardInterrupt/SystemExit 原类型传播并保留失败/回滚证据。核心数据不足在更早阶段形成 BLOCKED/4,不会进入成功 receipt 写入。
  • manifest-last 继续生效。cleanup warning 可写 stderr、外部命令捕获或未被 manifest 封存的审核证据;不得为补 warning 在成功提交后追加改写 OUT 内的 runtime.log 或其他 manifest 文件。
  • receipt_write_started_at 只能解释为写入开始下界;消费者不得把它当完成时刻。最终耗时只能读取 ticker stdout 的 terminal_at/task_wall_seconds/process_wall_seconds

状态与授权

  • V007 限定方案结论:PASS/0。允许开发方按 V007 第 2—5 节实施一次性 schema 2 receipt、最终 stdout 墙钟、失败恢复和离线故障矩阵,并同步工具说明、实现证据和其有权限的执行记录。
  • F5-R1 仅在方案层具备实施授权,尚未在实现层关闭;必须随 F2/F3/F4/F6 离线修复一并提交下一次限定实现复审。
  • 本 PASS 不授权真实网络重跑;F5 只需 fixture 与受控延迟/故障桩。也不授权新增 provider、修改 ana-dev/V1、扩大产品范围或同步操作手册。
  • 操作手册继续 NOT_AUTHORIZED_WHILE_IMPLEMENTATION_HOLD;只有全部剩余实现阻断关闭并取得实现 PASS 后,才能使用既有管理员单文件条件授权并接受后续限定确认。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 允许按 V007 开始 F5-R1 实现,并与 F2/F3/F4/F6 的离线闭环一起提交完整限定实现复审;无需真实网络。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-HOLD5-OFFLINE-CLOSURE-REREVIEW-20260802-001

  • 记录时间:2026-08-02T06:25:08+08:00
  • 审核阶段:前序实现 HOLD/5 的 F2-R1—F6-R1 离线闭环及 V007 实施限定复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-HOLD5-OFFLINE-CLOSURE-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-IMPLEMENTATION-HOLD6-REREVIEW-20260802-001=HOLD/5DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-DESIGN-V007-RECEIPT-TIMING-DELTA-20260802-001=PASS/0
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复核 F2-R1—F6-R1 与 V007 实施;F1、V006、V1 只读结论及既有产品范围未重开。本轮未联网、未重跑真实 smoke、未修改实现/测试/fixture/输出或操作手册。

冻结快照与独立验证

  • 交接列明的 24 个设计、实现、测试、fixture、文档和记录工件均逐项复算,字节数与 SHA-256 全部匹配;操作手册仍为 68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6,本轮未读取正文。
  • 审核员独立运行 V2 离线套件:55/55 PASSRan 55 tests in 113.327s / OK。测试覆盖了交接声明的比较期 A1、逐 kind TTL/MISSING、慢 404/500、receipt schema 2、六终态、12 文件原子边界和 V1 bridge 等矩阵;全绿结果不替代下述未覆盖的内容寻址损坏反例。
  • F2-R1 已关闭:上年同期字段绑定 2026 Q1 A1 同响应比较列,structured source、period/publish/support/raw field 和 same_response_comparative_row 在 builder 与 QA 双重校验。
  • F4-R1 已关闭:HTTPError 4xx/5xx body 使用与 2xx 相同的 remaining deadline、分块读取与取消路径;独立套件中的 0.5 秒 deadline/1.2 秒慢 404、500 均为单请求、无归档和无返回后 cache mutation。
  • F5-R1/V007 已关闭:schema 2 receipt 一次写入,写后 read/hash/stat 和 backup cleanup 尝试完成后才捕获 stdout 最终墙钟;receipt 八个边界、普通异常/KeyboardInterrupt/SystemExit、force 恢复和 0.25 秒延迟探针通过。
  • F6-R1 已关闭:六终态 exact key/null/file、四类 provider 六种响应、12 文件五个原子边界及 V1 direct/bridge 0/2/3 等价矩阵均由实际入口执行。既有 valuation-v2-real-smoke-006 继续是诚实 BLOCKED/E_HISTORICAL_SHARES_UNPROVEN;本轮修复不改变该前置终态,无需联网重跑。

Findings

F3-R2 — BLOCKING / 单个 data-kind blob 损坏会击穿整份公司基线,且刷新不能修复被污染的内容寻址对象

  • cache.py:209-224_baseline_valid 在选择候选基线前遍历并读取全部 source_hashes;任意一个 blob 缺失或哈希错误就让 select_baseline 丢弃整个候选。随后 baseline_states 无法逐 kind 判定,所有十类数据统一变成 MISSING。这违反 V004 的逐 data_kind hash predicate,以及 F3-R1“只有 STALE/MISSING kind 运输、其余 FRESH 从公司基线复用”的合同。
  • 审核员使用临时目录完成入口级反例:先由冻结 fixture 生成合法 cold 基线,只把 market_close.raw_hash 指向的一个 blob 改为不同 bytes;随后 selected_after_one_blob_tamper=false,十类状态均为 MISSING,refresh 实际运输 10 类而不是 1 类。现有 test_31 只通过改 TTL 或删除 metadata entry 构造 STALE/MISSING,没有覆盖 blob 缺失/哈希损坏,所以 55/55 PASS 未发现该退化。
  • cache.py:151-165store 仅在 digest 路径不存在时写 blob;若该内容寻址路径已存在但内容哈希错误,重新取得正确响应也不会覆盖/隔离坏对象。独立反例中的 refresh 虽返回 DATA_READY_NEEDS_JUDGMENT,目标 blob 仍保持错误哈希,刷新后的候选仍无法被选择,十类状态继续全部 MISSING。因此污染会跨运行持续,不能由一次成功局部刷新闭环。

最小 required fixes:

  1. 将 baseline envelope/data_hash 校验与逐 kind blob 校验分开:单个 entry 的 blob 缺失或哈希错误只把对应 data_kind 判为 STALE(无 entry 才为 MISSING),不得使其余通过 provider/fingerprint/date/schema/semantic/hash 校验的 kind 一并失效;STALE 值仍禁止进入正式结果。
  2. ContentCache.store 遇到目标 digest 路径已存在时必须复算实物哈希;不一致时以安全原子方式修复或隔离坏对象后写入正确 bytes,不能因 exists() 跳过。写后需复验 digest,失败不得提升 reusable 或推进 company current。
  3. 增加入口级非空回归:对每个 data-kind 分别删除/篡改其 blob,断言仅目标 kind 运输、其余九类从公司基线复用;成功刷新后十类全为 FRESH、blob/source hashes 可复算,失败刷新仍不推进 current/活动基线。同步纠正实现证据、执行日志和 worklog 中“十类 hash 失败也已逐类闭环”的过度声明。

已关闭与保留结论

  • F2-R1=CLOSED;F3=OPEN / F3-R2;F4-R1=CLOSED;F5-R1/V007=CLOSED;F6-R1=CLOSED
  • F1、V006、V1 只读、历史股本诚实 BLOCKED、无 judgment、16 节、无交易指令和范围排除继续保持,不因本次 HOLD 回退。
  • F3-R2 可完全通过缓存代码、离线 fixture/故障测试与文档更正闭环;不需要真实网络,不授权新增 provider、修改 V1/ana-dev 或扩展产品范围。

操作手册条件授权

  • 本轮结论仍为 HOLD,尚不满足管理员的条件单文件授权;不得同步 outputs/20260730_stock_valuation_guide/股票价格合理性评估操作手册_v1.0.md
  • F3-R2 关闭并取得限定实现复审 PASS 后,才允许使用既有管理员授权只同步该一个文件;同步后只需操作手册单文件限定确认,无需重跑网络。

Open questions

  • 无。唯一剩余阻断已有冻结范围内的确定复现与最小闭环路径。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • F2-R1、F4-R1、F5-R1/V007、F6-R1 已关闭;当前只需关闭 F3-R2。不得同步操作手册;修复后提交同一事项的 F3-R2-only 限定实现复审,无需真实网络。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-F3-R2-ONLY-REREVIEW-20260802-001

  • 记录时间:2026-08-02T06:55:46+08:00
  • 审核阶段:前序唯一阻断 F3-R2 的限定实现复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-F3-R2-ONLY-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-HOLD5-OFFLINE-CLOSURE-REREVIEW-20260802-001=HOLD/1
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复审 F3-R2;F2-R1、F4-R1、F5-R1/V007、F6-R1 维持关闭,F1、V006、V1/ana-dev 只读结论及产品范围未重开。本轮未访问真实网络、未重跑 real smoke、未读取或修改操作手册正文,未修改受审代码、测试、fixture 或项目说明。

冻结快照与独立验证

  • 交接列明的七个变更文件均逐项复算并匹配字节数/SHA-256:cache.py=16558/FAC33193549DCD800FF94FB732449216A9F2D5A40F2F6073897787F84E2DAD46test_pipeline_v2.py=83792/9734C2E74C2A24BE5A3D4665080F141A4AB15FF29244CFED292868A95EDA7AAD,工具文档=11348/E1AF3895D568D5E5B8B08B58225AB3DD77E0263640568676E75068A2F8B8837F,实现证据=14105/27D7264F31206F41798B3A7CFC51B9A7EDF321CD53D1128200EAA6F503C5A36D,目录导读=4274/4DF1415F08EF3FBB308CE86AD5297431B3EFA2765ABE084335B299459416CDCC,worklog=7303/16829F9D00FDD6291F3AF1CAB5EDC6D8DEA338184B8A281DE1B93AEECC50A27B,执行日志=103967/CA12F771715553BDB129CE98D0D240D73B7713BDC6A07BB90CC68AC0666EB2E6
  • 操作手册仍为 68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6,与前序冻结值一致。
  • 审核员独立运行新增聚焦用例:2/2 PASS / Ran 2 tests in 16.278s;独立运行 V2 全套离线测试:57/57 PASS / Ran 57 tests in 127.851s / OK。这些结果证明成功修复路径,但现有失败用例只覆盖核心 market_close,未覆盖同一修复失败在非核心 forecast 降级路径中的基线副作用。
  • cache.py:151-199 已在已有 digest 路径复算实物 SHA-256、必要时原子重写并写后复验;cache.py:220-383 已把 envelope/data_hash 与逐 kind blob 校验分开。test_56 的十类删除/篡改成功矩阵证明仅目标 kind 运输、其余九类 FRESH、刷新后 10/10 FRESH,F3-R2 的成功路径已经闭环。

Findings

F3-R2-R1 — BLOCKING / 非核心 blob 修复失败仍提交新 company current/活动基线

  • test_57_blob_repair_failure_does_not_promote_or_advance_baseline 只向核心 market_close 注入 blob 原子修复失败。核心 provider 异常会令运行 BLOCKED,因而测试虽断言 current/活动基线不变,却没有覆盖 forecast 非核心降级分支,也不能证明交接和文档所称“修复/复验失败均不推进 current/活动基线”。
  • acquisition.py:39,77 将 forecast provider 异常固定降级为非 blocking GAPworkflow.py:443 随后不区分普通预测缺口与内容寻址 blob 完整性修复失败,仍无条件执行 cache.write_baseline(...)。因此 ContentCache.store 虽正确阻止目标 raw/reusable 提升,company baseline 的提交门仍未闭合。
  • 审核员入口级离线反例:先形成合法 cold 基线,仅篡改 forecast_detail blob 并移除其 reusable index,再只对目标 blob 的 repair atomic_write 注入失败。结果为 code=0 / status=DATA_READY_NEEDS_JUDGMENT / output_exists=true / reusable_exists=false / blob_still_corrupt=true,但 current_changed=true,活动基线由 2026-08-01-2562051e84009218e4b6ca8cf03522d19e16663483f2e00f9898b5401c090da8.json 替换为 2026-08-01-d5b82c2a2b120ffdc241e94267e90c1f20b91425ef5b6981a72f27ec0517c015.json。这直接违反前序 required fix 2/3 和本次交接第 2/3 项的“修复/复验失败不推进 current/活动基线”。
  • 工具文档第 117 行、实现与验收证据第 36/93 行、worklog 第 43 行及执行日志第 851 行均把核心单例测试结果泛化为所有 data-kind 的修复失败保证;在非核心反例存在时属于过度声明。

最小 required fixes:

  1. 在缓存/采集/工作流之间保留“内容寻址 blob 修复或写后复验失败”的可判定信号;workflow.py 提交 company baseline/current 前若本次任何 data-kind 出现该类完整性失败,必须跳过 write_baseline,无论该 provider 在产品语义上属于核心阻断还是非核心 gap。核心仍可 BLOCKED;forecast 仍可按冻结合同返回带 gap 的成功输出,但不得新建、替换或归档活动 company baseline/current。
  2. 增加真实入口故障回归,至少分别覆盖一个核心 kind 和一个 forecast 非核心 kind,并覆盖 repair 写失败与写后 read/hash 复验失败:断言目标 reusable 不存在,修复失败对象不被当作健康值,current.json 字节和活动基线完整集合均保持不变。非核心场景若按合同保留成功/gap 输出,可允许正式输出存在,但不得据此推进 company baseline。
  3. 将工具文档、实现与验收证据、worklog 和执行日志中“修复失败均不推进 current/活动基线”的表述收敛到实际实现和上述非核心入口证据;完成后只提交 F3-R2-R1-only 限定复审。

已关闭与保留结论

  • F2-R1=CLOSED;F3=OPEN / F3-R2-R1;F4-R1=CLOSED;F5-R1/V007=CLOSED;F6-R1=CLOSED。F3-R2 的 envelope/逐 kind 隔离、已有 digest 安全修复以及十类成功矩阵继续有效,不因本次 HOLD 回退。
  • 修复与验证均可离线完成;无需真实网络或 real smoke,不授权新增 provider、修改 V1/ana-dev、修改冻结产品语义或扩展范围。

操作手册条件授权

  • 本轮为 HOLD,不得使用管理员既有条件授权同步操作手册。
  • 仅当 F3-R2-R1 关闭并取得限定实现复审 PASS 后,才允许只同步既有授权指定的唯一操作手册文件;同步后仅需该单文件限定确认,无需网络重跑。

Open questions

  • 无。唯一剩余问题已由冻结范围内的非核心入口反例确定复现,并给出最小离线闭环路径。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • 仅 F3-R2-R1 未关闭;开发方完成上述三项最小修复后提交 F3-R2-R1-only 限定实现复审。当前不得同步操作手册,无需真实网络重跑。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-F3-R2-R1-ONLY-REREVIEW-20260802-001

  • 记录时间:2026-08-02T07:39:50+08:00
  • 审核阶段:前序唯一阻断 F3-R2-R1 的限定实现复审。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-F3-R2-R1-ONLY-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序结论:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-F3-R2-ONLY-REREVIEW-20260802-001=HOLD/1,审计文件前序冻结值=140865 bytes / EB3898F146200A7AE6536503E36D4AA323EC44E9BD1815541D4EE2F850023C12
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复审 F3-R2-R1;F3-R2 的成功路径以及 F2-R1、F4-R1、F5-R1/V007、F6-R1 继续冻结,F1、V006、V1/ana-dev 只读结论和产品范围未重开。本轮未访问真实网络、未重跑 real smoke、未读取或修改操作手册正文,未修改受审代码、测试、fixture、执行日志或项目说明。

冻结快照

  • 交接列明的十个变更文件均逐项复算并匹配字节数/SHA-256:cache.py=17353/84E0AE46C4A3E3AFFC495D4328D82C0CB59C62E2CAA1396A11EFCB05E357E6F0acquisition.py=5344/BA693F152A5AEDB6EB5A525398EA5D1D2E97431C0FBA67BCD44078F0006E2C4Bproviders.py=35661/90749F6596483CF7DB5DC861A108146D1716580BDE89038E3C28044275EDAACBworkflow.py=24131/36F958758A5DBA168B68334C6F3D715268C57188E1E2F7A009A49B36F8DEB11D,测试=89292/E45672F51D2F84ECC33AFE3EC25EFF384BE31FCAE6CD8A626A185152787106DC,工具文档=11630/A8DBCDD010512A37E691A012183BAE10005F9D2F1A3DABD9D8D87048B2A99BAF,实现证据=14355/8CE7343CC50C6EF7864888EEE573DEA483C29225B19A248159D99FA0BEF1D214,目录导读=4262/C2415C6DD59B0578499C8B7EE88ED4B84E66958F72FF8C78702DD8328C992B2D,worklog=8111/A240AFA0F5A5C40D2FEE68205EEE07E556703278A20945B4962AB5FF893061E4,执行日志=105925/FE351CF19A6AE7BCBAAF8A3FA51A9140E0DC273328521FED11596235A1DA9246
  • 操作手册仅复算实物,仍为 68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6;本轮没有读取正文或执行同步。

F3-R2-R1 闭环核验

  1. PASScache.py:82,155-187 新增 BlobIntegrityError;已有 digest 对象的 repair 原子写失败和写后 read/hash 不一致均在 raw-index/reusable 提升之前成为明确的内容完整性失败,不再退化为不可区分的普通 provider 缺口。
  2. PASSacquisition.py:39-65 对线程外抛的 BlobIntegrityError 保留 cache_integrity_failure=trueproviders.py:793-825 对 forecast-detail 内部允许降级的异常也单独保留同一信号。因此普通 forecast coverage gap 继续为非阻断缺口,内容对象完整性失败则具有独立提交语义。
  3. PASSworkflow.py:443-455 在调用 write_baseline 前同时要求所有 provider 均无 cache_integrity_failure,并要求十类 data-kind 条目集合完整且其 raw_hash 对应实物全部复算可信。任一核心或非核心完整性失败均跳过 company baseline/current 提交;forecast 仍可按冻结合同保留带 gap 的成功正式输出。
  4. PASStest_57test_58test_59 从真实入口分别覆盖核心 market_close 与非核心 forecast_detail 的 repair 写失败和原子写返回后哈希不一致。每例断言目标 reusable 不存在、current 字节与完整活动基线文件集合不变;非核心场景保持 DATA_READY_NEEDS_JUDGMENT 并保存 cache_integrity_failure=true,核心场景保持诚实 BLOCKED 且无正式输出。原 F3-R2-R1 反例不能再复现。
  5. PASS:工具文档、实现与验收证据、worklog 和开发执行日志已区分普通 forecast coverage gap 与 cache integrity failure,且只声明实际入口矩阵已经证明的 baseline/current 行为;没有继续保留前序过度声明。

独立执行结果

  • F3-R2-R1 聚焦入口:3/3 PASS / Ran 3 tests in 3.256s / OK
  • V2 完整离线回归:59/59 PASS / Ran 59 tests in 131.288s / OKtest_36 只出现冻结的 cleanup warning,测试本身通过。
  • V1 只读回归:10/10 PASS / Ran 10 tests in 0.164s / OK
  • CLI help=PASS;五个变更 Python 文件 strict UTF-8 与只读 compile(...)=PASS;十个变更文件行尾空白=0
  • 治理校验:mbx validate --project project-info --governance=OK / projects=1 / warnings=0
  • fixture-004real-smoke-006 仅保持前序冻结事实;本轮离线修复不改变真实 smoke 的诚实 BLOCKED/E_HISTORICAL_SHARES_UNPROVEN,故没有依据要求网络重跑。

Findings

  • 无阻断 finding。F3-R2-R1 已按前序三项最小 required fixes 完整关闭,没有新增审核范围。

已关闭与保留结论

  • F2-R1=CLOSED;F3-R2-R1=CLOSED,因此 F3=CLOSED;F4-R1=CLOSED;F5-R1/V007=CLOSED;F6-R1=CLOSED
  • F1、V006、V1 只读桥接、无 judgment 终态、16 节、无交易指令、未来信息保护、历史股本诚实 BLOCKED 和既有真实证据限制继续保持;本次 PASS 不把 real-smoke-006 改写为成功 smoke。

操作手册条件授权

  • 本轮实现复审已取得 PASS/0,满足项目管理员既有条件单文件授权的触发条件。允许开发方只同步 outputs/20260730_stock_valuation_guide/股票价格合理性评估操作手册_v1.0.md;不得借此修改其他 outputs、provider、V1/ana-dev、代码、测试或产品范围。
  • 同步完成后只需向本审核任务提交该操作手册单文件限定确认,列明同步前后 bytes/SHA-256、实际差异、UTF-8/行尾与相关文档链接一致性;无需重跑真实网络、fixture、V2/V1 全套或既有 smoke。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • F3-R2-R1 关闭;允许按管理员既有条件授权只同步唯一操作手册文件。同步后提交单文件限定确认即可,无需网络重跑。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-OPERATION-MANUAL-SINGLE-FILE-CONFIRMATION-20260802-001

  • 记录时间:2026-08-02T08:02:30+08:00
  • 审核阶段:最终实现 PASS/0 后的操作手册单文件限定确认。
  • 审核对象:DEV-ANA-STOCK-VALUATION-PIPELINE-V2-20260801-001
  • 原生交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-PIPELINE-V2-OPERATION-MANUAL-SYNC-20260802-001;来源任务 019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序依据:DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-PIPELINE-V2-F3-R2-R1-ONLY-REREVIEW-20260802-001=PASS/0,前序审计文件=146931 bytes / E2E4F0BB85F09056874DFDD14EC55E593AF1B4D38CCDB0B0224A28577C331D7B
  • 执行方:dev.developer.project.secondary / infodev-2
  • 独立确认方:dev.reviewer.project / inforev
  • 限定边界:只检查 outputs/20260730_stock_valuation_guide/股票价格合理性评估操作手册_v1.0.md 的实物、唯一差异、新增章节、编码/行尾和三个本地链接。本轮未重开实现、网络、provider、V1/ana-dev、fixture、smoke 或其他 outputs,未运行 V2/V1 测试,未修改受审操作手册或其他正式产物。

单文件实物与差异

  • 同步前冻结值:68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6
  • 同步后复算值:74401 bytes / 89FF988050A6148755F4B95DF95171DCE7439AD015094561690195B992636CA7,与交接完全一致;strict UTF-8=PASS,无 BOM,全文件统一 LF。
  • 新增章节的实际标题为 ## 三十一、端到端协调层 V2,位于当前文件第 1949—2012 行,共 64 行、5701 bytes。删除该完整插入块后,重建文件精确恢复为 68700 bytes / CCF534DB38F29AFCC61E55FAA47C06829E69E504BDE5CEFF771B10A9AF5AB6E6,从字节层证明旧章节未被改写。
  • 新增 64 行的行尾空白=0;全文件仅第 3、4、5 行存在三处历史行尾空白。因重建前版哈希完全一致,可确认这三处在同步前已经存在且本次未改变。
  • 2026-08-02T07:40:00+08:00 为本次同步窗口起点只读扫描 outputs/,窗口内仅该操作手册一个文件发生修改;没有发现其他 outputs 同步。

内容与链接一致性

  1. PASS:新增章节准确说明 project 级 V2、只读 V1 bridge、ticker + as-of CLI、--judgment 门禁、无 judgment 的 DATA_READY_NEEDS_JUDGMENT 和 V1 --input 兼容;未把数据就绪状态写成方向结论。
  2. PASS:登记公开来源、字段级 A1/raw-hash 回链、上海 as-of、14 日 K 线窗口、历史股本诚实 BLOCKED、4 汇总/3 明细有界 gap 和共享 90 秒 deadline 与已通过工具说明一致。
  3. PASS:十类 FRESH/STALE/MISSING、单 blob 损坏隔离、原子 repair/写后复验,以及任一完整性失败禁止推进 company current/活动基线的表述,与 F3-R2/F3-R2-R1 最终实现审计一致。
  4. PASS:六终态/退出码、正式包、manifest、schema 2 receipt、stdout 最终 task/process 双墙钟,以及 fixture 冷/热目标、V2 59/59、V1 10/10 和 real-smoke-006 的 E_HISTORICAL_SHARES_UNPROVEN 限制均未夸大为真实成功验收。
  5. PASS:章节明确不输出交易指令,也没有新增 provider、操作步骤或产品承诺。
  6. PASS:三个相对链接均从操作手册目录正确解析且实物存在:../../dev-doc/project-doc/股票估值端到端协调层V2.md=11630 bytes../../dev-doc/project-doc/股票估值端到端协调层V2实现与验收证据.md=14355 bytes../../dev/project-dev/stock_valuation_pipeline_v2/README.md=1445 bytes

Findings

  • 无阻断 finding。同步严格限于管理员已授权的唯一操作手册文件,内容与最终 PASS/0 实现及其限制一致。

Open questions

  • 无。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 操作手册单文件同步确认完成;无需重跑网络、fixture、V2/V1 测试或 smoke。本事项的开发审核与授权后单文件确认链已闭环。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003-DESIGN-20260803-001

  • 记录时间:2026-08-03T02:07:13+08:00
  • 审核阶段:请求方真实验收 HOLD/1 后的 V003 限定方案审核。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 恢复请求:meeting_slide_v003_design_review_resume_request,来源任务=019fb7a4-bdfd-79f2-bd6b-e67e2b7d8efd,前序消息=msg_20260801225701882_593be603
  • 请求方反馈:msg_20260801214538194_7196a0fa=HOLD/1;合格主体固定为旧输出 slide_002..slide_038,旧 slide_001slide_039..slide_053 必须排除。
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 需求:ai-media-processor/draft/会议录屏PPT页面提取方案_v0.1.md=9764 bytes / A9FCB3AD03FEC637E287D53C16DB0D22A40156F94579377F2D83324AA630A740
  • V003:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003.md=9128 bytes / C9EB544A7F0E1A160237E3F9C9E426B093AD37D82F22808E8B6A792BE92D1051
  • 实现基线保持未改:dev/project-dev/extract_ppt_slides.py=27482 bytes / 052F5B3BA40EA6C1BB87AF9A7BB4E9C50A84C5A45929540F23606582D30D7D1B;测试基线=29015 bytes / 35CB570ACC6C9EE3AB25EB9B1B15C11691F0902AE23314445B645A1BA3760484
  • 审核外部动作:源视频读取=0,既有 PNG/PDF 图像读取=0,FFprobe/FFmpeg=0,媒体重跑=0,测试运行=0;仅做方案、需求、前序审计、执行账本和代码接入点的静态只读核对。

Findings

  • 无阻断 finding。V003 在既有稳定段、动画合并和全局去重之后、原分辨率 PNG 提取之前增加单一确定性主序列选择,没有重开或改写已通过的 V002 主链。

限定合同核对

  1. PASS:512 箱 RGB 紧凑直方图只随最终逻辑页保存,每页固定约 2 KiB;不保存扫描 RGB 帧,不引入 OCR、人像/人脸识别、语义模型、区域裁剪、遮挡、新依赖或新系统,符合 4 小时流式资源边界。
  2. PASS:主题标记覆盖、单页间隙、最少标记、全局占比和区间密度均有命名常量;分组、门禁、胜出排序及无合格组原样保留均为确定性规则,不按人物或文字语义猜测裁页。
  3. PASS:现有 53 页离线特征证据得到唯一主组:标记旧页 2,4..8,10..38,闭区间为旧页 2..3835/37=0.946 密度、35/53=0.660 全局占比;由区间保留旧 slide_003slide_009 两个单页主题偏离,同时排除旧 slide_001slide_039..053。该证据只冻结规则和预期,不冒充修改后产品验收。
  4. PASS:保留页继续从原视频提取整幅原分辨率画面;算法不分析或修改页面区域,因此有效 PPT 上的小型人物窗口随整页保留,不裁剪、不遮挡。
  5. PASS:实现门禁覆盖直方图合法性、53 页结构桩、各阈值反例、全主题/无合格组保守行为、过滤只调用一次且位于原图提取前、连续重新编号,并要求既有目标/project 回归、中断、原子提交、合成 A完整/B 和短片 5 页合同不得回退。
  6. PASS:实施阶段先只读复用旧 53 张 PNG,通过产品同一 helper 和 select_main_sequence 证明选中旧 2..38,再生成独立 37 页离线 PNG/PDF 与联系表;用户手工生成的 37 页 PDF 不被用作代码实现或产品主链通过证据。
  7. PASS:V003 方案、离线测试和限定实现审核 PASS 前不得运行真实源;实现审核 PASS 后仅允许在独立 real-full-v2.slides 最多完整运行一次。旧 53 页输出、资源证据及归档 PDF保持只读,唯一复验失败即停止媒体重跑,不调参、不扩架构。

后续人工 PDF 状态隔离

  • 本次恢复审核时已知:请求方后来按用户明确指令,人工用旧 slide_002..038 重新生成并替换了 ana-data/news-小郑/ 下的归档 PDF。该人工 37 页文件只解决用户当下阅读需求,不是 V003 代码实现、离线回放或真实产品验收证据。
  • V003 实施仍必须以任务临时根保留的原始 real-full.slides/pages/ 53 张候选 PNG 为离线回放输入;开发员不得读取人工 37 页 PDF 反推索引、不得再次改写该归档文件,也不得以其页数冒充自动过滤通过。

已冻结且不重审的合同

  • V002 稳定段防漂移、动画更新、历史去重、FFmpeg 时间映射与 BaseException 回收、逐页 PDF、正式目录原子提交继续有效。
  • 前序实现审核 PASS/0、目标测试 22/22、project 回归 41/41、完整运行耗时/资源、PNG/PDF RGB 顺序和源四项指纹保护继续冻结;本轮 PASS 不替代 V003 实现审核或请求方最终真实验收。
  • 产品仍为单视频 CLI、一个脚本/一个测试文件/一页用法;不新增 PPTX、JSON、GUI、API、数据库、批处理、转写联动、Skill、GPU 或用户可调阈值。

Open questions

  • 无。V003 已把本轮唯一真实样本失败映射为可实现、可离线复验、可失败停止的最小自动规则;无需在方案阶段运行媒体。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 实现授权:允许 dev.developer.project / infodev 严格按 V003 修改既有单脚本、对应测试与用法,完成全部离线单元/回归及旧 53 页只读回放后提交限定实现审核。
  • 真实媒体门禁:实现审核 PASS 前不得读取或运行源视频;实现审核 PASS 后最多运行一次完整源视频,输出到全新独立目录,由 case_analysis.media_processor 最终验收。

DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003-IMPLEMENTATION-20260803-001

  • 记录时间:2026-08-03T20:44:14+08:00
  • 审核阶段:V003 PASS/0 后的限定实现、离线测试与旧 53 页只读回放审核。
  • 审核对象:DEV-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-20260801-001
  • 开发提交消息:msg_20260803025656382_a037bf27;handoff=HANDOFF-INFODEV-INFOREV-MEETING-SLIDE-V003-IMPLEMENTATION-REVIEW-20260803-001
  • 恢复请求:meeting_slide_v003_implementation_review_resume_request,来源任务=019fb7a4-bdfd-79f2-bd6b-e67e2b7d8efd
  • 前序方案审计:DEV-AUDIT-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003-DESIGN-20260803-001=PASS/0
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 冻结设计:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003.md=9128 bytes / C9EB544A7F0E1A160237E3F9C9E426B093AD37D82F22808E8B6A792BE92D1051,与方案 PASS 快照一致。
  • 实现:dev/project-dev/extract_ppt_slides.py=32133 bytes / 9C4F57ED56B01C9EE2BD68CDC532BC865F73EB3662E01B6600410C5660F1F605
  • 测试:dev/project-dev/test/test_extract_ppt_slides.py=35037 bytes / 63298A48F4F7944514301D0BC0AC619C58464651ABF8F53C23E15E85565106FA
  • 用法:dev-doc/project-doc/会议录屏PPT页面提取工具.md=6729 bytes / C883E7A37846621E9889DDA584D5EC16066A85848A732C3C92CDE891A0485D6C
  • 开发执行记录:DEV-LOG-PROJECT-INFO-MEETING-RECORDING-SLIDE-EXTRACTION-MVP-V003-OFFLINE-IMPLEMENTATION-20260803-001

Findings

  • 无阻断 finding。

实现与冻结合同核对

  1. PASS_palette_histogram 在既有最大 320 像素宽 RGB 扫描帧上生成归一化 float32[512] 颜色直方图;只随最终页候选保留约 2 KiB 特征,不保存 RGB 扫描帧,不改变长视频流式资源模型。
  2. PASS:颜色特征按 FrameFeature -> PageCandidate -> LogicalPage.current_palette 传递;稳定段采用其最终 committed best 的直方图,同页动画只有在页面状态更新时同步替换 palette,保留旧态或历史重复时不会污染最终页特征。
  3. PASSselect_main_sequence 严格实现覆盖率 0.12、最多一个非标记页间隙、至少 8 个标记、全局占比 0.50、区间密度 0.80,并按标记数、区间长度、区间覆盖和、早起点、小颜色箱确定性排序;无合格组或胜出区间覆盖全部候选时原样保留。
  4. PASS:所有逻辑页 palette 在选择前统一检查 512 维、有限、非负和归一化;非法特征显式 SlideExtractionError,空候选显式失败,不存在空列表或静默裁页 fallback。
  5. PASS:产品主链在 scan_video 形成稳定/动画/去重候选后只调用一次序列过滤,并在任何原分辨率提取前完成;下游仍按筛选列表从 slide_001 连续重编号并逐页写 PDF。保留页继续输出整幅原画面,小型人物窗口不裁剪、不遮挡。
  6. PASS:代码差异仅增加颜色特征、纯函数序列过滤和一次主链调用;V002 的稳定段、动画/历史去重、FFmpeg 时间与回收、PDF writer、路径预检、原子目录提交、BaseException 清理、两个公开 CLI 参数均未回退。
  7. PASS:未新增 OCR、人像/人脸识别、语义模型、区域识别、裁剪/遮挡、新模块、新依赖、新参数、JSON、GUI/API、批处理、数据库、Skill、GPU 或额外产品产物;改动文件和开发账本均在 V003 授权范围内。

测试与独立离线复验

  • 审核侧使用捆绑 Python,先把子进程 PATH 置空,从物理上禁用 FFmpeg/FFprobe;py_compile=PASS,CLI help=PASS,公开参数仍只有 video 与可选 --output
  • 目标测试:29 discovered / 26 PASS / 3 SKIP / 0 FAIL。三个 SKIP 精确对应既有 large stderr、VFR/非零 PTS 和中文路径合成视频三项 FFmpeg 集成测试;V003 新增颜色量化、旧 53 页结构、三个保守门禁、全主题保留、非法 palette、主链调用顺序和连续重编号全部实际执行并通过。
  • project 完整离线回归:48 discovered / 45 PASS / 3 SKIP / 0 FAIL;其余工具测试使用桩对象,没有外部媒体动作。
  • 审核侧独立读取旧 real-full.slides/pages/ 的 53 张候选 PNG,以当前产品 _gray_featureselect_main_sequence 复算:selected_count=37,原索引严格为连续 2..38,无多页、少页或乱序。
  • 开发离线证据:sequence-filter-offline-v003-evidence.txt=16268 bytes / A12AF6E0F1B3D4E7CBB2874924E07CA929CF22CE80BC3D7AE7D9E3527B7CDA60;证据声明源视频读取、FFprobe、FFmpeg 均为 0
  • 审核侧对新输出 37 张 PNG 做物理哈希复核:逐页与旧候选 slide_002..038 对应 SHA-256 完全一致,mismatch=0;新 PDF 实物=58570040 bytes / 71C508E94852FBE36AA49DA1B17DDD3F634A82463A06E8AB029709517BB68535,与提交证据一致。
  • 旧 53 页开发 PDF 实物仍为 112814367 bytes / FD289013234317F5D93EA41475C96794581E33CE2C466311E1E3A0DC2F6B299E;请求方人工 37 页归档仍为 58570040 bytes / 71C508E94852FBE36AA49DA1B17DDD3F634A82463A06E8AB029709517BB68535,创建/修改时间未变。新离线 PNG 的物理来源映射已独立证明,不以人工 PDF 页数冒充自动实现。
  • strict UTF-8=PASS,范围内 git diff --check=PASS;治理校验=OK / projects=1 / warnings=0
  • 审核外部动作:源视频读取=0,FFprobe=0,FFmpeg=0,真实/合成视频运行=0;只读取代码、文本证据和旧候选 PNG 做离线特征复算及哈希核对,没有查看或更改任何源视频。

Open questions

  • 无。真实扫描帧与旧 PNG 离线缩放的细微编码差异按 V003 约定留给唯一一次完整源视频验收;这不是继续阻断已正确实现且离线闭环的理由。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • V003 限定实现、离线测试、53→37 自动选择、连续重编号和证据保护均通过;人工 37 页 PDF未替代代码实现。
  • 真实运行授权:允许 dev.developer.project / infodev 对授权的完整源视频最多运行一次,输出必须进入全新独立 real-full-v2.slides 与证据目录;不得覆盖旧 53 页开发输出或人工归档 PDF,不得先做额外短片/预跑,不得在失败后重试或调参。
  • 运行后必须记录 exit、耗时、进程树资源、候选数/最终页数、PNG/PDF RGB 与顺序、联系表、暂存残留及源大小/创建时间/修改时间/SHA-256 前后一致,并沿原任务链交 case_analysis.media_processor 最终验收。本 PASS 不替代最终页面效果验收。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V001-DESIGN-20260804-001

  • 记录时间:2026-08-04T11:35:07+08:00
  • 审核阶段:本地媒体主机响应保护 V001 重型方案独立审核。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • 审核请求:HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-V001-DESIGN-REVIEW-20260804-001;前序授权=HANDOFF-MEDIA-INFODEV-MEDIA-HOST-RESPONSIVENESS-20260804-001 / AUTHORIZED_MINIMAL_IMPLEMENTATION;来源任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • V001:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V001.md=13606 bytes / 7F0F5505EF1D92C73FBE6EDFF382F6E25D95A0ABE6D28A7A366353B88CA80273
  • 产品基线保持冻结:dev/project-dev/extract_ppt_slides.py=32133 bytes / 9C4F57ED56B01C9EE2BD68CDC532BC865F73EB3662E01B6600410C5660F1F605dev/project-dev/transcribe_media.py=20996 bytes / 309166EEFE11A74472EA355CA4AF87F9432A15393B9ABE6D69F7F1054055DE35
  • 审核依据:上游原生授权、项目/common 编码与开发审计规范、项目配置、开发事项总纲/计划/执行日志、V001 及两个产品脚本真实接入点。
  • 审核外部动作:业务源读取=0,FFprobe/FFmpeg=0,合成或真实媒体运行=0,真实片段生成=0,产品代码/测试/用法修改=0;仅做静态只读核对与一次 nvidia-smi 只读字段可用性检查,确认本机 decoder utilization 查询可返回数值。

Findings

F1(阻断,流程/失败合同):CPU 回退触发边界过宽,会把页面算法或业务判定错误伪装成“NVDEC 不可用”

  • V001 第 4.3 节第 91 行把“硬件路径非零退出、无完整帧或其他普通扫描失败”全部纳入一次 CPU 回退。当前扫描函数同时包含 rawvideo 读取、稳定段 detector、页面 classifier 和“未发现稳定页面”等业务判断;“其他普通扫描失败”因此可吞入特征/分类器缺陷、合法的空业务结果、内存或清理异常。
  • 这会改变既有错误语义并用 fallback 掩盖主路径错误,违反上游“硬件路径不可用才回退”及冻结页面算法/失败合同。即使 CPU 第二次扫描成功,首轮算法错误也会被错误宣告为硬件不可用;若第二次失败,原始根因还会被 CPU 错误覆盖。
  • required_fix:在修订方案中冻结硬件可归因的内部失败边界。只有硬件 decoder/transfer 的启动失败、FFmpeg 非零退出、零帧或半帧管道失败等外部 NVDEC 失败才允许触发一次 CPU 扫描;完整解码后的 detector/classifier/页面合法性、文件/日志、清理及其他业务异常必须原样传播,不得回退。“完整扫描但无稳定页面”继续走既有业务失败,不得改跑 CPU。补桩测试分别证明:硬件失败恰好一次 CPU;算法/分类器/空业务结果/KeyboardInterrupt/SystemExit 均为零次 CPU;CPU 再失败无第三次尝试且保留可定位根因。

F2(阻断,业务合同/测试):现有门禁只证明 NVDEC 命令能启动,没有证明 H.264/H.265 下页面结果不漂移

  • V001 冻结稳定段、动画合并、去重、主课件序列、PNG/PDF 和时间映射不变,但第 6.3 节只要求一个 2 秒 H.264 NVDEC exit=0 探针;这只能证明 decoder/filter 管道可执行。NVDEC 与软件解码在色彩转换、像素舍入和帧输出上可能有差异,而当前页面算法使用 MAD、changed-ratio、颜色直方图等阈值,单纯复跑既有单元测试不能证明切换 decoder 后逻辑页、时间戳和最终顺序不变。H.265 实际路径也只有静态映射,没有实际合成链路证据。
  • 这不满足 common 性能规范“优化必须证明结果不漂移”和上游业务输出冻结合同,且唯一真实 590 秒运行不能同时再跑 CPU 基线来补足差分证据。
  • required_fix:不读取业务源,在实现阶段增加短小、确定性的 H.264 与 H.265 合成页序列(至少覆盖稳定页、动画更新、重复页和页面切换);分别用实际 NVDEC 与强制受限 CPU 路径执行同一 _scan_once/主序列链,断言采样数、逻辑页数、选中页顺序和相对时间戳一致,并验证最终 PNG/PDF 页数、顺序和 RGB 尺寸合同。命令测试同时断言 -hwaccel/-hwaccel_output_format/-c:v/-threads 位于输入 -i 之前,CPU 的解码线程参数同样属于输入侧;H.264/H.265 均须留下实际 decoder 路径证据。像素级允许的非业务差异无需逐字节冻结,但任何页面/时间/顺序漂移必须阻断。

F3(阻断,证据/采样):500 ms 门禁可在采样密度不足时形成零滚动窗口并空通过,10 秒条件也未按实际时间计算

  • V001 第 7.3 节要求 5 秒窗口至少 10 个连续样本,却仅把单次间隔 >1500 ms 判无效;如果实际间隔持续为 0.8—1.5 秒,任一 5 秒区间都可能不足 10 个样本,从而没有“完整窗口”,而“所有完整窗口 <85%”会成为空集合真值。固定“连续 20 个样本≈10 秒”在允许的抖动范围内也可能覆盖 10—30 秒,不能严格证明上游的连续 10 秒门禁。
  • 当前合同没有冻结首个性能计数器样本的 warm-up、有效窗口非空和扫描阶段覆盖率;因此采样器可生成字段齐全但 CPU gate 不可判定的假 PASS。
  • required_fix:以实测时间戳冻结非空、非空过的采样合同。至少要求:丢弃并标记 counter warm-up;从扫描 FFmpeg 被观察到至其退出形成连续覆盖;每个进入判定的 5 秒尾窗必须有不少于 10 个有效样本,窗口数必须 >0,任何密度不足/缺口直接 sampling_valid=false;高 CPU 连续段按样本实际起止时间累计,持续时间达到 10.000 s 即失败,而不是按固定 20 行近似。resource_samples.csv/resource_summary.json 必须保存窗口数、窗口成员、最大间隔、高 CPU 段起止/持续时间,并用合成 CSV 单测覆盖临界 <85/==85、恰好 10 秒、稀疏采样和零窗口反例。

已通过且冻结的合同

  1. PASS:只修改两个现有产品脚本、对应测试/说明与一个测试侧只读采样器,不增加服务、API、GUI、数据库、调度器、产品 package 或公开参数;共享保护 owner 放在既有 transcribe_media.py 的模块边界可实施。
  2. PASS:两个 CLI 在外部动作前共用非阻塞 Windows named mutex,根 Python 与默认 FFprobe/FFmpeg BelowNormal,异常退出释放 mutex、恢复失败不覆盖业务异常或已提交成功的生命周期方向正确;实现审核仍需核对精确错误映射和句柄回收。
  3. PASS:4 个输入解码线程、2 个扫描滤镜线程及所有 FFmpeg 入口覆盖范围明确;转写模型/参数、页面算法、公开 CLI、业务输出、源保护、原子提交和失败清理均声明冻结。
  4. PASS:实现审核前只允许离线/合成测试;实现审核 PASS 后才可只读生成一个 <=600 s 独立片段并运行一次 PPT 提取,禁止 3.57 小时/4 小时媒体、并行转写、重试、调参或覆盖旧证据,真实资源验收顺序合理。
  5. PASS:资源证据同时要求整机 CPU、任务树 CPU/RAM、根与后代优先级、GPU/decoder 利用率、全局及任务 PID 专用显存、原始命令和 stdout/stderr;硬件路径以 decoder 命令/日志为主证据,未把显存变化冒充 NVDEC。

Open questions

  • 无。三个问题均可在方案与离线/合成测试合同内最小闭环,不需要业务源、真实片段或产品代码预实施。

结论

  • 审计状态:HOLD
  • 阻断问题数:3
  • 根因分类:流程/失败合同 1;业务合同/测试 1;证据/采样 1
  • 实现授权:DENIEDdev.developer.project / infodev 不得修改两个产品脚本、不得生成真实片段、不得运行业务媒体;只允许修订方案并补足 F1—F3 的离线/合成验收合同后提交一次限定复审。
  • 复审边界:只复审 F1—F3 闭环及本记录“已通过且冻结的合同”是否回退;不得新增产品范围或要求真实媒体。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002-DESIGN-REREVIEW-20260804-001

  • 记录时间:2026-08-04T12:09:02+08:00
  • 审核阶段:V001 HOLD/3 后的 V002 限定方案复审。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • 复审请求:HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-V002-DESIGN-REREVIEW-20260804-001;前序回执=HANDOFF-INFOREV-INFODEV-MEDIA-HOST-RESPONSIVENESS-V001-DESIGN-REVIEW-RESULT-20260804-001;来源任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 前序方案:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V001.md=13606 bytes / 7F0F5505EF1D92C73FBE6EDFF382F6E25D95A0ABE6D28A7A366353B88CA80273
  • 前序审计:DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V001-DESIGN-20260804-001=HOLD/3;当时审计文件=171737 bytes / C9857D954230147A316DD72E2EAC0798C13865859125C566FCC14196AABB6D28
  • V002:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002.md=14551 bytes / 5BCA39F8B397364E10682780515BCA7983EAC8F003DF54D6A268D852545BC332;strict UTF-8=PASS,BOM=NO
  • 产品与测试继续冻结:extract_ppt_slides.py=32133/9C4F57ED56B01C9EE2BD68CDC532BC865F73EB3662E01B6600410C5660F1F605transcribe_media.py=20996/309166EEFE11A74472EA355CA4AF87F9432A15393B9ABE6D69F7F1054055DE35;对应测试=35037/63298A48F4F7944514301D0BC0AC619C58464651ABF8F53C23E15E85565106FA17227/87BD890436789BE2F813ADC57A37168A3C5A76C7815F2DA9B2FB04D4DE9D4512
  • 复审边界:仅检查前序 F1—F3 及 preserved contracts 是否回退;未重开 V001 已通过的模块边界、产品范围或真实验收次数。
  • 复审外部动作:业务源读取=0,FFprobe/FFmpeg=0,合成/真实媒体运行=0,真实片段生成=0,产品代码/测试修改=0;只读检查 V002、前序审计、账本和冻结实物哈希。

Findings

  • 无剩余阻断 finding。

F1—F3 闭环

  1. PASS / F1:V002 第 2 节新增的私有 HardwareDecodePathError 只覆盖 NVDEC Popen 启动、非零退出、零帧和半帧四类硬件可归因失败;页面特征、detector/classifier、动画/去重/主序列、完整扫描无稳定页、文件/提交/暂存/清理以及 KeyboardInterrupt/SystemExit 均原类型传播且 CPU 调用数为 0。外层只捕获该私有类型并恰好执行一次全新 4/2 CPU 扫描,CPU 失败后没有第三次尝试;首个硬件根因留在唯一告警、CPU 根因保持最终失败,关闭了“算法错误伪装成硬件不可用”的前序缺口。
  2. PASS / F1 tests:启动失败、非零、零帧、半帧、detector、classifier、空结果、文件/清理、中断和 CPU 二次失败均有明确调用次数、对象身份/退出码、异常类型/因果链及无第三次尝试断言;测试合同足以验证异常包络而不要求真实媒体。
  3. PASS / F2:V002 第 3 节固定同一 320x180 / 1 fps RGB 页序列,包含稳定页、动画更新、页面切换和历史重复;H.264/H.265 分别实际编码后,各自执行 NVDEC 与 forced 4/2 CPU 的同一扫描、稳定/动画/去重、主序列、PNG/PDF 链。两种 codec 都必须在当前验收主机实际 PASS,能力缺失只能诚实 SKIP,不能伪造通过。
  4. PASS / F2 assertions:每种 codec 均比较采样数、稳定候选/动画更新、逻辑页、选中标识/顺序、相对时间戳 <=0.001 s、PNG 连续编号/RGB/尺寸和 PDF 页序/RGB 尺寸;不把压缩字节差异升级为业务阻断,但任何页数、时间、顺序、模式或尺寸漂移都阻断。硬件 decoder、输出格式和输入解码线程均明确位于目标 -i 前,CPU 路径无硬件参数且保留 4/2 上限,关闭了“只证明命令能启动”的前序缺口。
  5. PASS / F3:V002 第 4 节把首次性能计数器行标为 warm-up 无效行,以扫描 FFmpeg 的实际出现和退出限定连续采样区间;每个有效样本代表真实时间区间,非递增、间隔 >1.5 s、读取/归属/字段缺失均令 sampling_valid=false
  6. PASS / F3 windows:5 秒尾窗按样本区间重叠秒数加权,要求完整覆盖 5.000 s、至少 10 个不同有效成员、窗口最大间隔 <=1.5 s、严格 <85.0window_count>0;密度不足或零窗口不能空通过。连续 >=85.0 按实际区间累计,>=10.000 s 即失败,不再用固定 20 行近似。
  7. PASS / F3 evidence:逐窗成员/覆盖/最大间隔/加权 CPU、最差窗口以及高 CPU 段起止/时长均固定落盘;合成 CSV 覆盖 <85==859.999/10.000 s、0.8—1.5 秒稀疏、零窗口、warm-up、首末覆盖、倒序和大缺口,足以证明非空性、边界值与无假 PASS。

Preserved contracts

  1. PASS:V002 只修订 F1—F3;V001 中与之不冲突的公共 owner、两个 CLI 共用非阻塞 Windows named mutex、根 Python 与默认 FFprobe/FFmpeg BelowNormal、4 decode/2 filter 线程及其异常释放/优先级证据继续有效。实现审核仍必须验证 V001 已冻结的双进程 mutex、句柄清理、默认 run/Popen creation flags 和外部动作前失败门禁。
  2. PASS:公开 CLI/业务函数签名、页面稳定/动画/去重/主题算法、PNG/PDF、转写模型/分块/时间轴、FLAC/TXT/SRT/JSON、源保护、拒绝覆盖、原子提交和失败清理均未修改或放宽。
  3. PASS:不新增产品模块、依赖、参数、服务、API、GUI、数据库、批处理或调度器;唯一新文件仍限测试侧只读资源采样器。
  4. PASS:方案 PASS 后只开放产品最小实现和离线/合成测试;独立实现审核 PASS 前仍禁止读取业务源、生成真实片段或运行真实媒体。后续真实门禁继续是至多一个 <=600 s 独立片段和一次 PPT 提取,禁止长媒体、并行转写、重试、调参或覆盖旧证据。

Open questions

  • 无。V002 已在纯方案和离线/合成证据边界内完整闭环 F1—F3,不需要提前触发真实媒体。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 方案基线:后续实现必须同时遵守未冲突的 V001 与 V002;发生冲突时以 V002 第 2—4 节为准。
  • 实现授权:允许 dev.developer.project / infodev 严格按 V001+V002 修改两个现有产品脚本、对应测试/说明及测试侧只读采样器,完成 F1 桩、H.264/H.265 合成差分、F3 合成 CSV、目标测试和 project 全回归后提交限定实现审核。
  • 真实媒体门禁:本 PASS 不授权业务源读取、真实片段生成或真实媒体运行;只有后续独立实现审核 PASS 后,才可执行已冻结的一次 <=600 s 片段和一次 PPT 运行。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002-IMPLEMENTATION-20260804-001

  • 记录时间:2026-08-04T13:09:05+08:00
  • 审核阶段:V001+V002 组合合同的限定实现与离线证据审核。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • 审核请求:HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-V002-IMPLEMENTATION-REVIEW-20260804-001;前序方案回执=HANDOFF-INFOREV-INFODEV-MEDIA-HOST-RESPONSIVENESS-V002-DESIGN-REREVIEW-RESULT-20260804-001;来源任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 组合方案:V001=13606 bytes / 7F0F5505EF1D92C73FBE6EDFF382F6E25D95A0ABE6D28A7A366353B88CA80273;V002=14551 bytes / 5BCA39F8B397364E10682780515BCA7983EAC8F003DF54D6A268D852545BC332
  • 实现实物:extract_ppt_slides.py=38111/9AD12F95C0615034B1BB9C72F79DFC5F1150DE33E2DD8889CFF14534509BB41Atranscribe_media.py=25087/E889D78DEEEFBC061CD0F952157C83997704CD46AF833AAF452293B7434D96FD
  • 测试/采样器:test_extract_ppt_slides.py=55492/C18A2ACB79A4C74E5D93184723E17E4C13683CA52B0CD86B2AD47AFB6DD75CEAtest_transcribe_media.py=19507/1C58C4C9ED45A1276A7CFF4D7E376F133446F506CB1A4890D231D00A229B82ACmonitor_media_host_responsiveness.ps1=28062/EAB0479662C29EA52CE56619EA9E27491DDE40AC6656E2391E82DE2356B27AB7
  • 用法说明:会议录屏PPT页面提取工具.md=10145/BEA0B27D2B3CFA38B896963A9C1327A86EAECCA6110052D89EF489D6CFE61FA4本地视频语音转写工具.md=6788/286F3395ADA8FCEC3DDA04185929D99A773E4A1B7250508254B2F645647804E5
  • 开发账本:DEV-LOG-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002-OFFLINE-IMPLEMENTATION-20260804-001;提交时 dev-doc/开发执行日志.md=122695/274511B4FF5C3DA021DF52D1490B8097EEFEA761CE3321FC4E42C65D2E14A623
  • 独立复跑:py_compile=PASS;两个 CLI help=PASS;PowerShell parser=PASS;目标测试=38+14=52/52 PASS;project discover=59/59 PASS;H.264/H.265 的 NVDEC/forced CPU 四链均在当前主机实际执行且返回成功,业务摘要均为 19 samples / 5 stable candidates / animation_updated 1 / historical_duplicate 1 / new_page 3 / selected 6,10,18 s
  • 文本/治理:范围内文件 strict UTF-8=PASS、BOM=NOmbx validate --project project-info=OK / projects=1 / warnings=0
  • 审核外部动作:业务源读取=0,业务 FFprobe/FFmpeg=0,真实片段生成=0,真实媒体运行=0,长媒体运行=0;独立复跑只执行获授权的离线桩与临时目录 H.264/H.265 合成媒体。

Findings

F1(阻断,失败合同):业务异常与子进程清理异常同时发生时,业务根因仍会被替换

  • extract_ppt_slides.py_scan_video_once 在捕获任意普通 Exception 后,只要 _attempt_reap 返回清理错误,就统一新建 SlideExtractionError。这会把 detector/classifier/特征计算等业务异常的对象、类型、消息和 traceback 改写,与 V002 第 2.1 节“清理异常只作诊断附注、不得覆盖业务根因”冲突。
  • 独立故障注入以 _gray_feature -> ValueError('business-root')_attempt_reap -> OSError('cleanup-failed') 同时发生,实际得到 caught_type=SlideExtractionError / same_object=False / cause_type=ValueError,证明现有绿色用例没有覆盖组合失败。
  • required_fix:按活动异常域处理 reap/close 失败。业务/算法异常及 KeyboardInterrupt/SystemExit 必须传播原对象、原类型和原 traceback,清理错误只能使用 note/只读诊断属性附加;纯清理失败可以保持既有用户错误;硬件失败叠加清理失败仍须禁止 CPU 回退并保留双重诊断。补充“feature/detector/classifier + reap 失败”“CPU 根因 + reap 失败”“KeyboardInterrupt/SystemExit + reap 失败”和“硬件根因 + 清理失败”离线桩,逐项断言对象身份、CPU 调用数和无第三次尝试。

F2(阻断,冻结合同回退):H.264/H.265 的 codec-only NVDEC 映射被未经方案批准的像素格式 allowlist 改写

  • V001 第 4.2 节冻结 h264 -> h264_cuvidhevc -> hevc_cuvid,V002 第 2.2 节继续规定 H.264/H.265 先进入硬件尝试;只有其他 codec 才直接使用受限 CPU。当前 _decoder_for_codec 新增 pix_fmt allowlist,并由测试明确断言 h264/gbrp -> None,从而让仍属于 H.264/H.265 的输入在没有发生硬件失败时直接跳过 NVDEC。
  • 用法说明同步写成“像素格式受本机验证支持时”才优先 NVDEC,说明这不是单纯记录字段,而是已经改变了通过审核的产品选择合同;10-bit HEVC 映射又没有对应 10-bit 合成链证明固定 hwdownload,format=nv12 可用。
  • required_fix:最小修复是恢复 codec-only 决策:所有 h264/hevc 都先组装并尝试相应 cuvid 命令,实际不支持的 surface/filter 失败再严格通过 HardwareDecodePathError 做唯一一次 4/2 CPU 回退;pix_fmt 可以只作证据字段,不得改变选择。同步删除相反测试/说明,并增加非 yuv420p 的 H.264/HEVC 命令选择桩。若确需像素格式 allowlist,必须先提交限定方案修订及各 allowlist 分支的实际合成证据,不能在本实现复审中默认接受。

F3(阻断,资源采样正确性):采样器不能唯一识别稳定页扫描 FFmpeg,CPU 窗口和 NVDEC 主证据均可能错归属

  • 采样循环把任务树中所有进程名为 ffmpeg 的 PID 都设为 scan_ffmpeg_present,没有利用命令区分长扫描 rawvideo/fps=1 与后续逐页 -frames:v 1 提取。真实 PPT 运行至少包含这两类 FFmpeg,故 scan_end 可能被后续逐页进程延长,或在多个短进程之间形成错误阶段;当前分析器也只取所有 active 行,未固定唯一扫描 PID及其退出后的同一采样周期。
  • resource_acceptance_pass 的 NVDEC 判定只匹配 stdout 的 NVDEC/CUDA (...) 文本,没有核验捕获到的扫描 argv 是否含 -hwaccel cuda、正确 cuvid decoder、输入侧 -threads 4-filter_threads 2/-filter_complex_threads 2hwdownload;因此日志文本存在但实际命令不满足合同时仍可假 PASS。运行模式在资源门禁失败但目标进程 exit=0 时仍以 0 退出,也没有把门禁失败提升为可靠终态。
  • required_fix:以首次匹配产品稳定扫描命令形状的唯一 FFmpeg PID 为 scan owner,冻结其完整 argv/decoder,连续记录至观测到该 PID 退出的同一采样周期,后续逐页 FFmpeg 不得重新打开或延长 scan 区间。resource_acceptance_pass 必须同时核验 stdout 和该唯一 argv 的 NVDEC/线程/滤镜结构;资源门禁失败时采样器返回明确非零,同时在 summary 保留原目标 exit。增加纯离线进程时间线/命令桩,覆盖“扫描进程 -> 间隔 -> 多个逐页进程”、CPU 回退告警、伪造 stdout 和缺少硬件参数,证明阶段及主证据不能误归属。

F4(阻断,证据模式):逐样本与汇总缺少 V001+V002 固定的必填资源证据

  • resource_samples.csv 只保存解析后的三个 GPU 数值和 PID 专用显存总数,没有 V002 要求的 GPU 原始查询状态、显式 decoder 字段,也没有 V001 要求的 nvidia-smi 原始行、任务 PID 的 GPU Process Memory 原始实例名和逻辑处理器数。
  • resource_summary.json/run_summary.json 没有有效扫描样本数、最长高 CPU 段的起止对象、任务 CPU/RAM 峰值、GPU/decoder 利用率峰值、全局显存峰值和任务 PID 专用显存峰值;这不足以完成 V002 第 4.4 节和 V001 第 7.2—7.3 节规定的真实资源证据包。
  • required_fix:在逐样本中落盘原始 nvidia-smi 行/解析状态、任务 PID GPU 实例名、decoder、逻辑处理器数及完整必填字段;在汇总中落盘有效扫描样本数、扫描 PID/decoder/完整命令、最大间隔、最差窗口、最长高段起止/时长以及上述 CPU/RAM/GPU/decoder/显存峰值。任何查询/字段/解析缺失都必须 sampling_valid=false,并增加 schema 完整/缺字段反例。

F5(阻断,离线门禁覆盖):已冻结的 F3 边界与双 CLI mutex 入口没有被提交测试完整执行

  • F3 合成 CSV 当前覆盖 <85/==859.999/10.000 s、稀疏、零窗口和 1.6 s 缺口,但没有 V002 第 4.4 节明确要求的时间戳倒退、首/末覆盖归属以及必填字段缺失反例;分析器还直接信任 CSV 的 interval_seconds,未验证它与相邻时间戳/previous_valid_timestamp_utc 一致。
  • Windows 双进程测试只在子进程直接调用共享 media_host_guard(),没有按 V001 第 6.2 节分别执行两个真实 CLI 入口,因而没有证明 PPT 与转写各自在路径解析、暂存、FFprobe/FFmpeg、模型动作之前由 busy 错误抢先终止;Win32 获取/优先级失败时的 Release/Close 也没有故障桩。
  • required_fix:补齐时间戳倒退、首/末覆盖、interval/previous 不一致、必填字段缺失的 Analyze 反例;真实两进程无媒体测试应由 A 持锁,B 分别调用两个 CLI 并断言各自固定 busy 退出/错误且外部动作和暂存均为 0,随后证明锁可重取、优先级恢复。再以 Win32 wait/get/set 失败桩验证句柄关闭和无外部动作。全部仍是离线测试,不需要业务源或真实媒体。

已通过且冻结的实现

  1. PASS:两个 CLI 复用 transcribe_media.py 中同一个 media_host_guard、mutex 名和 creation-flags helper;guard 位于业务函数调用外层,静态顺序满足 busy/优先级错误先于路径、暂存、FFprobe/FFmpeg和模型动作。
  2. PASS:默认 subprocess.run/Popen 均使用 BelowNormal creation flag;完整音轨、音频块、PPT 扫描和逐页提取均含输入侧 -threads 4,扫描还含 -filter_threads 2/-filter_complex_threads 2
  3. PASS:H.264/H.265 yuv420p 合成链在当前主机实际完成 NVDEC 与 forced CPU 差分,采样/候选/动画/去重/主序列/时间/PNG/PDF 合同一致;这项通过结果不抵消 F2 的选择合同回退。
  4. PASS:公开 CLI、页面/转写算法阈值、PNG/PDF、FLAC/TXT/SRT/JSON、large-v3 CUDA/float16/VAD、1200 秒核心块/5 秒重叠、源保护、拒绝覆盖、原子提交和失败清理的其余路径未发现回退;未新增产品模块、依赖、参数、服务、API、GUI、数据库或调度器。
  5. PASS:提交哈希、UTF-8、语法、CLI help、52 个目标测试、59 个 project 测试和治理校验均可独立复现;绿色测试只能证明现有覆盖通过,不能覆盖 F1—F5 指出的缺失组合与真实证据误归属。

Open questions

  • 无。五项均可通过最小代码/采样器/离线测试修复闭环,不需要读取业务源、生成真实片段或运行真实媒体。

结论

  • 审计状态:HOLD
  • 阻断问题数:5
  • 根因分类:失败合同 1;冻结产品合同 1;采样阶段/主证据 1;证据模式 1;离线覆盖 1
  • 真实媒体授权:DENIED。不得读取业务源、生成 <=600 s 真实片段、运行 PPT 真实资源验收、重试、调参、并行转写或改跑长媒体。
  • 最小修复授权:只允许在既有两个产品脚本、对应测试、测试侧采样器和两份用法说明内闭环 F1—F5;不得扩展产品范围。修复后提交一次 F1—F5 限定实现复审,继续保持业务媒体动作=0。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002-F1-F5-IMPLEMENTATION-REREVIEW-20260804-001

  • 记录时间:2026-08-04T14:12:57+08:00
  • 审核阶段:前序实现 HOLD/5 的 F1—F5 限定实现复审;只检查修复闭环与已通过合同是否回退。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • MB-X 请求消息:msg_20260804135235824_b43d3af0;请求交接=HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-V002-IMPLEMENTATION-REREVIEW-20260804-001;前序回执=HANDOFF-INFOREV-INFODEV-MEDIA-HOST-RESPONSIVENESS-V002-IMPLEMENTATION-REVIEW-RESULT-20260804-001;来源任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 组合方案保持:V001=13606 bytes / 7F0F5505EF1D92C73FBE6EDFF382F6E25D95A0ABE6D28A7A366353B88CA80273;V002=14551 bytes / 5BCA39F8B397364E10682780515BCA7983EAC8F003DF54D6A268D852545BC332
  • 复审实物:extract_ppt_slides.py=38070/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30Atranscribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8Ftest_extract_ppt_slides.py=65196/50FCDCE8FF75711CF75599D9207C376DE8575C8EF193B9F81CC0F5B50CF02A4Etest_transcribe_media.py=23080/1BD0D8B1392BD69F72CBCE1A279BBEF2B36B813E03147E298D366FEBC4524E95monitor_media_host_responsiveness.ps1=43771/6B038A4A44F874A93DAA5B10F6B59CD5BD9DD246A5ADFA0BD109F7CAFF8AFEAE
  • 用法说明:会议录屏PPT页面提取工具.md=10630/5A0AC2B050E6E441D49E82AD55F4F1B12761EE9D26FC50C50F38784E5402C64E本地视频语音转写工具.md=6788/286F3395ADA8FCEC3DDA04185929D99A773E4A1B7250508254B2F645647804E5
  • 开发账本:DEV-LOG-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-V002-HOLD5-REPAIR-20260804-001;提交实物=126430 bytes / 5CEEF9820AC9BB7352FB1481110B26EF857494F16F45D485C7420FFCAA47DBC4
  • 独立复跑:py_compile=PASS;PowerShell parser=PASS;两个 CLI help=PASS;目标测试=55/55 PASS / 21.715 s;project discover=62/62 PASS / 22.899 s;项目测试使用 PYTHONUTF8=1 保证父测试进程与中文路径子 CLI 的一致 UTF-8 解码。
  • 合成证据:H.264/H.265 的 NVDEC/forced CPU 四条授权合成链均实际返回成功,继续得到 19 samples / 5 stable candidates / animation_updated 1 / historical_duplicate 1 / new_page 3 / selected 6,10,18 s,PNG/PDF 页数、顺序、RGB 和尺寸一致。
  • 治理:mbx validate --project project-info=OK / projects=1 / warnings=0
  • 复审外部动作:业务源读取=0,业务 FFprobe/FFmpeg=0,真实片段生成=0,真实媒体运行=0,长媒体运行=0;只运行获授权的离线桩、临时合成 H.264/H.265 和合成 CSV。

Findings

F3-R1(阻断,采样主证据与运行态离线门禁):NVDEC argv 校验仍可放行缺失冻结输入参数的命令,运行模式的阶段/日志/终态也未形成提交测试

  • V002 第 3.3 节冻结 -hwaccel-hwaccel_output_format-c:v <decoder> 和输入侧线程参数必须位于目标 -i 之前;V002 第 4.4/5 节又要求真实验收以该唯一扫描 argv 作为 NVDEC 主证据。当前 Test-NvdecScanCommand 只验证 -hwaccel cuda、cuvid、threads=4、两个滤镜线程参数和 hwdownload,没有验证 -hwaccel_output_format cuda,因此主证据判定不完整。
  • 提交的“有效低 CPU”合成 CSV 命令本身只有 -hwaccel cuda -c:v h264_cuvid ...,缺少 -hwaccel_output_format cuda,但 low["sampling_valid"] 仍断言为真并在独立 55/5562/62 复跑中通过;这是可复现的假放行,不是仅有测试缺口。
  • 前序 F3 的 required_fix 还明确要求纯离线覆盖“稳定扫描 PID -> 间隔 -> 后续逐页 FFmpeg”、CPU 回退日志、伪造 NVDEC stdout、缺硬件参数以及“目标 exit=0、资源失败时采样器 exit=3 且保留 target exit”。当前唯一采样器测试只调用 -AnalyzeSamplesPath;没有运行模式桩或进程时间线桩证明 $ScanPid/$ScanPhaseClosed/$NvdecLogEvidence/$ResourcePass 的组合终态。静态实现方向合理,但未满足已冻结的非空执行证据门。
  • required_fix:在 Test-NvdecScanCommand 中把 -hwaccel_output_format cuda 纳入唯一输入 -i 前的强制校验,并增加删除/错值/置于 -i 后的合成 CSV 反例;再用无业务媒体的进程/命令桩执行采样器 Run 控制流,覆盖上述扫描后逐页进程、伪 stdout/CPU 回退和 exit=3/target-exit 保留。不得读取或运行真实媒体。

F4-R1(阻断,schema 完整性门禁):采样器已写出的冻结必填列没有全部进入缺失校验

  • V002 第 4.1 节把任务 PID 集、任务树 CPU/RAM、优先级、GPU 原始状态和实际命令列为逐样本必填字段;前序 F4/F5 的 required_fix 要求任何必填列缺失都使 sampling_valid=false。当前采样行实际写出 task_pidsffmpeg_command_linesnvidia_smi_compute_task_rows,但 Analyze-ResourceSamples$RequiredColumns 没有这三列;删除任一列仍不会产生 required_column_missing_*
  • 现有缺列反例只删除 gpu_query_raw_rows,不能证明上述冻结列的 schema 门禁。实际 Run 生成器目前会写这些列,但验收分析器仍允许证据包被删列后继续判有效,故“缺列即无效”没有闭环。
  • required_fix:把 task_pidsffmpeg_command_linesnvidia_smi_compute_task_rows 纳入 $RequiredColumns 和扫描阶段非空校验,并逐列增加最小 Analyze 反例;不改变资源阈值,不需要真实媒体。

已关闭且继续冻结

  1. F1=PASS:活动业务/CPU/KeyboardInterrupt/SystemExit 异常与 reap/close 失败并发时保留同一异常对象,清理诊断只作 note;硬件根因叠加清理失败时禁止 CPU,CPU 二次失败无第三次。
  2. F2=PASS:恢复 codec-only;所有 H.264/H.265 分别先选 h264_cuvid/hevc_cuvidpix_fmt 仅作证据,非支持 surface 由实际硬件失败进入唯一一次 4/2 CPU。
  3. F5=PASS(除上列仍依赖 F3/F4 的采样器运行态/schema 证据外):时间戳/interval/previous 重算反例、首末覆盖、两个真实 CLI busy 抢先终止以及 Win32 wait/get/set 句柄释放桩均通过。
  4. 已通过合同继续冻结:共享非阻塞 named mutex、根 Python/默认 FFprobe/FFmpeg BelowNormal、4/2 线程;公开 CLI、页面/转写算法与业务输出、large-v3 CUDA/float16/VAD、1200 秒核心块/5 秒重叠、源保护、拒绝覆盖、原子提交和失败清理未发现回退;无新增产品模块、依赖、参数或服务。

结论

  • 审计状态:HOLD
  • 阻断问题数:2(F3-R1=1;F4-R1=1)。
  • 真实媒体授权:DENIED。当前不得读取业务源、生成 <=600 s 真实片段、运行 PPT 真实资源验收、重试、调参、并行转写或改跑长媒体。
  • 最小修复授权:只修复测试侧采样器及对应离线测试/说明中的上述两项;产品脚本和已关闭 F1/F2/F5 合同继续冻结。修复后只提交 F3-R1/F4-R1 限定复审,业务媒体动作继续保持 0
  • Open questions:无;两项都可由最小采样器/离线测试修改闭环,不需要外部输入或真实媒体。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-F3-R1-F4-R1-REREVIEW-20260804-001

  • 记录时间:2026-08-04T14:39:28+08:00
  • 审核阶段:前序 HOLD/2 后的 F3-R1/F4-R1-only 限定实现复审。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • MB-X 请求消息:msg_20260804143248490_0303f8fc;请求交接=HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-F3-R1-F4-R1-REREVIEW-20260804-001;前序回执=HANDOFF-INFOREV-INFODEV-MEDIA-HOST-RESPONSIVENESS-V002-F1-F5-IMPLEMENTATION-REREVIEW-RESULT-20260804-001;来源任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复审 F3-R1/F4-R1;两个产品脚本、F1/F2/其余 F5 和全部 preserved contracts 均按前序结论冻结。本轮未读取业务源、未生成真实片段、未运行真实媒体或长媒体。
  • 冻结产品:extract_ppt_slides.py=38070/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30Atranscribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8Ftest_transcribe_media.py=23080/1BD0D8B1392BD69F72CBCE1A279BBEF2B36B813E03147E298D366FEBC4524E95本地视频语音转写工具.md=6788/286F3395ADA8FCEC3DDA04185929D99A773E4A1B7250508254B2F645647804E5,均与前序冻结哈希一致。
  • 本轮实物:test_extract_ppt_slides.py=72307/425F4C5D2C00F2E7260343CD961DCE0DC635184AE93F79446D12A8D4D489B06Cmonitor_media_host_responsiveness.ps1=43995/8BAFFCE83980542F2FA7ED8BC939114CB09E77E7DB880E4DAD2CD66367B9D040会议录屏PPT页面提取工具.md=10884/E9ABE70093728A92653CF8C8E14C59725E5CDF9BD5285648695F0B178E78BA3B
  • 开发账本:DEV-LOG-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-F3-R1-F4-R1-REPAIR-20260804-001;提交实物=129939 bytes / 21B3CB9383114082B3AD7F7CF849A0B4E8495F9AC550F4B0B1450165BD3EAE8F
  • 静态核验:Test-NvdecScanCommand 已要求 -hwaccel_output_format cuda 位于首个目标 -i 前;合成有效命令已补齐;删除/错值/后置和缺 hwdownload 反例齐备。task_pidsffmpeg_command_linesnvidia_smi_compute_task_rows 已进入 $RequiredColumns 和扫描阶段非空门禁,四类缺列反例齐备。
  • 独立基础检查:py_compile=PASS;PowerShell parser=PASSmbx validate --project project-info=OK / projects=1 / warnings=0
  • 独立聚焦复跑:首次两项套件=1 PASS / 1 FAIL / 31.589 s;其中 Analyze/F4 用例通过,Run/F3 用例在 active_indexes=[] 处失败。随后单独重跑同一 Run 用例=1/1 PASS / 10.671 s,证明现有用例随冷热启动时序变化而不稳定。

Findings

F3-R1-R1(阻断,离线证据可复验性):Run 桩在冷启动时可于采样循环就绪前结束扫描,必要阶段证据非确定性

  • 失败首跑的 resource_samples.csv 共 6 行,第一行已经只观察到带 -frames:v 1 的逐页 ffmpeg.exescan_ffmpeg_pid 全部为空,scan_phase_active 全部为 false,run_summaryscan_ffmpeg_seen=false / valid_scan_sample_count=0 / target_exit_code=0 / resource_acceptance_pass=false。因此断言 active_indexes >= 2 实际失败。
  • 同一代码、同一命令随后的单项重跑通过。差异来自 Run 桩把扫描进程只保持 3.0 s,而采样器在启动目标进程之后才构造整机 CPU 与 GPU Process Memory 计数器;冷启动初始化耗时可超过“3 秒扫描 + 1.5 秒间隔”,使首个进程树快照只看到后续逐页进程。该竞态使前序 F3-R1 要求的扫描 PID/退出周期/逐页排除/exit=3 证据不能稳定复验。
  • 这不是要求真实媒体或放宽资源门禁;聚焦用例本身是实现审核的必要离线证据,首跑失败即不能用一次暖态 PASS 关闭 F3-R1。
  • required_fix:消除目标启动至采样就绪之间的盲区,优先在启动被测进程前完成可能阻塞的性能计数器/GPU 类别初始化,或使用明确的 sampler-ready 握手后再让 stub 启动扫描;Run 桩不得依赖 3 秒睡眠恰好覆盖主机冷启动。修复后应稳定证明唯一扫描 PID、退出后同周期、后续逐页不延长、伪 stdout/CPU 回退不能假通过,以及 target exit=0 / sampler exit=3。仅需采样器与无媒体离线测试,不得修改产品脚本或运行真实媒体。

已关闭且继续冻结

  1. F4-R1=PASS:三项遗漏列已纳入 schema 与非空门禁,gpu_query_raw_rows/task_pids/ffmpeg_command_lines/nvidia_smi_compute_task_rows 删除反例均由同一 Analyze 用例执行并通过。
  2. F3-R1 argv 子项=PASS-hwaccel_output_format cuda 的位置/值校验及四个反例已闭环;仅 Run 证据的冷启动可复验性仍开放。
  3. F1、F2、其余 F5、共享 mutex、BelowNormal、4/2 线程、公开 CLI、页面/转写算法与业务输出、长转写、源保护、原子提交和失败清理继续冻结;产品脚本与冻结文件哈希未回退。

结论

  • 审计状态:HOLD
  • 阻断问题数:1(F3-R1-R1=1;F4-R1=CLOSED)。
  • 真实媒体授权:DENIED。不得读取业务源、生成 <=600 s 真实片段、运行 PPT 真实资源验收、重试、调参、并行转写或改跑长媒体。
  • 最小修复授权:只允许修改测试侧采样器、无媒体 Run 桩及必要说明以消除上述启动竞态;产品脚本、F4-R1 和其他冻结合同不得重开。修复后提交 F3-R1-R1-only 限定复审。
  • Open questions:无;无需开发员或外部输入,按上述最小同步/初始化修复即可闭环。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-F3-R1-R1-REREVIEW-20260804-001

  • 记录时间:2026-08-04T15:18:25+08:00
  • 审核阶段:前序 HOLD/1 后的 F3-R1-R1-only 限定实现复审。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • MB-X 请求消息:msg_20260804150032663_852b38d9;请求交接:HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-F3-R1-R1-REREVIEW-20260804-001;前序回执:HANDOFF-INFOREV-INFODEV-MEDIA-HOST-RESPONSIVENESS-F3-R1-F4-R1-REREVIEW-RESULT-20260804-001;来源任务:019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复审采样器冷启动时性能计数器/GPU 类别同步初始化及 sampler-ready 握手;F4-R1、F3 argv 子项、F1/F2/其余 F5、两个产品脚本和全部 preserved contracts 均冻结,不重开。
  • 本轮实物:monitor_media_host_responsiveness.ps1=44142/E5909D0E3A3DEA875755E054EB10F78A530A54D08946C6DFE18AFFA52E429DF2test_extract_ppt_slides.py=73191/E9654F1B5D8832CE0CA925EC391BB3E733EA325DEE1B8D193CCD3612A9B63981会议录屏PPT页面提取工具.md=11125/53D824CB5B371F7C2A913842DB2C19C4AE0374FF848E2DDC0B6439D790926705
  • 开发账本:DEV-LOG-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-F3-R1-R1-REPAIR-20260804-001;提交实物 dev-doc/开发执行日志.md=132152/C7D8DF3D61E0006691CD59D22841B30C7EBA3C4E73E110DF666DB58EF5FE9EDD
  • 冻结实物复核:extract_ppt_slides.py=38070/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30Atranscribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8Ftest_transcribe_media.py=23080/1BD0D8B1392BD69F72CBCE1A279BBEF2B36B813E03147E298D366FEBC4524E95本地视频语音转写工具.md=6788/286F3395ADA8FCEC3DDA04185929D99A773E4A1B7250508254B2F645647804E5,均与提交及冻结值一致。
  • 静态闭环:采样器在 Process.Start() 前依次创建并预热 Processor(_Total)\\% Processor Time、创建并枚举 GPU Process Memory,随后写入子进程继承环境变量 MBX_MEDIA_SAMPLER_READY=1,最后才启动目标;无媒体 stub 在 ready 缺失时直接失败。测试同时静态断言上述初始化、ready 标志均位于 Process.Start() 前,消除了前序“目标先启动、采样器后冷初始化”的盲区。
  • 独立冷启动复验:使用 3 个相互独立的 Python 进程分别启动全新 PowerShell 进程执行同一 Run 用例,结果连续 3/3 PASS;各次总耗时约 18.557 s / 14.508 s / 14.260 s,不依赖失败后的进程内重试或暖态复用。用例稳定证明唯一扫描 PID、扫描退出周期、后续逐页进程不延长扫描阶段、伪 NVDEC stdout/CPU 回退不能假通过,以及 target exit=0 / sampler exit=3
  • 独立回归:PowerShell parser=PASS;py_compile=PASS;两个 CLI help=PASS;project discover=63/63 PASS / Ran 63 tests in 46.365 s;H.264/H.265 NVDEC/forced CPU 合成链继续得到冻结的 19 samples / 5 stable candidates / 3 selected pages / 6,10,18 s 一致结果;mbx validate --project project-info=OK / projects=1 / warnings=0
  • 审核外部动作:业务源读取=0,业务 FFprobe/FFmpeg=0,真实片段生成=0,真实媒体运行=0,长媒体运行=0;仅执行获授权的无媒体桩、离线回归及临时合成媒体测试。

Findings

  • 无阻断 finding。

F3-R1-R1 闭环与冻结合同

  1. PASS / F3-R1-R1:可能阻塞的性能计数器与 GPU 类别初始化已前移至目标启动前,显式 sampler-ready 握手又把测试 stub 的扫描启动约束在采样器就绪之后;全新进程三连跑稳定通过,前序冷/暖启动竞态已消除。
  2. PASS / preserved contracts:F4-R1、F3 argv 子项、F1/F2/其余 F5、共享 named mutex、BelowNormal、4/2 线程、公开 CLI、页面/转写算法与业务输出、源保护、原子提交和失败清理均未发现回退;产品脚本及冻结文件哈希保持不变。
  3. 本次修复仅涉及测试侧只读采样器、无媒体离线用例和对应说明/账本,没有新增产品模块、参数、服务或依赖,也没有触发任何业务媒体动作。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • F3-R1-R1:CLOSED;本任务实现审核的既有阻断至此全部关闭。
  • 真实资源验收授权:AUTHORIZED_EXACTLY_ONCE_UNDER_V001+V002。允许开发员按冻结方案对既有源只读校验指纹后,仅生成一个独立 <=600 s 片段(既定目标为从 00:30:00 起约 590 s,必须复核实际时长不超过 600 秒),并仅运行一次 PPT 提取及资源采样,写入新的独立输出/证据目录。
  • 授权限制:不得运行 3.57 小时源或 4 小时媒体,不得重试、调参、覆盖旧证据、并行转写或扩大范围;若生成、运行或资源门禁失败,应如实返回唯一失败证据,不得自行再次运行。完成后沿原任务链提交真实资源验收结果并交 case_analysis.media_processor 最终验收。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-TERMINALIZATION-20260814-001

  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • original_request=msg_20260814054037913_4e8037f7
  • canonical_findings_reference=DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-20260814-001
  • verdict=HOLD/5
  • blocking_findings=5
  • F1=TRUSTED_RUNTIME_CONTROLLER_AND_DISPATCH_ENVELOPE_MISSING
  • F2=SOURCE_CONTROLLED_EXTRACTOR_CANNOT_PRODUCE_ACCEPTED_EVIDENCE
  • F3=OVERALL_DEADLINE_NOT_ENFORCED_AT_COMMIT
  • F4=LEGACY_SCHEMA2_PENDING_CAN_REISSUE_BROWSER_ACTION
  • F5=IDENTITY_MISMATCH_NOT_PROJECTED_TO_FROZEN_BLOCKED_TERMINAL
  • formal_manifest=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 unchanged
  • code_and_formal=FROZEN_UNCHANGED
  • disposition=原链最小离线修复后同链复审

    DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-20260814-001

  • 记录时间:2026-08-14T06:16:49.4892014+08:00

  • 审核阶段:同一 task/reviewer 链内,按已通过 V005+V006 组合合同对 supported Chrome runtime 增量做限定实现审核;V001—V004、F2/F3/F4、018/019/020 历史槽及正式数据边界不重开。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260814054037913_4e8037f7;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-IMPLEMENTATION-20260814-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结工件身份独立复算匹配:collector=71340/0EF9AD4970F7AC73C767734598ABF0FC7E3F13BEDAECA2B6AAA67CC33BC2378B;refresh=117252/88145C0DAEDA643F77D0359635C5231C9D152ECAC1FBDD0A25C3FAACC48B4D22;extractor=1383/6DA03360D42BA9820E45A67C9AE4FBE8EC0A811DEF800DB954CFF428F94E0B3F;runtime contract=754/434062C076F3E15135B96957961FC316725479900C33EC01629BC13843C70BB8;example=1702/85DCC6E682E3D8E2063BE008A974A640D8970B7CD489E8E6596AE863655DCFEC;tests=62883/A3D89398A995872167A27E684991C24FF9447456E22FFF3CA97DEAC8D8B1554E;implementation evidence=15788/F344A4CC65D87C4E20586BDBBC33C69DA3C7EFB1B5ED62032DE3209C93FDBFC3
  • 独立复验:V005+V006 runtime 聚焦矩阵=8/8 PASS / 1.981s;collector+refresh 全目标=44/44 PASS / 9.963spy_compile=PASS;CLI help=PASS;UTF-8/BOM/trailing whitespace=PASS/NO/0;governance=OK/projects1/warnings0
  • 正式 manifest 审核前后均为 ana-data/news-青枫浦上Q/manifest.jsonl|51598|0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73|48 lines,未修改。

Findings

  • verdict=HOLD/5
  • blocking_findings=5

F1 — TRUSTED_RUNTIME_CONTROLLER_AND_DISPATCH_ENVELOPE_MISSING

  • V006 要求 PRE/POST/CONFIRMED/TIMEOUT 只能由受信 controller 在实际 reload/goto 前后生成,并在 CreateNew evidence 前绑定 dispatch boolean、单调起止值与实际计数;evidence 调用者不得自行选 outcome。冻结产品只有外部 JSON validator、DOM 只读脚本和枚举 contract,未实现 openTabs/reload/goto/playwright.evaluate 或受信 envelope writer。测试 helper 直接填 outcome/count/timestamps 并 write_text。审核员在 browser action=0 时提交 caller-authored CONFIRMED/count=1,CLI exit0 并形成 REFRESH_CONFIRMED_NO_NEW
  • 最小修复:实现受信 controller/evidence writer 或等价不可伪造绑定层,由实际 action 状态机产生 outcome/count/elapsed,并以 CreateNew partial→fsync→rename 落 evidence;用可控 fake controller 证明手写/篡改 outcome 不能获得成功终态。

F2 — SOURCE_CONTROLLED_EXTRACTOR_CANNOT_PRODUCE_ACCEPTED_EVIDENCE

  • bili_dynamic_page_extract.js 只返回 ready/visibility/url/title 和简化 nodes,不生成 CLI 所需的 page_observation、card bindings、unparsed fingerprints、creator、terminal marker、items/content 与 coverage 输入;测试中的完整 observation/items/marker 全由 Python helper 手工构造。真实单 evaluate 输出无法经产品路径生成可接受 schema3,44/44 未覆盖 extractor→evidence→CLI 非真空等价链。
  • 最小修复:让 extractor 或同一受信 controller 的确定性适配器完整生成 V001—V006 所需材料;以真实 JS 输出 fixture 驱动 readable-new/empty/unparsed/access/identity 入口反例。

F3 — OVERALL_DEADLINE_NOT_ENFORCED_AT_COMMIT

  • 实现只验证 evidence 自报时间位于 pending started/deadline,不检查 refresh_commit(..., now) 是否已越过 120 秒。审核员在 begin 后 180 秒提交内部时间伪装为期限内的 CONFIRMED evidence,仍 exit0/no-new。
  • 最小修复:controller 用同一 monotonic deadline 截断 action/observation/evidence commit;CLI 拒绝 deadline 后首次 evidence 绑定/业务提交,或验证不可伪造的期限内 durable-commit envelope。补 deadline+ε、伪造早时间戳与截止后 readable-new/no-new 反例。

F4 — LEGACY_SCHEMA2_PENDING_CAN_REISSUE_BROWSER_ACTION

  • V005 要求 schema2 只恢复/终结,不得触发 runtime-v2 action;但 _recover_or_replay 在 AWAITING_EVIDENCE 且 STARTED slot 缺失时无 schema 分支地修 slot 并返回 _begin_result。审核员临时 schema2 反例实际返回 BROWSER_REFRESH_REQUIRED 且无 runtime contract identity。
  • 最小修复:schema2 使用 recovery-only 状态机,任何 phase 都不得返回 browser-action-required。补 schema2 AWAITING_EVIDENCE × slot present/missing、deadline before/after、第三内容入口矩阵。

F5 — IDENTITY_MISMATCH_NOT_PROJECTED_TO_FROZEN_BLOCKED_TERMINAL

  • exact creator/final URL mismatch 应唯一落 REFRESH_BLOCKED_AUTH_OR_ACCESS;当前 readable mismatch 在 validator 直接抛 E_CREATOR_MISMATCH/SAFETY_STOP,pending 与 STARTED slot 留存,没有五终态。审核员反例复现 safety=true、pending_exists=true,formal manifest 虽不变但终态合同未实现。
  • 最小修复:把 URL/UID/name/profile mismatch 持久化为 durable blocked 终态,补 confirmed/timeout/post-dispatch × identity mismatch 入口矩阵和 slot/latest/pending cleanup 断言。

Preserved evidence and disposition

  • 已通过且未回退:固定 120/35/45/15 配置与 contract hash、PRE 0/0、POST/TIMEOUT 不得 no-new、可读新条目 coverage=false、schema3 字段自洽校验、原恢复/事务/锁合同、44 项目标回归、正式 manifest 零改写及 secret/控制面边界。
  • 本 HOLD 不授权真实 Chrome、reload/goto、network、download、formal write、Raw CDP、coordinate、Cookie/session、F:\video、media 或 transcription。只允许原边界内最小修复,无需真实动作。
  • 结论=V005_V006_RUNTIME_LIMITED_IMPLEMENTATION_HOLD5_TRUSTED_CONTROLLER_EXTRACTOR_DEADLINE_LEGACY_RECOVERY_AND_TERMINAL_REQUIRED
  • Open questions:无。

    DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001-FORMAL

  • 记录时间:2026-08-13T13:10:00+08:00

  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813114445612_ca976cf4;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计=24165/DA597448EFD47361779464B44BF92C8CDE9B4AC1769764EE0AF2301075C86045;code/test/fixture/formal data 均冻结。

Findings

  • verdict=HOLD/5
  • blocking_findings=5
  1. F1_EVIDENCE_NO_NEW_PROOF_NOT_DETERMINISTIC:no-new 依赖外部自报 coverage 布尔值,缺少可复算的 DOM/parser/逐页卡片/end-of-feed/limit 证明。须冻结 bounded page_observation,由 CLI 推导 coverage;任何上限、未推进或 marker 缺失均禁止 no-new,并补伪造/截断/空页反例。
  2. F2_REFRESH_PENDING_CRASH_RECOVERY_UNDEFINEDrefresh-begin 后、transaction.pending 前的崩溃没有 reopen 状态机,会让旧 pending 永久阻塞小时运行。须冻结 pre-transaction phase/ownership/deadline/evidence 恢复、durable run record、清理/保留、exit 与全点注入。
  3. F3_MIXED_HISTORY_CATALOG_CONTRACT_UNDERSPECIFIED:48 行 mixed history 的 token namespace/union、状态优先级、UID 缺失、身份冲突、artifact 校验和新 state event schema 未冻结。须基于现有 48 行给出 exact 分类、canonical dedupe/unique-entity 摘要及冲突反例。只读核验确认 16 个 SAVED 实物存在且哈希匹配。
  4. F4_DUAL_MANIFEST_COMMIT_HAS_LOST_UPDATE_RACES:state 前像在发布前未 compare,formal check 与 replace 间存在 TOCTOU。须冻结两份 exact candidate,并用共享跨进程锁或可证明 CAS 覆盖 compare-through-replace;任何漂移 fail/rebegin,补两进程竞争反例。
  5. F5_BOUNDED_RUN_EVIDENCE_NOT_ATOMIC_WITH_TERMINAL_RESULT:formal commit、receipt、latest/168-slot 与 pending cleanup 的顺序和恢复未冻结,同小时 collision/slot 失败可导致业务结果与唯一审计证据分离。须冻结 exact run schema、slot 规则和 reopen 矩阵;durable record 前不得返回终态,并补全点异常/同小时/replay。

Preserved contracts and boundary

  • supported Chrome exact URL、单次 navigate/reload、禁止 CDP/profile/Cookie/header/412 绕过;五终态总体优先级、discovery 非权威和两个真实样本解释方向正确。
  • 全文/原图/video metadata+cover、no-overwrite、secret/raw error fail-closed、失败不增长 formal manifest 可保留。
  • required_fixes 仅限 F1-F5;无需新增真实运行。产品 code/test/fixture、formal data、Chrome refresh、network retry、download/video、extension/policy/HKCU/secret 继续冻结。
  • 结论=V001_DESIGN_HELD_IMPLEMENTATION_REMAINS_FROZEN
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V002-FOCUSED-DESIGN-REREVIEW-20260813-001

  • 记录时间:2026-08-13T13:02:49.6067485+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审 V001 HOLD/5 的 F1—F5 closure 与 preserved contracts;产品实现、测试、fixture、正式数据及真实动作保持冻结。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813124847123_2b989fed;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V002-FOCUSED-DESIGN-REREVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • V001=24165/DA597448EFD47361779464B44BF92C8CDE9B4AC1769764EE0AF2301075C86045;V002=22460/EC7E1D887FF930D7DA75F208975E17812E9D299606CD2A79B3E9BF14DE723A54;请求=3420/65EF31ED42BD2DAF618B2D12B6314D1C69774257FE5D023BFFDB39F0B44CBA3C
  • 冻结基线复算:code=60090/67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8B;test=31303/D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;formal=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 lines

Findings

  • verdict=HOLD/2
  • blocking_findings=2

F1-R1 — OBSERVATION_PARSED_COUNT_DOUBLE_COUNTS_UNPARSED_NODES

V002 第 2.2 节同时规定 cards 包含 parse_completeparsed_card_count=len(cards)parser_error_count=未能形成完整 card 的节点数,又规定 visible_node_count=parsed_card_count+parser_error_count。如果一个可见节点能形成带 stable identity 的 card,但因时间/类型等缺失而 parse_complete=false,它已进入 cards,又计入 parser_error_count,因此被双计;若不进入 cards,又无法通过 stable component 证明它没有消失。合法 partial 页面会被误判 schema error,CLI 也无法唯一重算 ordered stable-component proof。

最小修复:冻结互斥计数合同。建议将 cards 改为所有已识别 card,另设 complete_card_countunparsed_node_count,并规定 visible_node_count=len(cards)+unparsed_node_countcomplete_card_count=count(cards.parse_complete=true);或者明确 incomplete card 不进入 cards 并为每个 unparsed node 保存 bounded、无秘密、不可冒充身份的 ordinal/hash。同步修正 parsed_card_countparser_error_count、proof/counts 及 incomplete-card/unknown-node/计数漂移反例。无需改变 no-new 的 fail-closed 方向。

F2/F4-R1 — STALE_FORMAL_LOCK_RECOVERY_SELF_DEADLOCK

V002 第 5 节规定 formal lock stale 时“只有 owner 不存在且无 pending 事务后恢复”,但同一节又要求 transaction recovery 先按 StateLock -> formal lock 取双锁。若进程在创建 formal lock 并写入 TRANSACTION_INTENT、提交 state 或提交 formal 后被 kill,下一入口会同时看到 stale formal lock 与 pending transaction:规则禁止接管 stale lock,而恢复 pending 又必须先取得该锁,形成永久自闭锁。F2 明确要求这些 phase 可 reopen,F4 当前锁规则使其不可实现。

最小修复:冻结 owner-dead stale-lock takeover 的唯一恢复协议。pending transaction 与 stale lock 必须精确绑定同一 task/run/owner nonce/lock identity;确认 PID/进程创建时刻已失效、锁文件普通非 reparse 且 bytes/hash 匹配后,recovery 可在持有 StateLock 时原子隔离/接管该 exact stale lock,再按 intent 恢复。无 pending、身份不符、活 owner、PID reuse、第三内容、删除/rename 失败均 SAFETY_STOP。补 kill-after-lock、各 transaction phase、PID reuse、异 run pending、活锁和两个 recovery 竞争者的真实子进程反例;不得通用删除 stale lock。

已关闭且冻结的原 findings

  1. F3 mixed-history:现有 48 行独立复算为 22 components/16 SAVED/5 video/1 retryable,29 个非 SAVED status exact allowlist 与实物相符;token/union/conflict、UID 兼容、artifact matrix、schema 2/state event 合同足以闭环,CLOSED
  2. F5 hourly evidence:UTC 小时唯一 run、168 slot、STARTED/TERMINAL、planned terminal、formal-commit 后补 slot、latest 重建与 cleanup 语义闭环,CLOSED
  3. F1 的 source-controlled extractor、CLI-derived no-new、terminal marker、limit/NO_PROGRESS 门禁方向保留;只修 F1-R1 计数一致性。
  4. F2 pending WAL/reopen matrix 与 F4 exact candidate/双前像 compare/竞争写方向保留;只修 F2/F4-R1 stale lock takeover。

Preserved contracts and boundary

  • exact creator/URL、单轮一次 navigate/reload、15s/8s、五终态优先级、public discovery 非权威、正文/原图/video metadata+cover、no-overwrite、secret/raw-error fail-closed及两个真实样本解释均未回退。
  • required_fixes 仅限上述 2 项;不得扩展范围或要求真实 smoke。
  • 产品 code/test/fixture、formal data、Chrome refresh、network retry、download/video、extension/policy/HKCU/session secret 继续冻结。
  • 结论=V002_FOCUSED_DESIGN_HELD_2_IMPLEMENTATION_REMAINS_FROZEN
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001

  • 记录时间:2026-08-13T13:10:00+08:00
  • 审核阶段:同一 task/reviewer 链内,对 B 站动态主动刷新采集器 V001 做一次完整重型方案审核;产品 code/test/fixture 与正式数据保持冻结,未执行新增 Chrome refresh、network retry、download、video 或 formal write。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813114445612_ca976cf4;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计=dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V001.md=24165/DA597448EFD47361779464B44BF92C8CDE9B4AC1769764EE0AF2301075C86045
  • 冻结基线:code=60090/67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8;test=31303/D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;formal manifest=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 events

Findings

  • verdict=HOLD/5
  • blocking_findings=5

F1 — EVIDENCE_NO_NEW_PROOF_NOT_DETERMINISTIC

REFRESH_CONFIRMED_NO_NEW 依赖 end_of_feed/pagination_complete/page_truncated/all_cards_parsed/unparsed_card_count 等由外部 Chrome 步骤直接声明的布尔值,但 V001 未冻结可复算的页面证据:DOM extractor/parser 版本或哈希、所见卡片总数与逐卡稳定身份、滚动/分页观察序列、end-of-feed 的 exact DOM marker/selector,以及 max_items=200 或其他读取上限命中时强制 page_truncated=true 的规则。因而任意 JSON 可自称 coverage complete,CLI 无法独立证明“已覆盖窗口且没有新增”。

最小修复:冻结 bounded、无秘密、可重算的 page_observation/coverage-proof schema;CLI 据此自行推导 coverage。任何数量/大小/滚动/分页/时间上限命中、重复页未推进、marker 缺失或 observation 不连续均不得 no-new,并增加伪造 complete、200 项截断、重复页、空页无 marker 的入口反例。

F2 — REFRESH_PENDING_CRASH_RECOVERY_UNDEFINED

refresh-begin 会 CreateNew refresh/pending.json,但第 11 节只定义 transaction.pending.json 后的恢复。begin 后、Chrome 崩溃/EOF 后或 evidence 落地至 commit 前退出时,没有能清理或终结 durable pending 的状态机;后续小时 begin 会被旧 pending 永久阻塞。

最小修复:冻结 pre-transaction pending 的 phase/ownership/deadline/evidence identity 与 reopen 状态机;对无 evidence、有效失败 evidence、有效 commit evidence、未知/篡改状态规定唯一 run record、pending 清理/保留、exit 和幂等重放,并覆盖每个中断点。

F3 — MIXED_HISTORY_CATALOG_CONTRACT_UNDERSPECIFIED

现有正式清单含同一 stable_id/BVID 的 SAVED、pending、blocked、download/transcription 等多状态历史;16 个 SAVED 实物均存在且哈希匹配。V001 未冻结 token namespace/canonicalization、跨 token union、状态优先级、creator UID 缺失兼容、身份冲突与历史 artifact 校验矩阵,可能直接改变 new/no-new 与重复正式写。

最小修复:基于现有 48 行冻结 schema 1 字段/状态分类、namespaced token 与 union/conflict 规则、creator 缺失兼容、SAVED 校验和 schema 2 dedupe_keys exact form;给出 48 行预期 unique-entity/catalog 摘要与冲突反例,并冻结新 state event exact schema。

F4 — DUAL_MANIFEST_COMMIT_HAS_LOST_UPDATE_RACES

begin 记录两份 manifest 前像,但未要求 artifact/state 发布前复核 state 前像;begin 与 commit 间旧命令的合法 state 追加可能被覆盖。formal 也只是 check 后再 replace,未定义覆盖 check-through-replace 的共享锁/CAS,仍有 TOCTOU lost update。

最小修复:冻结两份 exact candidate=preimage + canonical lines,在任何正式发布前同时复核前像;formal 使用所有 writer 共用、跨进程、覆盖 check-through-replace 的锁或可证明 CAS,state 在 StateLock 内 compare-before-replace。任何漂移 fail/rebegin,不得 rebase/覆盖;补两进程竞争与中断反例。

F5 — BOUNDED_RUN_EVIDENCE_NOT_ATOMIC_WITH_TERMINAL_RESULT

formal commit 后才写 final receipt、168-slot run evidence 和清 pending;no-new/blocked/unreadable/partial 又仅依赖 run evidence。设计未冻结同小时 collision、latest/slot 顺序、失败终态和 reopen,可能出现业务成功却无审计记录,或失败/no-new 对外返回后唯一证据缺失/覆盖。

最小修复:冻结 run record schema/canonical bytes/slot 命名与同小时多 run 规则、latest/slot/receipt/pending 提交及恢复矩阵。durable run record 前不得返回终态;formal 已提交后的证据失败须可恢复且保持成功。补所有持久化点异常、同小时两 run、slot overwrite、latest/slot 失败与 replay。

已通过且冻结的边界

  1. supported Chrome、exact creator URL、单次 navigate/reload、禁止 CDP/profile/Cookie/header/412 绕过的控制面方向正确。
  2. 五终态总体优先级、discovery 永不提升 no-new,以及两个真实样本的 fail-closed 解释正确。
  3. 全文/原图/video metadata+cover、no-overwrite、secret/raw error fail-closed、失败不增长 formal manifest 的方向可保留。
  4. formal manifest 只读检查为 48 events/16 SAVED,16 个 SAVED 实物哈希均匹配;未修改正式数据。

结论与边界

  • 结论:V001_DESIGN_HELD_IMPLEMENTATION_REMAINS_FROZEN
  • required_fixes:仅限 F1-F5;下一修订一次性冻结合同与非真空反例,保留已通过边界,不扩展产品范围。
  • HOLD 期间不得修改产品 code/test/fixture,不得新增 Chrome refresh、network retry、download/video、formal write、extension/policy/HKCU 或 secret access。无需新增真实运行。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-IMPLEMENTATION-20260804-001

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-IMPLEMENTATION-20260804-001

  • 记录时间:2026-08-04T22:48:20+08:00
  • 审核阶段:REQ-BILI-DYNAMIC-COLLECTOR-20260804-001 对应 project 工具的独立实现审核;按上游即时收尾约束,本记录为当前冻结快照的一次性终态,不创建后继设计、返修复审或外部动作。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001
  • 原生请求:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-IMPLEMENTATION-20260804-001;来源任务/回传任务:019fbcbb-bed7-7c90-83ab-f50610f80d3a;执行方=dev.developer.project.secondary / infodev-2;审核方=dev.reviewer.project / inforev
  • 需求:ai-video-downloader/draft/2026-08-04-哔哩哔哩动态采集需求.md=4114/DC5807D6325AA13B1E0C72C92B9534003CC4F8046A1789AA70FCC98DECC9AB87
  • 实现:bili_dynamic_collector.py=49357/FFEA819A53DF15CFD2D92305F6926A4CCF3E261F436C315D9F0332EA8501918F;示例配置=658/0BF9F65C6AD08145EB933152CA44A4BA91742620540C7838B5E6A486760D9D6A;测试=10904/52E8269D82C676F4AB499F0A116B06E56F0FE4234D3EC36FA9BBA3137171E24A;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;用法=8763/1692918402CACF7A220F17E82C81825A2DFE500EBA86AE8F46BAFC6158509598
  • 开发证据:worklog=3714/A35C1F370ACF24561688609DE74D5B9C4741ACC4AE3BF9284963842DE7B60709;selfcheck=3624/A403750607C6BB91A67FDCB27B96C5855D32A8C0B57F9038A990DE69B6CB4D92;执行账本=DEV-LOG-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-IMPLEMENTATION-20260804-001
  • 独立正向复验:py_compile=PASS;CLI help=PASS;目标 unittest=6/6 PASS / 0.642 s;project discover=69/69 PASS / 51.946 s;git diff check=PASS;交付文件 strict UTF-8=PASS、BOM=NOmbx validate --project project-info --governance=OK / projects=1 / warnings=0
  • 独立反例全部只使用 TemporaryDirectory、脱敏 JSON 和数十字节非媒体文件;网络=0,浏览器=0,扩展=0,真实媒体=0F:\\video 读写=0,正式 ana-data 读写=0

Findings

F1(阻断,流程/分类):当前事项具备重型合同,却以“无并发的轻量实现”绕过了编码方案门

  • common 编码规范第 5.3 节把“多个阶段”“正式数据链路”“并发”“失败后代价较高”列为重型实现;本地规范也明确涉及重跑、并发或断点/恢复时应先有编码方案。
  • 当前实现不是单一无状态小脚本:它有 check / move-completed / handoff 三阶段、append-only manifest 状态机、跨调用重跑/失败恢复、StateLock 并发互斥、跨目录复制/哈希/hard-link/manifest/源删除事务和正式原生交接草稿。开发计划第 850 行及总纲第 759 行声明“不含并发”,与 StateLock 第 130—164 行及所有命令统一持锁的第 1153 行直接矛盾。
  • 因此“一个 Python 文件”不能替代重型判断;当前没有经独立审核的状态、事务、恢复和交接合同,已实现代码不能取得正式实现 PASS。

F2(阻断,代码/测试):move-completed 没有形成“每个已提供选择器都精确一致 + 一个源文件只对应一个实体”的批次预检

  • resolve_entity() 只汇总能在历史 token map 中命中的选择器,未知选择器被静默忽略。独立反例给同一映射同时提供正确 BV 和错误 dynamic_id=definitely-wrong,实际仍返回 exit=0 / COMPLETE / VIDEO_MOVED;这违反需求中的“下载文件无法对应动态或目标不唯一立即停止”和交接声明的 exact queued-video mapping。
  • 批次只检查目标路径重复,不检查规范化/解析后的源文件重复。独立反例把同一个 one.mp4 映射给两个不同视频实体,预检未停止;工具先把源提交给第一个实体并删除源,随后第二项以 FileNotFoundError 失败,最终 manifest 为“第一个 VIDEO_MOVED、第二个 MOVE_FAILED”,且已经产生一个目标文件。这是发生文件副作用后的迟发失败,不是批次 fail-fast。
  • 现有 6 项测试没有覆盖混合正确/错误选择器、未知 selector、同一源对应多实体及“失败前零文件/零 manifest 副作用”。

F3(阻断,状态/重跑):VIDEO_MOVED_SOURCE_RETAINED 在原映射重跑时被降级成普通成功

  • 首次源删除失败会正确返回 exit=4 / COMPLETE_WITH_RETAINED_SOURCE / VIDEO_MOVED_SOURCE_RETAINED,但 preflight_move() 把该状态直接折叠为 ALREADY_MOVED;汇总又只检查本次结果是否含 VIDEO_MOVED_SOURCE_RETAINED
  • 独立故障注入证明:首次为 4 / COMPLETE_WITH_RETAINED_SOURCE 且源仍存在;相同映射第二次变成 0 / COMPLETE / ALREADY_MOVED,源仍然存在。定时调用方会把未关闭的源保留告警误判为已完成,违反失败/重跑状态不得被掩盖的合同。
  • 现有测试没有覆盖源删除失败后的同映射重跑。

F4(阻断,安全边界):秘密字段门禁没有覆盖工具自身持续读取的 manifest 状态

  • load_json() 会对配置、动态导出和 mapping 调用 reject_secret_keys(),但 load_manifest() 解析每个事件后只检查 schema,不检查 secret/session 字段。
  • 独立反例在 manifest 事件加入 cookie=forbidden-value 后再次运行 check,实际返回 exit=0 / NO_NEW_ITEMS,没有 E_SECRET_FIELD 安全停止。manifest 是三个命令共同读取的输入状态;这与事项总纲“不得读取或保存账号口令、cookie、token、验证码或浏览器会话”及提交所称“any secret/session field name is safety-stopped”冲突。
  • 现有秘密测试只覆盖动态导出根字段,未覆盖 manifest、mapping/config 嵌套状态的统一门禁。

F5(阻断,正式交接合同):生成物使用 <codex_native_handoff> 标记却不是本项目可发送的原生交接

  • 当前 917 字节草稿只有 project、message type、source/target role、status 和视频列表;缺少本项目工作说明规定的 handoff_id、source/target AI 与精确 thread、reply_thread_id,也缺少显式 scope:evidence:expected_action:
  • 文件虽标记 DRAFT_REQUIRES_VIDEO_DOWNLOADER_CONFIRMATION / sent=false,但用法明确让视频下载员确认后把正文作为 Codex 原生任务发送;直接发送会违反 canonical envelope 和 one-exact-target 合同。草稿应当生成可验证的完整 envelope,或改成不冒充 <codex_native_handoff> 的中性证据摘要并由发送方另行构造完整交接。
  • 现有测试只断言草稿包含 DRAFT/local path 且可内容复用,没有校验原生必填字段和三个必填区段。

已通过且可保留的部分

  1. 时间窗上下界、offset-aware 时间、动态/opus/BV/URL 基础去重、Windows 安全 stem、相同输入不生成空待办,以及目标已存在不覆盖的正向合同有非真空测试并通过。
  2. happy-path 的 partial → flush/fsync → SHA-256 → 同目录 hard-link no-overwrite → manifest → 源删除顺序合理;handoff 前重新核对本地文件范围和 SHA-256 的方向正确。
  3. 代码没有网络、浏览器、扩展控制或原生发送实现;示例配置仅指向开发 tmp;本轮及开发证据均未触碰真实媒体、F:\\video 或正式 ana-data

当前冻结快照的安全使用边界

  • 可安全保留:源代码、说明、fixture、自检和现有测试可作为隔离开发样例留在当前工作区;可在一次性 TemporaryDirectorydev/tmp 中,用完全可信、无秘密、人工核对且单实体单源的脱敏输入运行现有单元测试和演示性 check
  • 不可安全使用:不得把当前快照交付为可用采集工具;不得对真实下载目录或正式视频执行 move-completed;不得用于定时/重叠生产调用;不得把生成的 Markdown 直接作为 Codex 原生 handoff 发送;不得依赖它对既有 manifest 的秘密字段或 retained-source 重跑给出可靠终态;不得写 F:\\video 或正式 ana-data
  • 正式输出路径未获授权是独立外部边界,不计入上述五项 finding;即使未来获得路径授权,也不能抵消当前代码/流程阻断。

结论

  • 审计状态:HOLD
  • 阻断问题数:5
  • 当前可向请求方交付的内容:仅限“冻结实现快照 + 离线测试结果 + 本 HOLD 风险清单”的终态开发摘要,不得宣称工具已通过或可正式运行。
  • 后继动作:按上游即时收尾约束,本审核不创建设计请求、返修复审、外部授权、网络/浏览器/下载或正式数据动作;事项如在未来另行恢复,应由责任方重新建立明确授权和审计入口,本轮不自动续接。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-SAMPLER-ONLY-REPAIR-REREVIEW-20260804-001

  • 记录时间:2026-08-04T17:13:13+08:00
  • 审核阶段:唯一真实 r1 资源验收失败后的 sampler-only 限定独立复审。
  • 审核对象:DEV-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-20260804-001
  • MB-X 请求消息:msg_20260804170453363_a3bf1918;关联消息:msg_20260804160056055_13e286dd;请求交接:HANDOFF-INFODEV-INFOREV-MEDIA-HOST-RESPONSIVENESS-SAMPLER-ONLY-REPAIR-REREVIEW-20260804-001;前序授权:HANDOFF-MEDIA-INFODEV-MEDIA-HOST-RESPONSIVENESS-SAMPLER-REPAIR-AUTH-20260804-001;来源任务:019fb7c5-b721-7332-b5c3-7120176fe016
  • 执行方:dev.developer.project / infodev;独立审核方:dev.reviewer.project / inforev
  • 审核边界:只复审测试侧 monitor_media_host_responsiveness.ps1、对应无媒体/桩测试和必要说明中的首窗密度、FFmpeg 消失竞态、CSV previous/interval 一致性与 NVDEC 完整日志证据;两个产品脚本、公开 CLI、媒体算法/输出、r1 媒体/输出/证据和其他冻结合同均不重开。
  • 本轮实物:monitor_media_host_responsiveness.ps1=46515/A53BA7CD9806028460CF60AE6025624EB9BFA42E209A991CF1DDE7E899785177test_extract_ppt_slides.py=76255/9FF695DAC3B819E7F3DCDF2EB48EE0EDB37D6E625BAC7F248BFAB9C4A537BC19会议录屏PPT页面提取工具.md=12430/DE3B684093A6773CA4C39FF014B041CCD88A2A8ABA81EF94F372126AD956EC74
  • 开发账本:DEV-LOG-PROJECT-INFO-MEDIA-HOST-RESPONSIVENESS-SAMPLER-ONLY-REPAIR-20260804-001;提交实物 dev-doc/开发执行日志.md=138539/A9466E9F9241ADA8BE6303E10CCE5D6174A5D7C7A46E15F841B8AC4E348A24B1
  • 冻结产品:extract_ppt_slides.py=38070/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30Atranscribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8F,与 sampler 修复前冻结值一致。
  • r1 保护核验只计算文件实物哈希、未读取媒体内容:resource_samples.csv=162404/F85B2B90EF2F57245AC5BFD625AB7C3C09F09B3B06F11855D3E460561B58A839resource_windows.csv=9264/E33DA3CF90AD23360183661E263E528185A13295BB5B7442D7E8D2FFC5E532C1resource_summary.json=2650/4479CCB89A152693DCC39EF74569489E457440A896782BE7D0B02896545AAE29run_summary.json=3257/A088EA2F244283CF996D4AE7B3D8B1AC3BD1E28C1B4DA112E22D8C37498C4045,均与 r1 冻结值一致。
  • 独立聚焦复验:以 3 个相互独立的 Python 进程分别启动全新 Windows PowerShell 进程执行同一 Run 桩,结果连续 3/3 PASS;总耗时约 24.625 s / 19.369 s / 19.350 s,用例自身耗时约 22.700 s / 18.759 s / 18.746 s,没有失败后重试或进程内暖态替代。
  • 独立回归:PowerShell parser=PASS;py_compile=PASS;两个 CLI help=PASS;project discover=63/63 PASS / Ran 63 tests in 46.941 s;H.264/H.265 NVDEC/forced CPU 四条离线合成链继续为 19 samples / 5 candidates / 3 pages / 6,10,18 s,PNG/PDF/RGB/顺序/尺寸一致;范围内文件 strict UTF-8=PASS、BOM=NOmbx validate --project project-info=OK / projects=1 / warnings=0
  • 审核外部动作:业务源读取=0,真实片段生成=0,真实媒体运行=0,重试=0,调参=0,长媒体运行=0;只执行无媒体桩、静态检查和获授权的离线临时合成测试。

Findings

  • 无阻断 finding。

四项 sampler-only 闭环

  1. PASS / 首窗密度:目标启动前已完成 CIM Win32_Process、nvidia-smi GPU/decode 与 compute-process 预热;500 ms 调度落后时仅将下一次安排为 elapsed+1 ms 做单次受控追赶,未修改 500 ms 周期、每个完整窗至少 10 个成员、最大间隔 1.5 秒、CPU 严格 <85% 或连续高段 10.000 s 门禁。三个全新 Run 桩均只报告预期的 nvdec_scan_argv_invalid,没有首窗密度问题或 9 成员窗。
  2. PASS / FFmpeg 消失竞态:只有 Toolhelp 快照已识别 FFmpeg,且命令行/进程属性读取出错后二次确认 PID 已退出时才计入 command_line_disappearance_race_count 并容忍;仍存活但 CIM 无行、命令行空或属性不可读时继续硬失败。24 个短命逐页 FFmpeg 加 100 ms CIM 延迟稳定产生 race_count>0,但没有额外 sampling error,也没有延长已关闭的扫描阶段。
  3. PASS / CSV previous/intervalPreviousCounterTimestampFirstCounter 只在 $Samples.Add(...) 成功后推进;扫描结束后注入的唯一一次提交前异常不会污染下一条已提交行。聚焦用例逐行复算并证明 previous_valid_timestamp_utc 等于上一条已提交 timestamp_utcinterval_seconds 与两者差值一致,Analyze 没有 previous/interval 问题。
  4. PASS / NVDEC 日志证据:目标 stdout/stderr 自启动后即以 ReadToEndAsync() 消费,并在目标退出后完整 GetResult()、一次写入 UTF-8 无 BOM 文件;NVDEC 正式日志门禁使用 ASCII NVDEC/CUDA (<decoder>)。桩证明完整日志证据为 true,但缺失 -hwaccel_output_format cuda 的 argv 证据仍为 false,最终 target exit=0 / sampler exit=3 / resource_acceptance_pass=false,日志不能绕过命令合同。

冻结合同

  1. PASS:两个产品脚本及产品合同未修改;F1/F2/F3-R1-R1/F4-R1/其余 F5、共享 named mutex、BelowNormal、4/2 线程、公开 CLI、页面/转写算法与业务输出、源保护、原子提交和失败清理均未发现回退。
  2. PASS:r1 的媒体、输出及四份核心资源证据保持原 bytes/SHA-256,r1 的 BLOCKED_RESOURCE_SAMPLER_EVIDENCE_INVALID_NO_RERUN 历史事实没有被覆盖或改写。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • sampler-only 修复:CLOSED
  • r2 授权:AUTHORIZED_EXACTLY_ONCE_REUSE_EXISTING_CLIP。允许按请求方既有授权只复用已经生成并冻结的 593.120 s 独立片段执行唯一一次 PPT 提取与资源采样,输出到全新的 r2 目录;不得重新截片、读取或运行长业务源、覆盖 r1、重试、调参、并行转写或扩大范围。
  • r2 失败处理:若目标、采样或任一资源/证据门禁失败,必须保留并回传该唯一 r2 的真实失败证据,不得再次运行。完成后沿原任务链提交给 case_analysis.media_processor 最终验收。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V001-DESIGN-20260804-001

  • 记录时间:2026-08-04T23:38:23+08:00
  • 审核阶段:前序实现 HOLD/5 的最小重型修复方案独立审核。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V001-DESIGN-20260804-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a;执行方=dev.developer.project.secondary / infodev-2;审核方=dev.reviewer.project / inforev
  • 设计:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V001.md=11917/16C14FB2751A0EAB63F76371E75D0569FF8EF5B47FDD8724BE861314B6062733;strict UTF-8=PASS;BOM=NO;引用目标=8/8 EXISTS;目录导读、总纲、计划和开发员 worklog 均已有设计待审入口。
  • 前序审核:DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-IMPLEMENTATION-20260804-001=HOLD/5
  • 角色/路由核验:dev.reviewer.project 有权写本审计入口;case_analysis.video_downloader / video-downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5case_analysis.media_processor / media-processor / 019fb7a4-bdfd-79f2-bd6b-e67e2b7d8efd 均与当前 mbx.project.yaml、项目配置清单一致。
  • 冻结基线独立复核:实现仍为 49357/FFEA819A53DF15CFD2D92305F6926A4CCF3E261F436C315D9F0332EA8501918F;测试仍为 10904/52E8269D82C676F4AB499F0A116B06E56F0FE4234D3EC36FA9BBA3137171E24A;实际 fixture 为 dev/project-dev/test/fixtures/bili_dynamic_collector/dynamic_items.json=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F。代码、测试和 fixture 与前序审计冻结实物一致,本轮实现变化=0
  • 提交证据校正(非阻断):本次原生请求中的 frozen code/test SHA-256 被错误抄写,且把 fixture 写成不存在的 dev/project-dev/test/fixtures/bili_dynamic_export.json;因审核员已用实物和前序审计逐项恢复唯一正确基线,本次不把可校正的交接录入错误升级为方案阻断,但后续复审交接必须使用上述真实路径与哈希。
  • 外部动作:网络=0;浏览器=0;下载=0;真实媒体=0F:\\video=0;正式 ana-data=0;实现/测试/fixture 修改=0

Findings

F1(阻断,设计/重跑):F2 批次源身份预检与 F3 终态重跑表的执行顺序互相冲突

  • V001 第 4.2 节要求“每项预检解析源文件后形成 source identity”,并以 resolve(strict=True)/stat 为整个 mapping 批次执行重复源检查;第 5 节同时冻结 VIDEO_MOVED / COMPLETE -> ALREADY_MOVED / exit 0,以及 VIDEO_MOVED_SOURCE_RETAINED -> 原告警 / exit 4。第 3 节还明确:即使 retained source 被人工删除,工具也不能猜测告警已解决。
  • 正常 VIDEO_MOVED 成功后原源文件按合同已经删除;retained source 也允许后来被人工删除但告警仍必须粘性。若照第 4.2 节的“每项严格解析源”先执行,这两类重跑都会因源不存在提前失败,无法到达第 5 节的 ALREADY_MOVED 或粘性 exit 4;若先按状态短路,第 4.2 节“一切 mapping 均参与 source identity”的文字又不成立。
  • 测试矩阵只冻结 retained source 仍存在时的同 mapping 重跑,没有冻结普通成功移动后源已删除的 mapping 重跑,也没有覆盖 retained source 已被人工删除后的粘性重跑,因此不能靠验收矩阵消除该实现分叉。

最小 required fix

  1. 明确冻结预检顺序:所有 mapping 先做完整 selector exact resolution 和批次 entity 唯一性;随后按最新状态分类。
  2. VIDEO_MOVED / COMPLETE 必须在不要求 source_file 仍存在、不做物理 source identity 的情况下返回 ALREADY_MOVED / exit 0VIDEO_MOVED_SOURCE_RETAINED 必须同样不依赖源仍存在,直接复用 manifest 的 local file/hash/failure reason 返回粘性 exit 4,且不追加事件。
  3. 只有需要实际移动的 TODO_QUEUED / MOVE_FAILED 项进入源存在性、下载目录、reparse、age、扩展名、物理 source identity、重复源、目标唯一性和零副作用批次预检;明确终态 no-op 项不参加物理源重复判定。
  4. 增加三组非真空入口回归:普通成功移动后源已删除的同 mapping 重跑;retained source 仍存在的同 mapping 重跑;retained source 已被人工删除的同 mapping 重跑。三组分别断言 exit/status、目标/hash、manifest bytes 和无额外副作用;并保留 active move 的同源/同实体混合批次零副作用反例。

已闭环且冻结的部分

  1. PASS / F1:事项已纠正为重型,代码/测试门禁、模块职责、状态/事务/失败范围和分层验收入口明确;计划、总纲和目录入口已同步,V001 PASS 前实现保持冻结。
  2. PASS / F2 其余部分:每个已提供 selector 必须存在、唯一且指向同一实体;mapping URL 走登记 host 规范化;active move 的同源、同实体和目标批次唯一性以及预检错误零正式文件/零 manifest 副作用方向正确。
  3. PASS / F4:manifest 每行 JSON parse 后、schema/identity/state 消费前递归走共同 secret-key gate;三个命令共享,错误只泄露字段路径、不泄露值且不改写业务状态。
  4. PASS / F5:精确 source/target/reply 路由与当前项目配置一致;完整 envelope 的必填身份、scope/evidence/expected_action、稳定内容寻址 handoff ID、JSON 转义视频证据、不同 --now 字节稳定复用及 sent=false 边界足以指导实现。
  5. PASS / preserved boundaries:公开 CLI、时间窗/基础去重/Windows 命名、no-overwrite、copy/fsync/hash/link/manifest/delete happy path、handoff 文件范围与哈希复核,以及无网络/浏览器/下载/自动发送/正式路径动作均未被方案回退。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • 实现授权:DENIED_PENDING_F1_CLOSURE;代码、示例配置、测试和 fixture 继续冻结。
  • 复审边界:只需提交上述“终态分类先于 active source identity”的单点闭环及对应测试矩阵;已通过部分不重开,不增加网络、浏览器、下载、调度、正式数据或产品能力。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V002-F1-DESIGN-REREVIEW-20260805-001

  • 记录时间:2026-08-05T00:08:59+08:00
  • 审核阶段:V001 HOLD/1F1_DESIGN_RERUN_PREFLIGHT_ORDER_CONFLICT 限定方案复审。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V002-F1-DESIGN-20260804-001;前序=HANDOFF-INFOREV-INFODEV2-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V001-DESIGN-REVIEW-RESULT-20260804-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 组合设计:V001=11917/16C14FB2751A0EAB63F76371E75D0569FF8EF5B47FDD8724BE861314B6062733;V002=6342/DA3B3DDAA3C8B8EE33E2C0B6857B962754D740EB4BEE075E3BFB0F0FD4382736;V002 strict UTF-8=PASS、BOM=NO、trailing whitespace=0;目录导读已登记 V002。
  • 冻结基线:代码=49357/FFEA819A53DF15CFD2D92305F6926A4CCF3E261F436C315D9F0332EA8501918F;测试=10904/52E8269D82C676F4AB499F0A116B06E56F0FE4234D3EC36FA9BBA3137171E24A;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F,均与前序冻结值一致;实现/配置/测试/fixture 变化=0
  • 治理校验:OK / projects=1 / warnings=0
  • 外部动作:网络=0;浏览器=0;下载=0;真实媒体=0F:\\video=0;正式 ana-data=0

Findings

F1-R1(阻断,设计/状态安全):V002 用“或没有移动终态”重新扩大了 ACTIVE_MOVE 状态集合

  • V001 第 5 节已冻结的精确状态表只允许 TODO_QUEUED / MOVE_FAILED 进入实际移动,其他状态必须安全停止;该合同在上一轮已通过且本轮声明不重开。
  • V002 第 2.1 节第 4 项却把 ACTIVE_MOVE 定义为 TODO_QUEUEDMOVE_FAILED“或没有移动终态”,第 3 节矩阵再次写成 TODO_QUEUED / MOVE_FAILED / 无终态。这会允许实现者把 PROCESSING_HANDOFF_CONFIRMEDPROCESSINGPROCESSING_FAILED、缺失或未知状态等“尚无移动终态”的行误送入源/目标预检和移动事务,而不是沿 V001 的 E_STATUS 安全停止。
  • 该问题不是重开已通过状态合同,而是 V002 新增分类文字造成的真实回退;V001 原文没有该扩大项,因此上一轮无法报告。若不消除,终态分类先于源预检虽已闭环,状态准入仍存在两种相反实现。

最小 required fix

  1. 删除 ACTIVE_MOVE 定义和矩阵中的“或没有移动终态 / 无终态”;明确只有最新状态严格等于 TODO_QUEUEDMOVE_FAILED 才可进入阶段 B。
  2. 明确 PROCESSING_HANDOFF_CONFIRMEDPROCESSINGPROCESSING_FAILED、缺失状态和任意未知状态均为 E_STATUS / SAFETY_STOP,在阶段 B、复制、目标创建、源删除和 manifest 追加前终止,所有业务文件与 manifest raw bytes 不变。
  3. 增加一个参数化 CLI/main 入口反例覆盖上述非允许状态,断言 exit 3、E_STATUS 和零业务副作用;不得借此改变 V001 其他状态、退出码或范围。

已闭环且继续冻结

  1. PASS / 原 F1 顺序冲突:V002 已明确 all-selectors + entity uniqueness → latest-state classification → terminal projection;只有 active rows 进入物理源/目标预检。普通 moved 源已删除、retained 源存在、retained 源人工删除三组入口测试均明确比较原始 manifest bytes 和无额外副作用。
  2. PASS / terminal projectionTERMINAL_MOVEDTERMINAL_RETAINED 均不依赖当前源存在,不参加 source identity/目标写入集合;retained 告警粘性、整体 exit 4 与不追加事件明确。
  3. V001 已通过的重型分类、F2 精确选择器与 active 批次唯一性、F4、F5 以及全部 preserved boundaries 不重开。

第三轮 HOLD 收敛说明

  • 本事项已达到本地审计规范的连续第三轮 HOLD 收敛节点。本记录已一次列全当前组合设计可发现的剩余阻断,并说明该项源于 V002 新增文字。
  • 后续只允许一次性删除上述状态扩大并补对应参数化反例;不得再以微观字段逐轮追加设计。若相同事实仍未闭环或出现无新关键事实的继续分叉,应按规范升级管理/人工裁决或缩小范围,不继续串行加码。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • 实现授权:DENIED_PENDING_F1_R1_CLOSURE;实现、配置、测试和 fixture 继续冻结。
  • 复审边界:仅核对 ACTIVE_MOVE 严格 allowlist、所有其他状态 fail-fast 和参数化零副作用反例;原 F1 顺序闭环及所有已通过合同不重开。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V003-ALLOWLIST-FINAL-DESIGN-REREVIEW-20260805-001

  • 记录时间:2026-08-05T00:31:40+08:00
  • 审核阶段:连续第三轮 HOLD 收敛后的 F1_R1_ACTIVE_MOVE_ALLOWLIST_REGRESSION 最终单点方案复审。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V003-ALLOWLIST-DESIGN-20260805-001;前序=HANDOFF-INFOREV-INFODEV2-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V002-F1-DESIGN-REREVIEW-RESULT-20260805-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 组合设计:V001=11917/16C14FB2751A0EAB63F76371E75D0569FF8EF5B47FDD8724BE861314B6062733;V002=6342/DA3B3DDAA3C8B8EE33E2C0B6857B962754D740EB4BEE075E3BFB0F0FD4382736;V003=3197/D5812302D994C9D1835E5EA5BEEF305FAEDEBA892CDCAC0E545EF82EC1BDEBDA
  • V003 质量:strict UTF-8=PASS;BOM=NO;trailing whitespace=0;目录导读已登记 V003。
  • 冻结基线:代码=49357/FFEA819A53DF15CFD2D92305F6926A4CCF3E261F436C315D9F0332EA8501918F;测试=10904/52E8269D82C676F4AB499F0A116B06E56F0FE4234D3EC36FA9BBA3137171E24A;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;实现/配置/测试/fixture 变化=0
  • 治理校验:OK / projects=1 / warnings=0
  • 外部动作:网络=0;浏览器=0;下载=0;真实媒体=0F:\\video=0;正式 ana-data=0

Findings

  • 无阻断 finding。

F1-R1 闭环

  1. PASS / 精确 allowlist:V002 的“或没有移动终态 / 无终态”已显式废止;只有最新状态严格等于 TODO_QUEUEDMOVE_FAILED 才分类为 ACTIVE_MOVE 并进入阶段 B。
  2. PASS / fail-fastPROCESSING_HANDOFF_CONFIRMEDPROCESSINGPROCESSING_FAILED、缺失/空白 status 和任意未知状态均在阶段 A 返回 E_STATUS / SAFETY_STOP / exit 3,不得 stat/resolve 源、进入阶段 B、复制、创建目标、删除源或追加 manifest。
  3. PASS / 非真空验收:参数化 CLI/main 入口逐项覆盖六类禁止状态;每例冻结 stdout、exit、manifest raw bytes、哨兵源、业务目录树、文件哈希、partial、lock 和新增事件断言,足以证明零业务副作用。
  4. PASS / 组合一致性:V003 只修正 V002 的活动状态分类,不改变 V001/V002 已通过的终态投影、selector、批次唯一性、secret gate、canonical handoff 或范围边界。

冻结实施合同

  • 唯一实施依据:V001 + V002 + V003 组合;发生文字冲突时,V003 的 ACTIVE_MOVE 精确 allowlist 优先于 V002 被废止的两处宽泛表述。
  • 允许开发员一次性实现前序 HOLD/5 五项并执行获授权的纯离线目标测试、参数化反例、新鲜 TemporaryDirectory smoke 和 project 回归。
  • 不授权网络、浏览器、扩展、下载、真实媒体、调度、自动原生发送、F:\\video 或正式 ana-data;实现完成后仍须提交一次限定独立实现审核,PASS 前不得宣称工具可正式使用。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 方案状态:V001+V002+V003_APPROVED_FOR_LIMITED_IMPLEMENTATION
  • 管理升级:NOT_REQUIRED;第三轮收敛节点的唯一剩余阻断已完整关闭,没有继续串行设计分叉。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-IMPLEMENTATION-20260805-001

  • 记录时间:2026-08-05T01:28:48+08:00
  • 审核阶段:V001+V002+V003 PASS/0 合同下的 HOLD/5 限定独立实现复审。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-IMPLEMENTATION-20260805-001;前序=HANDOFF-INFOREV-INFODEV2-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-V003-ALLOWLIST-DESIGN-REVIEW-RESULT-20260805-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结设计:V001=11917/16C14FB2751A0EAB63F76371E75D0569FF8EF5B47FDD8724BE861314B6062733;V002=6342/DA3B3DDAA3C8B8EE33E2C0B6857B962754D740EB4BEE075E3BFB0F0FD4382736;V003=3197/D5812302D994C9D1835E5EA5BEEF305FAEDEBA892CDCAC0E545EF82EC1BDEBDA
  • 实现实物:code=56152/9B5C6FCE647C8E18822AB53488A57B6048A09997B62024B8FD2B593F0196DABF;config=1117/42A9AA7EE29ED061DC408C6C9A907FA7B20FD8C2B41605C54B6716A0FE388951;tests=24767/684F78F944F045C1352E4C09BFAFE598B7B5E9B5195EC944F5AF87D70EACC0D3;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F(未修改)。
  • 文档/证据:工具说明=10763/E976BDECE48D952B29AC65438C2E5891A67E29D1500DDD1D4B54889CDA224B48;实现证据=4648/D484E2CCED3213F257C2CCC819EBD4643AF818BE878C3E0D15F42BCBA10FB784;selfcheck=2223/34FD25217F3E0AE094B08C56C731AFAE49F648B85F634E5A58C8FAC5E467AB7F;worklog=7622/FD0F0A5B7B6F2D5BF01DFEC23CEFB1C3C4B58E673703252F03F4DCD558B258E2
  • 独立正向复验:py_compile=PASS;CLI help=PASS;目标 unittest=11/11 PASS / 1.426 s;独立 fresh smoke=1/1 PASS / 0.228 s;project discover=74/74 PASS / 48.897 s;git diff check=PASS;交付文件 strict UTF-8=PASS、BOM=NO;治理=OK / projects=1 / warnings=0
  • 独立反例只使用 TemporaryDirectory、净化 JSON 和数十字节非媒体文件;网络=0、浏览器=0、扩展=0、下载=0、真实媒体=0、调度=0、native send=0F:\\video=0、正式 ana-data=0

Findings

F1(阻断,代码/状态证据):terminal projection 没有验证被称为“可信”的持久化字段

  • classify_move_mapping() 只按 status 把 VIDEO_MOVED / COMPLETEVIDEO_MOVED_SOURCE_RETAINED 归为终态;move_completed() 第 1086、1097 行随后用 event.get() 直接投影 local_filesha256failure_reason,没有检查这些字段是否存在、非空或符合状态合同。
  • 独立入口反例构造 schema version 正确、selector 可解析但 VIDEO_MOVEDlocal_file=null / sha256=null 的 manifest;源文件按正常成功重跑场景不存在。实际结果为 exit=0 / COMPLETE / ALREADY_MOVED / target=None / sha256=None,把不完整持久状态错误宣称为成功,违反 V002“直接使用 manifest 中已经持久化的可信字段”和需求的 manifest 可追溯性。
  • 同一缺口会让 retained 状态在缺少目标、hash 或失败原因时仍返回 exit 4,而不是对坏 manifest fail closed。现有三组重跑测试只覆盖字段完整的工具自产事件,未覆盖缺失/畸形终态证据。

F2(阻断,代码/正式交接安全):canonical native handoff 可被 manifest 证据字段注入额外 envelope 行

  • load_manifest() 只检查 schema version、entity_id 为字符串及 dedupe_keys 类型,没有重新验证 terminal/handoff 事件中的 entity_idbvidpublished_at 等消费者字段。handoff_markdown() 第 1218—1220 行把这三个值原样插入行文本;只有 title、source URL 和 local path 使用 JSON 转义。
  • 独立入口反例保留合法本地视频和真实匹配 SHA-256,只把 manifest bvid 改为 BV1SAFE00000\nstatus=FORGEDhandoff 实际返回 exit=0 并生成文件,其中出现独立的 status=FORGED 行。内容寻址 ID 和 sent=false 不能消除正文注入;该文件不再是可直接发送的 canonical native envelope。
  • 路由字段换行注入测试只覆盖 config;现有 handoff 正向测试没有覆盖 persistent manifest evidence injection,也没有证明全部未转义标量均满足安全格式。

最小 required fixes

  1. 在共同 manifest 消费边界增加状态感知验证,或在 terminal projection 前执行等价共同验证:VIDEO_MOVED / COMPLETE 必须有非空 local_file 和 64 位小写十六进制 SHA-256;VIDEO_MOVED_SOURCE_RETAINED 还必须有非空 failure_reason。缺失、空白或畸形字段统一 E_MANIFEST / SAFETY_STOP / exit 3,不得返回 ALREADY/retained 成功、不得写业务文件或 manifest。
  2. 在生成 handoff 前验证所有原样插值的 manifest 标量,至少冻结内部 entity_id、可选 BV、offset-aware canonical published_at 和 SHA-256 的安全格式;或把所有证据标量改为不会产生新行的规范 JSON 序列化。任何控制字符、换行或格式不合法必须在创建 handoff 文件前安全停止,错误输出不得回显注入值。
  3. 增加非真空 CLI/main 反例:参数化缺失/空白/畸形 terminal local_file/sha256/failure_reason;参数化 entity_id/bvid/published_at 换行或控制字符注入。每例断言 exit 3、明确错误码、manifest/source/target/handoff 原始 bytes 与目录树不变、无 partial/lock/event,stdout 不含注入值。
  4. 修复后复跑现有 11 项目标测试、fresh smoke 和 project discover,并同步工具说明、实现证据、自检、执行日志及冻结哈希;不需要新设计或任何外部/真实运行。

已通过且冻结的部分

  1. PASS / F1 重型门禁:实现确在 V003 PASS 后开始,设计、实现、测试和证据入口齐全。
  2. PASS / F2 mapping:所有 selector 独立唯一且同行一致;全批 entity 唯一先于分类;只有 TODO/MOVE_FAILED 进入阶段 B;同物理源/同实体/目标冲突均在业务写入前停止,预检不追加 MOVE_FAILED。
  3. PASS / F3 正常路径:字段完整的 moved 与 retained 事件在源存在/删除三类重跑中保持 exit/status、目标/hash/失败原因和 manifest raw bytes;sticky 语义正确。
  4. PASS / F4:manifest 每行 parse 后即递归 secret gate,三个命令共享,字段值不出 stdout,状态不改写。
  5. PASS / F5 其余部分:route 必填/格式/配置注入门禁、完整 source/target/reply 与三段正文、稳定 24-hex handoff ID、跨 --now bytes 复用、文件范围/hash 复核和 sent=false 均符合合同。
  6. 公开 CLI、窗口/去重/命名、no-overwrite、copy/fsync/hash/link/manifest/delete happy path以及无网络/浏览器/下载/自动发送/正式路径范围未回退。

结论

  • 审计状态:HOLD
  • 阻断问题数:2
  • 正向测试:全部通过,但未覆盖上述两个 fail-closed 反例,不能据此放行。
  • 实现授权:DENIED_PENDING_F1_F2_CLOSURE;当前代码仍只可作为隔离开发快照,不得对真实下载目录执行移动,不得把生成 handoff 发送或宣称正式可用。
  • 复审边界:只复审状态感知 manifest 证据验证、handoff 标量防注入、对应反例及更新后的冻结证据;已通过部分不重开,无需新设计、网络、浏览器、下载、真实媒体或正式路径动作。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-HOLD2-FAIL-CLOSED-LIMITED-IMPLEMENTATION-REREVIEW-20260805-001

  • 记录时间:2026-08-05T15:36:35+08:00
  • 审核阶段:前序实现 HOLD/2 的 F1/F2 fail-closed 限定独立复审。
  • 审核对象:DEV-PROJECT-INFO-BILI-DYNAMIC-COLLECTOR-MVP-20260804-001;需求:REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-COLLECTOR-MVP-HOLD2-FAIL-CLOSED-REREVIEW-20260805-001;前序交接:HANDOFF-INFOREV-INFODEV2-BILI-DYNAMIC-COLLECTOR-MVP-HOLD5-REPAIR-IMPLEMENTATION-REVIEW-RESULT-20260805-001;来源/回传任务:019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 审核边界:只复审 F1 terminal persisted evidence fail-closed、F2 native handoff manifest scalar CR/LF/格式注入 fail-closed,以及已冻结合同是否回退;不重开此前通过项,不新增设计、产品或外部能力。
  • 实现实物:code=60090/67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8B;tests=31303/D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322;config=1117/42A9AA7EE29ED061DC408C6C9A907FA7B20FD8C2B41605C54B6716A0FE388951;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F,均与提交值一致。
  • 文档/证据:工具说明=11553/63E5AE5E431B3D9647A2CA2BF3A39061D97B2935A7C43B55ECAA9958DF5BB0F5;实现证据=7323/00DE95503724AC47EA3D1383DCAA10A37567031F98C4710B1F52A651C7D9FA5C;selfcheck=3183/986B2F1706BE2253D8AA37CC3E4A69E4913C3465F456EFCC8FCD41DC8E825331;worklog=8717/0EB09F474F3A8BB2A0637D31A086257C9CF376D3D607FCDFB9F772881673DD40,均与提交值一致。
  • 独立验证:前序两组原始阻断反例=2/2 PASS / 0.919 s;目标 unittest=13/13 PASS / 2.452 s;project discover=76/76 PASS / 58.021 spy_compile、CLI help、git diff --check、范围文件 strict UTF-8/no BOM 均 PASS;治理=OK / projects=1 / warnings=0
  • 外部动作:network=0;browser=0;extension=0;download=0;real media=0;schedule=0;native send=0F:\video=0;正式 ana-data=0

Findings

  • 无阻断 finding。

F1/F2 闭环

  1. PASS / F1validate_terminal_manifest_evidence()load_manifest() 共同消费边界验证全部视频 VIDEO_MOVEDCOMPLETEVIDEO_MOVED_SOURCE_RETAINED 事件,classify_move_mapping() 在终态投影前再次防御性验证。非空且无控制字符的 local_file、64 位小写十六进制 SHA-256,以及 retained 必需的非空无控制字符 failure_reason 均已成为 fail-closed 前置条件;缺失、空白、控制字符或错误格式统一返回 E_MANIFEST / SAFETY_STOP / exit 3,不再投影 ALREADY/retained 成功。
  2. PASS / F1 反例:9 组 CLI/main 参数化用例覆盖 terminal 字段缺失、空白、控制字符及非小写 hash;逐例证明完整业务树、manifest raw bytes、目标、事件与锁保持不变,污染值不进入 stdout。前序 local_file=null / sha256=null 成功误投影根因已关闭。
  3. PASS / F2validate_handoff_manifest_evidence() 在 handoff 文件创建前验证 24 位小写内部 entity ID、可选 BV 格式、canonical UTC published_at、64 位小写 SHA-256,以及无控制字符的 title/source URL/local path;任何 CR/LF、其他控制字符或格式异常均安全停止,错误只报告字段路径,不回显污染值。
  4. PASS / F2 反例:10 组 CLI/main 参数化用例覆盖 entity ID/BV/time 格式错误及 entity/BV/time/title/source URL/local path/hash 的 CR/LF 注入;逐例均为 E_MANIFEST / exit 3,不创建 handoff/partial/event、不残留锁,manifest、目标与完整业务树不变。前序 bvid 注入独立 status=FORGED 行的根因已关闭。
  5. PASS / preserved contracts:本轮代码变化限定于上述共同验证及对应测试/说明;此前通过的 mapping、状态 allowlist、retained-source 重跑、secret gate、route/canonical envelope、公开 CLI、去重/命名、no-overwrite、原子移动/manifest 顺序及无外部能力边界未发现回退。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 前序 HOLD/2:CLOSED
  • 交付边界:该冻结实现可向请求方作项目工具交付;本 PASS 不等同于 F:\video、正式 ana-data、网络、浏览器、下载、自动 native send 或调度授权,正式输出路径及外部动作仍须由既有责任方另行明确授权。
  • 后继评审:NOT_REQUIRED_FOR_THIS_CLOSURE;无需新增设计、真实运行或继续追加评审链。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-CHROME-DOWNLOAD-BRIDGE-DURATION-GATE-LIMITED-REREVIEW-20260805-001

  • 记录时间:2026-08-05T18:22:39+08:00
  • 审核阶段:既有审核任务恢复后的时长一致性 fail-closed 限定独立实现/输出复审。
  • 审核对象:DEV-PROJECT-INFO-BILI-CHROME-DOWNLOAD-BRIDGE-20260805-001;需求:REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 恢复交接:HANDOFF-INFOADMIN-INFOREV-BILI-BRIDGE-DURATION-GATE-REREVIEW-RECOVERY-20260805-001;correlation message:msg_20260805173417306_68438e3d;来源管理任务:019fbb4d-2ccb-7bd2-93bc-f57332d484a9;开发员任务:019fb7c5-b721-7332-b5c3-7120176fe016;请求方任务:019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 审核边界:只复审 B 站完整视频下载桥的远端/本地时长一致性 fail-closed 修复,以及相关 multi-P/preview/authentication 边界;不创建替代任务、审计链或管理复审层,不重开已验收首个视频。
  • 冻结实物:code=22229/541CD9A57E23976614B80CF731C6D4D49361A29BFBC029E9053C8E7093EC18F1;tests=15416/BDE24A5BE26BC10F534EA1BF7235B8066EDA6425BB432C06AC67BBD560EFA168;example=410/1581168C73BD0C320E46D42FE104CCB3594A3BF3D216098671794B2FB69868CC;usage=4423/40794C7933E8C6715DE558893D920B24652C494B100A7EDA3B34D9C6C97D750D;worklog=3262/F4CA408D1499A8CCDA536E462BE0F3EF3AF02E9ED993B50C01BE54FE98C68AC5;需求=4114/DC5807D6325AA13B1E0C72C92B9534003CC4F8046A1789AA70FCC98DECC9AB87,均与冻结值一致。
  • 独立验证:py_compile=PASS;CLI help=PASS;目标 unittest=15/15 PASS / 0.096 s;project discover=91/91 PASS / 54.533 s;目标文件 git diff --check=PASS;交付文件 strict UTF-8/no BOM=PASS;治理=OK / projects=1 / warnings=0
  • 独立定向反例:远端 3133.95 s、本地 600.133313 s 在任何发布预检与正式输出前抛出时长一致性错误;远端 1206.067 s、本地 1206.067664 s 通过,差值约 0.000664 s、门限 3.0 sneeds_authpremium_onlyprivatesubscriber_only、playlist 与 entries 六类状态均 fail closed。
  • 外部动作:network=0;Chrome=0;extension=0;download=0;real media=0F:\video=0;正式 ana-data=0;schedule=0;cookie/token/credential access=0;实现/测试/fixture 修改=0

Findings

  • 无阻断 finding。

闭环结论

  1. PASS / duration gatevalidate_duration_consistency() 对远端与本地时长执行正数/有限值校验,固定容差为 max(3 seconds, remote_duration * 0.1%);超过容差即失败,等于容差允许通过。发布路径在目标预检、正式媒体链接与 mapping 写入前调用该门禁,缺陷样本不会产生正式输出;端到端反例同时证明暂存目录完成清理。
  2. PASS / evidence:通过样本的 mapping 固定记录 remote duration、local duration、delta 与 tolerance 四项;远端 1206.067 s/本地 1206.067664 s 的正常样本符合门限。metadata probe 仅声明 METADATA_PASS_ONLY,不表示下载或发布完成。
  3. PASS / multi-P and auth:playlist、非空 entries、多 P/带 query 的非规范 URL,以及 needs_authpremium_onlyprivatesubscriber_only 均不能进入正式发布;未发现通过 preview、认证或会员边界绕过时长门禁的路径。
  4. PASS / preserved contracts:无 cookie/浏览器凭据、no-overwrite、FFprobe 视频/音频流校验、SHA-256、BaseException 回滚与暂存清理合同未发现回退;代码、测试和证据保持冻结。
  5. PASS / quarantine boundary:已隔离的约 600 秒 preview 继续排除且不得转写;已验收首个视频不在本次范围,本结论不重新检查或改写其既有状态。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 交付结论:冻结修复可由开发员按原链交付请求方;请求方只能在其另行具备的真实路径/下载授权下使用,任何实际下载仍必须逐项通过时长、multi-P 与认证状态门禁。
  • 审核动作:本轮不授权、也未执行网络、Chrome、扩展、下载、真实媒体、F:\video、正式 ana-data、调度或凭据访问。
  • 后继评审:NOT_REQUIRED_FOR_THIS_CLOSURE;不创建替代任务、平行审计链或新增管理审核层。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-IMPLEMENTATION-OUTPUT-20260805-001

  • 记录时间:2026-08-05T19:28:39+08:00
  • 审核阶段:股票估值每日台账 MVP 唯一一次必要实现/输出独立审核。
  • 审核对象:DEV-STOCK-VALUATION-LEDGER-MVP-20260805-001;权威需求=ana-doc/股票估值/股票估值每日台账业务需求_v1.0.md
  • 请求交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-IMPLEMENTATION-REVIEW-20260805-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a;请求方=case_analysis.analyst.valuation / 019fb338-fe89-7d52-9ba6-513e82de54d8
  • 审核边界:核对四表、正式 JSON 幂等导入、V1 四档、完整交易日/来源日期、单股隔离与整批回滚、版本有效期、V2 只读行情桥、查询/导出、单次运行脚本及正式库;不新增 provider,不修改 dev/ana-dev,不联网、不安装计划任务、不生成交易指令。
  • 冻结实现:core=37237/2F914E94110ACDB2676BC26733CE2ABD8A6B5E8C63836D42242867D3B022124C;market=3977/D43675B41D92ED2382B967DD530E7364778F236A69B9459306EA30925A255561;cli=5583/A2350F34C86B9CBB35AF82273F8419A1F87775ACF64D09C3D85468ECD6974A34;schema=2707/47E505DAB5F8D71BA3200F35AA00EDBCE3C243FA99936D3C0C208EC8AF41D1F6;run_daily=1049/5937CD5C2E46D008A1C6B4C9F8DDF49BF87BB778CCFAAD9AFED59BD6CBDFA18B;tests=20818/90FC283156767BA9733C5391BB8ADA33057BFF458880FC51E42F8307A0C6A7D4,均与交接值一致。
  • 正式输出只读复核:数据库=163840/48AF0F2277FC43D98480D330BE49A43173404EDEDC2AF3666CBA473AAD24699Cquick_check=ok;外键错误=0;四业务表;security=125valuation_version=136daily_price=0daily_judgement=0;同日重复/有效期重叠/多开口版本=0;136 个 snapshot/report 路径、snapshot SHA-256 与 valuation_id 全部可复算。缺口=325/7761E1A028C5FD46F6A8E412D4B01CD827D861AD0DC6F78D763402C207EFA132,内容为一条确定性低优先级同日版本跳过。
  • 独立正向验证:目标 unittest=15/15 PASS / 6.280 s;project discover=106/106 PASS / 60.799 s;正式输入临时冷导入=136 inserted / 1 gap / 1.343 s;同库热导入=0 inserted / 136 unchanged / 1.266 s;CLI help、strict UTF-8/no BOM、行尾空白和治理=PASS / OK / warnings=0
  • 外部动作:network=0;provider real call=0;schedule install=0;正式数据库写入=0;实现/测试/fixture 修改=0dev/ana-dev 修改=0

Findings

F1(阻断,需求/集成合同):V2 只读桥没有证明“未复权且已完整收盘”的价格

  • 权威需求第 24、86、122—123、209 行要求最新完整交易日的未复权收盘价,且盘中值不得进入台账;冻结 V2 registry/provider 固定 fqt=1,而 ledger market.py 第 60 行无条件写 is_complete_trading_day=True,没有从适配器证据证明复权口径,也没有阻止当日收盘前的 K 线被硬标为完整。
  • test_10 只 mock 一个已经整理好的价格对象,未断言复权参数或同日盘中拒绝,因此不能证明该主合同。按当前实现运行真实 daily 可能把不符合需求口径的价格写入正式库并改变四档标签。

F2(阻断,代码/版本时序):新复评在估值日当天生效,而需求规定次日起生效

  • core.py 第 502 行把每个版本 active_from 直接写为 valuation_date,第 529—532 行据此关闭上一版本。独立临时库反例导入 2026-08-04 旧版与 2026-08-06 新版后,对 2026-08-06 价格计算,实际绑定的新版本估值日为 2026-08-06;需求第 171 行要求“次日起每日判定使用新版本”。
  • 现有 test_04 只检查 2026-08-07,未检查复评当日,因而遗漏了生效日 off-by-one。

F3(阻断,代码/幂等证据):导入版本只用 snapshot 哈希,计算 JSON 变化会被静默计为 unchanged

  • 估值区间、方法和多数指标实际来自 calculation/valuation_results.json,但 core.py 第 270 行仅以 snapshot SHA-256 生成 source_hash/valuation_idINSERT OR IGNORE 后也未逐字段核对既有不可变版本。
  • 独立临时库反例保持 snapshot 不变,只把 calculation 的 base_low 从 10 改为 11;第二次导入实际为 inserted=0 / unchanged=1,数据库仍保存 10,且没有冲突缺口。形式上通过幂等,实质上未识别已导入输入变化,违反正式 JSON 可追溯和同一输入幂等的前提。

F4(阻断,代码/正式输出提交):失败日仍发布空 latest,且 Markdown/CSV 不是成对原子提交

  • cli.py 第 112—116 行无论日更状态均调用 export_latest()。独立空行情 fixture 反例得到 status=FAILED / exit=4 / failure_count=1,但仍创建 latest.mdlatest.csv,两者均为 0 行;这与本次证据声明“首次验证完整日成功前保持 absent”冲突,也会把无有效日价的文件误当最新总表。
  • core.py 第 845、866 行先后独立替换 CSV 与 Markdown。注入第二次写失败后,实际为新 CSV 已发布、旧 Markdown 保留;数据库虽按需求保留提交,但 list/show/export 和两份正式输出不再一致,不满足需求第 160、196 行的原子输出/导出失败合同。

最小 required fixes

  1. F1:先由需求所有者/项目管理员冻结可实施口径。若坚持未复权,必须授权并审核一个能证明未复权的登记 V2 行情合同;不得继续把现有 fqt=1 输出宣称为未复权。ledger 桥必须基于明确证据设置 complete-day,至少对上海当日收盘前 fail closed,并增加复权参数与同日盘中/收盘后入口测试;不得新增自由 provider 或真实联网验收要求。
  2. F2:对已有上一版本的新复评,冻结 active_from=valuation_date+1、上一版本 active_to=valuation_date;首次版本可保持能覆盖其首个有效日。增加复评当日仍用旧版、次日切换新版及历史判定不回写测试。
  3. F3:不必破坏正式库现有 ID;在命中既有 ticker+valuation_date+source_hash 时逐字段核对所有导入不可变值及路径,任何 calculation 变化不得计为 unchanged,必须 fail closed/形成明确冲突缺口。补 calculation 单字段变化反例;如改为组合 fingerprint,必须同时给出已初始化正式库的兼容迁移口径。
  4. F4:只有至少一个可信 daily judgement 成功写入时才发布新 latest;首轮全部失败不得创建空 latest,已有 latest 在全失败时保持原 bytes。把 Markdown/CSV 改为成对提交,捕获 BaseException 并在任一临时写、flush/fsync、replace 或第二文件提交失败时恢复旧二文件/保持二文件均缺席。补全失败、第一/第二文件提交失败及 KeyboardInterrupt/SystemExit 注入测试。
  5. 修复后复跑目标测试、project discover、V1/V2 只读回归和正式输入的临时冷/热导入;更新工具说明、实现证据、worklog 与冻结哈希。无需联网、真实日更或安装计划任务;正式运行库在复审前继续保持只读且不得写入价格/判定。

已通过且冻结的部分

  1. 四业务表与约束、正式库结构完整性、125/136 初始化事实及唯一诚实缺口通过。
  2. V1 四档边界、83 只离线日更、单股行情失败隔离、SQLite 非业务异常整批回滚、同日价格/判定不可变和无有效估值版本不留价格半状态通过。
  3. list/show 查询与正常 export 内容一致,200 行暖查询小于 1 秒;run_daily.ps1 不含计划任务安装原语。
  4. 没有修改 dev/ana-dev、新增 provider、真实联网、安装计划任务或生成交易指令;正式库没有伪价格/判定,现状可安全保留为只读初始化快照。

结论

  • 审计状态:HOLD
  • 阻断问题数:4
  • 当前安全边界:代码与正式初始化库可继续作为隔离开发/只读审计快照;不得执行正式 daily,不得把空或部分提交的 latest.md/latest.csv 作为交付完成。
  • 复审边界:只复审 F1—F4、对应非真空反例、更新后的冻结证据及合同未回退;不新增方案链、provider、网络或计划任务验收。
  • Open questions:F1 的未复权口径与冻结 V2 fqt=1 合同冲突,需需求所有者/项目管理员明确选择后才能编码闭环。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-BACKHALF-LIMITED-IMPLEMENTATION-REVIEW-20260805-001

  • 记录时间:2026-08-05T21:09:44+08:00
  • 审核阶段:已登录会话产生的完整本地媒体文件接管后半程限定独立实现审核。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求:REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-BILI-AUTHENTICATED-SESSION-BACKHALF-IMPLEMENTATION-REVIEW-20260805-001;来源/回传任务:019fb7c5-b721-7332-b5c3-7120176fe016;请求方:case_analysis.video_downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 审核边界:只审核 accept-browser-file 在完整媒体已由用户合法界面落盘后的本地接管、验证和发布;不读取 Chrome profile/Cookie/token,不使用签名媒体 URL,不运行网络、浏览器、扩展、下载或真实媒体,不访问 F:\video、隔离 preview 或正式 ana-data,不修改实现、测试、文档或其他工作区文件。
  • 冻结实物:code=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687,均与交接冻结值一致;worklog=2351/5FA13EE55EAE69D90E8BE933885BB1D2B7C5A61F02FD931A7A271BEEED23A08B
  • 独立验证:内存编译=PASS;根 CLI help 与 accept-browser-file help=PASS;目标 unittest=21/21 PASS / 0.143 s;owner 范围 project 回归=97/97 PASS / 53.846 s;目标文件 git diff --check=PASS;strict UTF-8/no BOM/尾随空白=PASS;治理=OK / projects=1 / warnings=0
  • 独立定向反例:空文件、伴随 .crdownload、增长中文件、目标碰撞、约 600.133313 s preview 对 3133.95 s 远端时长、发布期间 KeyboardInterrupt、映射脱敏与源/副本 SHA-256 绑定均按合同 fail closed 或通过;碰撞发生在外部命令前,失败后正式输出和暂存为零,源文件原 bytes 保持不变。
  • 外部动作:network=0;Chrome=0;extension/service/token=0;download=0;real media=0;signed media URL=0;credential access=0F:\video=0;quarantine=0;正式 ana-data=0;实现/测试/文档修改=0

Findings

  • 无阻断 finding。

审核结论

  1. PASS / exact binding and ingress validation:命令只接受 batch 中唯一精确 BVID;本地输入必须已存在、非空、后缀属于 AV 容器、没有 .crdownload/.part 伴随文件,且在固定等待前后大小和修改时间稳定。非 AV、partial、增长、BVID 不匹配或目标碰撞均在正式发布前停止。
  2. PASS / read-only copy and integrity:源文件仅以只读方式打开;复制在目标目录的随机同卷暂存内以 CreateNew 完成,复制过程中计算源流 SHA-256、复核源大小/修改时间,并重新计算暂存 SHA-256。异常捕获覆盖 BaseException,暂存清理且不移动、重命名或删除源文件。
  3. PASS / completeness and preview gate:本地接管只复用公开无凭据 metadata probe,不调用下载命令;FFprobe 必须确认正时长且同时具有视频流和音频流,随后按 max(3 s, remote duration × 0.1%) 比较远近端时长。约 600 秒 preview 对约 3134 秒完整视频不能进入发布。
  4. PASS / no-overwrite and mapping:媒体用硬链接 CreateNew 发布,映射用 CreateNew 写入;映射创建或其他发布异常会回滚本次正式媒体并清理暂存。映射保存 canonical source、发布时间、字节数、媒体 SHA-256、远近端时长证据和 codec,并标记 authorized_browser_file_handoff;不记录原本地绝对路径、Cookie、token、Chrome profile 或签名分片地址。
  5. PASS / preserved contracts:既有公开 probe/download--ignore-config --no-cache-dir --no-cookies --no-cookies-from-browser --no-playlist、multi-P/playlist、认证/会员状态、FFprobe AV、时长一致性、no-overwrite 和失败清理合同未发现回退;metadata probe 仍只表示 METADATA_PASS_ONLY,不表示下载或完整媒体已取得。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 授权范围:仅批准冻结实现作为“用户已通过合法界面取得单个完整本地 AV 文件之后”的自动接管后半程;不得据此宣称 Chrome/扩展完整文件入口已解决,也不授权读取认证状态、签名 URL、下载、真实媒体、F:\video、隔离 preview、正式 ana-data 或转写动作。
  • 入口阻断:PRESERVED。当前 Chrome/扩展没有满足安全边界的完整 AV 文件出口;TXT、MP3、封面、.m4s、partial、扩展任务完成状态及 600 秒 preview 均不得作为完整原件或交付完成证据。
  • 后继评审:本限定实现无需新增评审链;请求方只有在另行合法取得完整文件并具备对应真实路径/动作授权后,方可按文档运行后半程,且仍须逐项通过全部门禁。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-MYSQL-HOLD4-REREVIEW-20260805-001

  • 记录时间:2026-08-05T21:49:43+08:00
  • 审核阶段:用户变更后的 MySQL 单后端实现/输出集中独立复审,仅核对当前 MySQL 合同、前序 HOLD/4 的 F1—F4 闭环及已冻结业务边界。
  • 审核对象:DEV-STOCK-VALUATION-LEDGER-MVP-20260805-001;权威需求=ana-doc/股票估值/股票估值每日台账业务需求_v1.0.md;管理员冻结决定=HANDOFF-INFOADMIN-INFODEV2-STOCK-VALUATION-LEDGER-MVP-MYSQL-F1-DECISION-20260805-001
  • 请求交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-MYSQL-HOLD4-REREVIEW-20260805-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a;请求方=case_analysis.analyst.valuation / 019fb338-fe89-7d52-9ba6-513e82de54d8
  • 当前合同:写库仅 stock_valuation;行情只读源仅 trading_xuntou;不得读取/写入 tianxia,不得使用 V2/provider/network fallback,不保留 SQLite 后端或把旧 SQLite 作为迁移源;凭据仅环境变量或未跟踪本机配置;公开 CLI 固定为 init/daily/list/show/export
  • 冻结实物核验:提交列出的 package、schema、实现、测试、fixture、工具说明、证据、worklog 与权威需求共 16 项 bytes/SHA-256 均与实物一致;其中 core=46772/875D29EF68007E6370A80E7D1399680C196AECE10874BE2FBB838899980C39B6、market=10906/5B4DC4CD8798C58073F1A0E25A9DC180F73330C5FAEF2ADF242A6AFD7D90D32F、database=4074/0CAD60E8ED76A96A5D9B05D653596497A9755A60C3BC01CF3DA6331769CC0B8B、tests=25112/099F796477D78539054A68D74994B5EE9D188DDBBDC96EB40C924908D76BC81A
  • 独立静态/入口核验:根 CLI help=PASS;PowerShell 5.1 parser=PASS;治理=OK / projects=1 / warnings=0market.py 无 V2 导入/调用并通过只读连接读取 trading_xuntoudatabase.py 将生产写库限定为 stock_valuation、测试写库限定为显式开关下的 stock_valuation_test_*;未发现 tianxia、SQLite 产品后端、provider fallback、计划任务安装或交易指令回退。
  • 独立测试说明:当前 reviewer 进程没有配置 MySQL 测试凭据,提交的 MySQL 集成类按自身门禁安全跳过;本轮实际执行的纯单元项=1 PASS / 1 integration class skipped。因此不把开发员申报的 19/19 当作 reviewer 重跑结果;阻断结论来自冻结代码逐行检查与两个不需要数据库/外部动作的确定性故障注入。
  • 外部动作:network=0;生产 MySQL read/write=0trading_xuntou read/write=0;V2/provider=0;production daily=0;formal latest publish=0;schedule install=0tianxia=0dev/ana-dev 修改=0;实现/测试/fixture 修改=0

Findings

F4-R1(阻断,双文件提交失败清理):staging 写入/fsync 位于 BaseException 状态机之外

  • core.py:1006-1016 先创建两份 .pair-stage-*、写入、flush、fsync;捕获/回滚 BaseExceptiontry 直到 core.py:1017 才开始。因此任一 mkstemp/fdopen/write/flush/fsync 故障不会进入 core.py:1029-1048 的清理分支。
  • 独立临时目录反例在第二次 fsync 注入原样 KeyboardInterrupt:正式 pair 首次运行仍双缺席、已有 pair 仍保持 old-csv/old-md,但两种场景均实际遗留两份 .pair-stage-*。这没有闭合前序 required fix 明确包含的“任一临时写、flush/fsync”边界,也不符合本次交接和工具文档声称 staging/fsync 已纳入 BaseException 回滚的证据。
  • test_14_latest_pair_rolls_back_first_second_and_baseexceptions 只在 .pair-stage-* -> latest.csv/latest.mdos.replace 注入三类异常,并且只比较旧正式 pair;没有注入 stage create/write/flush/fsync,也没有断言 stage/backup 零残留,因此提交的 19/19 不能排除该反例。

P1(阻断,冻结数据库原子性回退):单股判定失败会提交只有 daily_price 的半状态

  • 权威需求第 197 行要求数据库失败不得留下“价格已更新但判定未更新”的半状态,工具说明第 75 行进一步冻结“个别行失败则该证券零写入,daily_pricedaily_judgement 不会出现价格半状态”。
  • _candidate_from_package() 只校验区间顺序(core.py:218-225),没有拒绝 base_low<=0;schema 也没有相应正数约束。apply_daily_prices()core.py:807-817 先插入 daily_price,之后才在 core.py:818-821 调用会因 base_low<=0 抛出 E_RANGE 的 V1 判定;该 LedgerErrorcore.py:874-875 按单股缺口吞下,外层事务随后在 core.py:876 正常 commit。
  • 独立无数据库 cursor/connection 桩反例得到 status=FAILED / failure=E_RANGE / reported_inserted_prices=1 / daily_price INSERT=1 / daily_judgement INSERT=0 / commit=true / rollback=false。现有 test_07 仅覆盖“在插入价格之前发现无有效版本”,test_18 仅覆盖 MySQL 底层异常导致整批回滚;都没有覆盖价格插入后的业务 LedgerError,所以不能证明逐证券零写入合同。

已关闭且冻结的部分

  1. F1 PASS:行情模块不再引用 V2;源 schema 在目标写入前证明;逐行验证 A 股身份、CNY、有限正收盘价、trade_date<=as_of、未复权、开市日/日历覆盖、上海 15:05 后最终加载时间及来源标识。实际源最大日期 2026-02-24 保持原日期且未伪装为当前日;正式日表/latest 仍为空。
  2. F2 PASS:首次估值版本从估值日生效;已有版本后的复评从估值日次日生效,上一版本结束于复评日;同日旧版、次日新版和历史判定不回写路径已在冻结实现/测试中闭合。
  3. F3 PASS:命中既有 valuation identity 时逐项比较所有导入不可变字段,包括 results-derived ranges/metrics/paths;同 snapshot 下计算结果变化形成 E_IMMUTABLE_VERSION_CONFLICT 并保留旧值。
  4. F4 partial PASS:全失败首次运行不创建正式 latest,已有成功 pair 在后续全失败时保持原字节;两次正式 replace 的 OSError/KeyboardInterrupt/SystemExit 回滚可由代码和测试证明。只有上述 staging 前半程失败清理仍阻断。
  5. MySQL 单后端、trading_xuntou SELECT-only、凭据不落盘/不回显、五个 CLI、无 V2/SQLite/tianxia/provider/计划任务/交易指令边界未发现回退;本结论不把历史 SQLite/V2 实现视为当前合同。

最小 required fixes

  1. F4-R1:把两份 stage 的 create/write/flush/fsync 全部纳入统一 BaseException 所有权状态机;任何阶段失败都原样传播非普通异常、清理本次 stage/backup,并保持正式 pair 双缺席或恢复旧双文件。增加第一/第二文件的 create/write/flush/fsync OSErrorKeyboardInterruptSystemExit 注入,逐例断言正式 pair、stage、backup 的完整终态和原异常。
  2. P1:确保每只证券的 price 与 judgement 作为不可分割单元。最小做法可在任何 INSERT 前完成版本区间/V1 判定及所有会抛业务错误的校验,或为每只证券使用 savepoint 并在任一 LedgerError 时回滚该证券;同时在正式估值导入/schema 层拒绝非正的判定区间。增加 base_low<=0 等“价格插入后才会失败”的入口反例,断言该证券 daily_price=0daily_judgement=0,其他有效证券仍可提交并报告精确 gap。
  3. 修复仅需离线/隔离 MySQL 测试:补齐上述非真空矩阵,复跑目标套件和 project discover,更新工具说明、实现证据、worklog 与冻结 hashes。不得运行生产 daily、发布正式 latest、访问真实行情/provider、安装计划任务或修改 dev/ana-dev

结论

  • 审计状态:HOLD
  • 阻断问题数:2
  • 当前安全边界:正式 MySQL 初始化数据及空 daily_price/daily_judgement 可继续保持只读;代码可用于隔离开发与无生产输出的修复验证。不得执行生产 daily,不得把当前实现或任何 partial/latest 临时实物作为完成交付。
  • 复审边界:仅复审 F4-R1、P1 两项最小修复与其非真空反例,并确认本次已经关闭的 F1—F3、F4 已通过子项和单后端边界未回退;无需网络、正式 daily/latest 或计划任务。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-MYSQL-F4-R1-P1-REREVIEW-20260805-001

  • 记录时间:2026-08-05T22:29:42+08:00
  • 审核阶段:前序 HOLD/2 的 F4-R1/P1-only 限定实现复审;复审进行中收到权威需求变更,因此只保留两个原阻断的快照子结论,不形成最终实现 PASS。
  • 审核对象:DEV-STOCK-VALUATION-LEDGER-MVP-20260805-001;请求交接=HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-MYSQL-F4-R1-P1-REREVIEW-20260805-001;需求变更通知=active_review_requirement_change_notice;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 原限定快照核验:core=47078/5D6644CF745B76F8710D3B83B75260FD41959BFDCB5B30FF3AD282B959CE8D45;tests=30000/9960BDA0A803050724264665FE9969C6F9898F3B7C55083ACAC397C6E8EAADB4;tool doc=9380/0EC0EB4690D1BC75FBF89A0C7EA0FA656739317BD2140B096F0271710C4AC53B;evidence=9741/BEBFBA7DAB2769BBD91EF68377D249557A213B70382AE5DFEFDA434CA08CD413;worklog=4610/D40E9D5ACCE26AAAA1889E676CAA6655F70FB536F7973E1D59560EFF039B8589,均与交接一致。
  • 需求变更事实:权威需求现为 14710/64625A19A5FF1948014A3F9F1BDABED2379F5A15D44F0E9B2004B5EDE481DA41,已把生产 daily 唯一价格来源改为 trading_xuntou.cn_stock_kline_1d_front;禁止读取 cn_stock_kline_1d、禁止 dividend_type 推断及 V2/network fallback,并新增专表最大日期必须满足请求日的合同。当前受审 market/tests/docs 正在被后续 delta 替换,故不再是最终交付快照。
  • 外部动作:production daily=0;formal latest=0;production MySQL read/write=0;market/provider/network=0;schedule install=0;实现/测试/正式输出修改=0;本审核仅写审计入口。

F4-R1/P1 子结论

  1. F4-R1 CLOSED_IN_SUPERSEDED_SNAPSHOT_write_pair 的两份 stage create/write/flush/fsync 已进入统一 BaseException 状态机。审核员独立执行 24 组“第一/第二 stage × create/write/flush/fsync × OSError/KeyboardInterrupt/SystemExit”矩阵全部通过;旧正式 pair 原字节保持且 stage/backup 均为 0。原第二次 fsync 反例在首次 pair 双缺席和已有 pair 两种状态下也均为零残留、正式状态正确。
  2. P1 CLOSED_IN_SUPERSEDED_SNAPSHOTapply_daily_prices 在任何 daily_price SELECT/INSERT 前转换区间并调用冻结 V1 判定。审核员无数据库桩以 base_low=0 重放原反例,结果为 FAILED/E_RANGE / inserted_prices=0 / inserted_judgements=0 / price SELECT=0 / price INSERT=0 / judgement INSERT=0;原“价格已写但判定未写”的半状态不能再复现。
  3. 本轮未独立重跑 MySQL 集成套件:reviewer 进程仍无本机测试凭据;开发员申报的 focused=2/2、target=21/21、project=118/118 仅作为冻结提交证据,不冒充 reviewer 重跑结果。两个子结论由代码、测试矩阵静态核对及独立无外部动作反例支撑。

结论

  • 审计状态:SUPERSEDED_REQUIREMENT_CHANGE
  • 当前快照阻断问题数(仅 F4-R1/P1):0
  • 最终实现结论:NOT_ISSUED。不得把本记录解释为整体实现 PASS,也不得沿用旧 F1/market 结论;新需求已实质改变行情表、口径证明和日期门禁。
  • 后续入口:开发员完成专表 delta、离线验证并冻结新的 code/tests/docs/evidence hashes 后,提交一次新的集中实现复审;该复审应组合核对新 market 合同、F4-R1/P1 子结论未回退及全部正式边界。
  • 当前安全边界:继续禁止生产 daily、正式 latest、真实行情/provider、计划任务和任何正式数据写入。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V001-DESIGN-20260805-001

  • 记录时间:2026-08-05T23:01:39+08:00
  • 审核阶段:exact 青枫浦上Q / BV1HA3o6oEJJ 已登录会话扩展入口 V001 合并安全设计独立审核;实现、真实认证和下载继续冻结。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;管理授权=HANDOFF-INFOADMIN-INFODEV-BILI-PLUGIN-FULL-VIDEO-NARROW-SCOPE-ASSIGN-20260805-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V001-DESIGN-REVIEW-20260805-001;来源/回传任务=019fb7c5-b721-7332-b5c3-7120176fe016;请求方=case_analysis.video_downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 设计实物:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V001.md=22418/665DDDFE4247DEFEE69B6DD1E0CBBD128EDD75B8A32BA609C90C718AC7C97C71;strict UTF-8/no BOM/trailing whitespace=PASS
  • 冻结基线:bridge=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687,均与交接一致;冻结后半程审计=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-BACKHALF-LIMITED-IMPLEMENTATION-REVIEW-20260805-001 / PASS/0
  • 独立依赖核验:隔离环境 yt-dlp=2026.07.04;其 globals.py 默认 plugin_dirs=['default']YoutubeDL.__init__ 在首次实例化时调用 load_all_plugins()download(url_list) 会再次调用 extract_info();下载器映射中 m3u8 -> FFmpegFDm3u8_native -> HlsFDhttp_dash_segments -> DashSegmentsFD。V001 对这些真实行为尚未冻结对应阻断机制。
  • 治理:OK / projects=1 / warnings=0。设计提交后的根级 outline/plan/execution log 因其他 owner 追加事项而继续增长;V001 设计、工作日志和冻结产品基线未漂移,不把并发 append-only 账本哈希差异作为方案 blocker。
  • 外部动作:real Cookie/token/signed URL=0;Chrome/extension install or modification=0;Native Host registry=0;network/download=0;real media/quarantine=0F:\video=0;formal ana-data=0;product code/tests/config changes=0

Findings

F1(阻断,Native Messaging 身份与秘密输入合同):唯一 origin 没有绑定到可复算的项目扩展身份,Cookie/page schema 也未冻结到可实现字段

  • V001 第 58、144—153 行只要求安装时检查一个“32 位 Chrome ID”并写入唯一 allowed_origins,没有把该 ID 绑定到项目扩展固定公钥/manifest key、构建实物哈希或编译期 expected ID;安装脚本若接受任意格式正确的 ID,就可能把 host 授给错误扩展。主机协议也未要求校验 Chrome 启动时传入的 origin 参数与同一 pinned ID 一致。
  • 第 114—130 行宣称 unknown field fail-closed 和 exact field set,但没有枚举 page_proof 与 Cookie record 的完整键、类型、nullability、数值范围和 canonical 规则。Chrome Cookie 对象的 hostOnly/session/expirationDate/secure/httpOnly/storeId/partitionKey/sameSite 如何投影、当前 tab cookie store 如何绑定、partitioned cookie 如何处置、session/expiry 如何转成 Netscape 字段均未冻结;实现无法从方案得出唯一安全 wire schema,也无法写出非自证的 unknown-field/过期/分区反例。

F2(阻断,yt-dlp 同进程秘密边界):设计声称“禁止插件加载”,但冻结版本默认加载用户插件,且 logger 不能覆盖全部第三方输出面

  • V001 第 172、253 行把“无插件”和 synthetic sentinel 作为硬门,却未定义在 import/首次 YoutubeDL 前如何关闭全局 plugin directories。冻结 yt-dlp 的实际默认值为 ['default'],首次 API 实例化会执行 load_all_plugins();用户插件可在持有内存 CookieJar/info_dict 的同一进程运行,直接破坏“只有受信任 host/yt-dlp 核心可见秘密”的威胁模型。
  • 第 134 行只配置 yt-dlp custom logger。冻结库仍有不经该 logger 的直接 stdout/stderr 写入路径(例如 CookieJar 解析告警),FFmpeg/其他子进程也必须显式重定向;当前测试只列 fake yt-dlp/CookieJar,不能证明真实冻结包在成功和畸形 Cookie/格式/异常路径上不会把 sentinel 写到协议 stdout、stderr 或 traceback。

F3(阻断,metadata-to-download 绑定与签名 URL):预检对象没有绑定到实际下载,且“内置 HTTP”不足以阻止 FFmpeg 下载器接收 URL

  • V001 第 164 行先 extract_info(download=False),第 174—182 行再描述下载,但没有冻结调用方式和对象所有权。冻结 API 的 download([url]) 会重新 extract_info();若实现走该自然路径,前一次通过 id/duration/DRM/AV 的 info/selected formats 与实际下载对象之间存在第二次解析窗口,门禁并未约束真正下载的格式。
  • 仅“不配置 external downloader”并不能证明签名 URL 不进 FFmpeg argv:冻结版本会为 m3u8 自动选择 FFmpegFD。方案没有冻结 selected/requested formats 的允许协议、实际 downloader class、fragment/manifest 拒绝规则或在第一媒体字节前的断言;fake yt-dlp 只检查 opts,不能证明真实调度器选择。
  • merge_output_format='mkv' 只约束合并路径;bestvideo+bestaudio/best 的单文件 fallback 未冻结必须 remux 为 MKV或 fail-closed。由此“同一已验证对象、仅本地 FFmpeg 输入、最终唯一 MKV”三个合同目前不能同时验收。

F4(阻断,取消/断连与后代清理):没有可在 Windows/阻塞网络下兑现的有界进程所有权状态机

  • V001 第 83、126、208—213 行要求 cancel、Native Host 断连、Chrome 关闭和 BaseException 都结束后代并清空秘密,但未定义协议 reader 与阻塞 yt-dlp worker 的并发关系、socket/read timeout、retry/fragment retry、总墙钟、取消检查点、grace/kill 时限或 join 终点。若主线程阻塞在 metadata/HTTP,cancel/EOF 可能不能及时被消费,CookieJar 生命周期也无上界。
  • Python finally/顶层 BaseException 不能在 Chrome 强制终止 Native Host 或进程崩溃时运行;V001 没有 Windows Job Object KILL_ON_JOB_CLOSE 或等价的 OS 级后代所有权。第 257 行仅要求 fake yt-dlp/FFmpeg 后“后代=0”,无法证明真实 sleeping child/FFmpeg 在 pipe EOF、host kill、cancel 和超时时已退出。

已通过且冻结的设计部分

  1. 单一 exact BVID、用户可见二次点击、无通用下载/批处理/自动触发、无外部消息、无 loopback/HTTP/WebSocket/token 文件的范围正确。
  2. Cookie 不进入 argv/env/config/storage/mapping/evidence、只使用内存 io.StringIO 的总体方向正确;Python 不承诺物理擦除的限制已诚实披露。
  3. 页面/full-duration、认证 metadata、single video、multi-P/live/DRM、AV、600 秒 preview、partial、候选唯一性及冻结 backhalf 的多层 fail-closed 顺序合理;正式媒体/mapping 仍由已 PASS 的后半程门禁发布。
  4. 实现审核前仅允许离线/合成测试,真实安装、Cookie、下载、注册表、F:\video、正式 ana-data 和转写继续为 0;冻结 bridge/tests/usage 及现有 TXT 扩展不得修改。

最小 required fixes

  1. F1:在 V002 固定项目扩展 manifest key/public identity 与唯一 expected extension ID;installer 不接受任意 ID,只比较实际 ID 与 pinned ID,并生成 exact origin;host 启动时再校验 Chrome origin 参数。逐字段冻结 page proof/start/cookie schema、当前 store/partition 规则、canonical domain/path/session/expiry 转换及所有字节/数量上限;扩展只投影允许字段,不序列化原始 Cookie 对象。
  2. F2:冻结在 import/首次实例化前关闭 yt-dlp 全局插件的实际机制,并断言 plugin maps/directories 为空;Native protocol 使用独立保存的二进制句柄,真实 yt-dlp/CookieJar/FFmpeg 的 stdout/stderr 全部进入不持久化的丢弃 sink。用冻结真实包做无网络 synthetic sentinel 测试,覆盖合法与畸形 Cookie、direct warning、异常和关闭路径,而非只测 fake logger。
  3. F3:冻结“一次解析、同一对象下载”的具体 API 状态机,例如在真实下载前的 match-filter 中验证将被下载的同一 processed info,或把经验证的唯一对象直接交给下载处理;禁止再次按 URL 解析。逐个 requested format 校验 id、protocol、DRM、A/V、duration 和实际 downloader class,只允许不会把 URL交给子进程的内置类;任何 FFmpeg argv 含 URL/header/Cookie 即安全停止。明确单文件 fallback 的 MKV remux 或拒绝合同,并增加真实调度器选择/单次解析计数测试。
  4. F4:冻结可并发消费 status/cancel/EOF 的协议 reader、单 worker/cancel event、网络/metadata/fragment timeout 与 retry 上限、总任务墙钟和有界 grace/kill/join;所有子进程置于 Windows kill-on-close Job Object 或等价 OS 所有权。增加无网络真实 sleeping-child 测试,在 cancel、pipe EOF、host disconnect、KeyboardInterrupt/SystemExit、超时和模拟 host kill 后证明 PID 全灭、Cookie stream 关闭清零、stage 可安全回收且协议无 sentinel。
  5. V002 仍只允许修改设计与账本;四项闭环并独立 PASS 前,不得创建实现、测试、extension、Native Host、构建/安装脚本,不得执行任何真实认证或下载动作。

结论

  • 审计状态:HOLD
  • 阻断问题数:4
  • 当前安全边界:V001 可作为范围/威胁模型草案继续修订,但不是可安全实施合同;现有 TXT 扩展、localhost/token/SQLite/Cookie 文件链、冻结 backhalf 和全部正式产物保持原状。
  • 复审边界:仅复审 F1—F4 的 V002 闭环及已通过边界是否回退,一次返回剩余完整阻断;无需真实 Chrome、Cookie、下载、注册表或媒体。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-FRONT-ADJUSTED-CONSOLIDATED-REREVIEW-20260805-001

  • 记录时间:2026-08-05T23:18:00+08:00
  • 审核阶段:MySQL 单后端、首次 HOLD/4、后续 HOLD/2 修复及前复权专表 delta 的合并独立实现/输出复审。
  • 审核对象:DEV-STOCK-VALUATION-LEDGER-MVP-20260805-001;权威需求=ana-doc/股票估值/股票估值每日台账业务需求_v1.0.md=15012/ACD0EBABA5BF424513A139A736C5A62B2AF1E3EAE80B616E57DA2ECC22FF0F95
  • 请求交接:HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-FRONT-ADJUSTED-CONSOLIDATED-REREVIEW-20260805-001;替代冻结交接=HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-FRONT-ADJUSTED-REPLACEMENT-20260805-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a;请求方=case_analysis.analyst.valuation / 019fb338-fe89-7d52-9ba6-513e82de54d8
  • 当前冻结实现:core=47078/5D6644CF745B76F8710D3B83B75260FD41959BFDCB5B30FF3AD282B959CE8D45;market=10087/F990ED84206FC66144F36500332BA57B229638D1371FC548E26F06A1D022E961;tests=31925/4E19DE08C46AD0367FD88C82C64D3622EA94114515CBA0030D8C10AAF8BA0723;database/schema/cli/run_daily/README/fixture 均与 replacement handoff 冻结值一致。
  • 文档与证据:工具说明=10074/9C75A5F84259C2EF41D92A2CCE5CE1C149A17F01DB39035E579CA29B3EB2B64B;实现证据=12168/F96E219DB571F2BDE2699AF2EB1F7293714CC752454A18F2DDFF3143B1155ADE;worklog=5601/7796A6C7DDAE6EF172CAE77535F4E6C1CB8003EECB01CF632C3433E8B41012DE
  • 独立静态/纯离线验证:replacement 哈希=PASScompileall=PASS;CLI help=PASS;PowerShell 5.1 parser=PASS;纯单元 MarketSchemaUnitTests=2/2 PASS;目标文件 diff check=PASS。本 reviewer 无本机 MySQL 测试凭据,未把开发员申报的 22/22、project 119/119 冒充为独立重跑。
  • 正式输出只读核验:latest.csv=31060/C88986DF9CD008BF010623A3BF9BED49D675CF72975FF8E0B31DE3E54216E0A2,共 124 个唯一 A 股 ticker、全部 CNY、全部交易日 2026-08-05;四档为偏低 3、基本合理 39、偏贵 39、明显偏贵 43,逐行按 close/base/optimistic 区间重算 mismatch=0latest.md=32890/98ECF8A0C7FE3141484A589A9533B8618BF1DEA5FDFE91614CE53F29ABE1F0F4 声明 124 条且正文有 124 行;latest_gaps.csv=192/E5BBD897B4A3BBE5A256C9E747F08DD2BEB4C23A1ACFB860D3184B20FDD555F7 诚实记录唯一 09880.HK 不支持缺口。未查询或改写生产数据库,数据库四表规范哈希采用需求 owner 已交付、开发员只读复核的冻结证据。
  • 外部动作:production daily=0;formal latest write=0;network/provider=0;trading_xuntou DDL/DML=0;tianxia=0;schedule install=0;ana-dev change=0;实现/测试/正式输出修改=0

Findings

F1(阻断,完整交易日日历水位):滞后的 current 日历资产仍可把旧行情接受为请求日的最新完整交易日

  • 权威需求第 122—128 行要求 cn_stock_kline_1d_front 只有在其最大行情日期满足请求日时才可作为价格来源,日期滞后不得冒充当前价;工具说明第 71 行也声明正式日历必须证明“请求日以前最大开市日”。
  • market.py 第 176—203 行从 status='current' / is_current=1 的同一日历资产内计算 MAX(c.trade_date<=as_of),但没有要求该资产的 window_end 覆盖请求 as_of。第 118—120 行仅要求 window_end>=trade_date,因此一个水位只到 8 月 4 日、但仍标记 current 的日历资产会自行证明 8 月 4 日是 8 月 5 日请求的“最大开市日”。
  • 审核员纯函数反例:as_of=2026-08-05trade_date=2026-08-04window_end=2026-08-04status=current/is_current=1is_open=1source=xtquantupdated_at=2026-08-04T16:10:00+08:00,实际 _record_from_row() 成功返回 PriceRecord(trade_date='2026-08-04')。现有 test 10 反而把同类 window_end=2026-08-10 作为正例,test 21/22 只检查列名,没有覆盖 stale window。
  • 这不会推翻已发布 2026-08-05 正式输出的只读事实:该批文件本身全部为 2026-08-05 且标签重算一致;但当前实现若用于后续生产日更,可能在正式日历资产滞后时写入旧日价格或把旧日期当作当前可接受水位,违反 fail-closed 合同。

最小 required fixes

  1. 在任何行情行投影及 stock_valuation 写入前,把正式日历资产的请求期覆盖作为全局硬门:所选唯一 current 资产必须满足 window_end>=as_of/cutoff,否则整体抛出明确的日历水位错误并保持目标四表与 latest.md/latest.csv 原 bytes;不能从同一滞后资产内部自证最大开市日。
  2. 在已证明覆盖请求期的 current 日历资产中再计算 MAX(is_open=1 AND trade_date<=as_of),要求每只证券的专表行精确等于该日期;逐股缺行继续只产生显式 gap,不能回退旧表、dividend_type、V2/network 或静态证券表。
  3. 增加非真空入口反例:日历 window_end<as_of 且旧日行其余字段完全合法时,命令必须在任何目标写/latest 前失败;同时保留周末/休市请求在“日历已覆盖 as_of、最大开市日早于 as_of”时可正确使用最近开市日的正例,并保留 exact ticker/source、schema failure、行级隔离测试。
  4. 修复后冻结新的 market/tests/docs/evidence/worklog 完整哈希,复跑目标 MySQL 测试、project discover、静态/治理检查;无需也不得重跑已经由需求 owner 完成的 2026-08-05 生产 daily、网络/provider 或计划任务。

已通过并冻结的部分

  1. MySQL 单后端和库边界通过:目标只写 stock_valuation,行情只读 trading_xuntou;无 SQLite、V2/network、tianxia、旧 cn_stock_kline_1ddividend_typecn_stock_instrument_static 运行依赖。
  2. F2/F3 通过:后续复评从估值日次日生效、旧版覆盖到复评日;同一估值身份逐项核对全部不可变字段,calculation 变化不能静默计为 unchanged。
  3. F4-R1/P1 未回退:两份 latest 的 stage create/write/flush/fsync 与 replace 均在 BaseException 状态机中;范围/V1 标签在任何 daily price SELECT/INSERT 前完成,原 base_low<=0 半状态不可复现。前序 SUPERSEDED_REQUIREMENT_CHANGE 中两项关闭子结论仍有效。
  4. exact ticker/source/suffix、CNY、正数 close、15:05 装载水位、source ID、行级失败隔离、四表事务回滚和 no-overwrite/成对 latest 提交方向通过;本轮未发现正式 124 股输出、唯一 HK 缺口或四档标签证据不一致。

结论

  • 审计状态:HOLD
  • 阻断问题数:1
  • 当前安全边界:2026-08-05 已发布的 124 股正式文件可继续作为该次需求 owner 运行的只读历史证据;当前代码可用于隔离修复和测试,但在 F1 闭环前不得再次执行生产 daily、覆盖正式 latest 或把后续日期结果视为已验收。
  • 复审边界:仅复审 F1 的日历请求期覆盖硬门、旧日/休市正反例及当前已通过合同是否回退;无需重开 MySQL 架构、F2/F3/F4/P1、provider 或正式生产运行。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-STALE-CALENDAR-FINAL-REREVIEW-20260805-001

  • 记录时间:2026-08-05T23:24:00+08:00
  • 审核阶段:前序合并实现 HOLD/1 的 F1 日历请求期覆盖单点终审。
  • 审核对象:DEV-STOCK-VALUATION-LEDGER-MVP-20260805-001;请求交接=HANDOFF-INFODEV2-INFOREV-STOCK-VALUATION-LEDGER-MVP-STALE-CALENDAR-FINAL-REPLACEMENT-20260805-001;前序审计=DEV-AUDIT-PROJECT-INFO-STOCK-VALUATION-LEDGER-MVP-FRONT-ADJUSTED-CONSOLIDATED-REREVIEW-20260805-001 / HOLD/1
  • 最终冻结实物:market=10274/AE841AF79131DAED6BCD459544207EFC288454A879EE05F916BE1D7473D834E2;tests=31997/92E611CA089F1D3E48C1C28808880D34DA649D498E9287BD99F3EE81715535E0;tool doc=10202/52E39F0478257FF6D079D2FBE7DDBF356460934784B9DB58781BEAAAFD5C9D84;evidence=12322/5019F3A528CB9AA463FF22C3BE52E9BB296E18D3379F0B00DA7E645AD354A349;worklog=5867/6D7634A82CF8BBF0E21ADE176B83BEF459B91BC06BB17133C6E7911B7E4C966D,均与 final replacement handoff 一致;其余实现与正式输出保持前序冻结值。
  • 独立限定验证:_record_from_row()as_of=2026-08-05 / window_end=2026-08-04 / trade_date=2026-08-04 返回 E_INCOMPLETE_TRADING_DAY;对 window_end=2026-08-05 / trade_date=2026-08-04 的“请求期已覆盖、最近开市日早于 as_of”正例仍接受。MarketSchemaUnitTests=2/2 PASS;静态核对确认 expected CTE 与 outer calendar join 均要求 window_end>=cutoff,参数顺序与 SQL 占位一致。
  • 开发员冻结证据:target=22/22 PASS / 86.679s;project=119/119 PASS / 140.964s;compileall/CLI help/PowerShell parser/diff/UTF-8/secret scan/governance=PASS。本限定终审未重跑 MySQL 集成套件,不把开发员结果冒充 reviewer 重跑。
  • 正式只读证据未变:2026-08-05 125/136/124/124、A 股覆盖 124/124、四档 3/39/39/43、唯一 09880.HK 缺口及 latest.md/latest.csv/latest_gaps.csv 哈希均与前序审计一致;修复未重跑、未改写生产 daily/history/output。
  • 外部动作:production daily=0;formal output write=0;network/provider=0;schedule=0;trading_xuntou DDL/DML=0;tianxia/ana-dev=0;reviewer implementation/test modification=0

Findings

  • 无阻断 finding。

审核结论

  1. F1 PASS:正式日历资产在派生请求日以前最大开市日前必须先证明 window_end>=as_of/cutoff;同一条件在 outer join 重复约束,纯函数行投影也独立拒绝 stale window。滞后 current 资产不能再自证旧日价格为当前可接受水位。
  2. 休市/周末语义 PASS:门禁要求日历资产覆盖请求期,而不是强制价格日期等于请求日;覆盖已证明后,仍可选择 MAX(is_open=1 AND trade_date<=as_of),不会误拒绝休市日的最近完整交易日。
  3. preserved contracts PASS:case-sensitive exact ticker/source/suffix、前复权专表-only、15:05、CNY/正数、行级 gap、MySQL 单后端、F2/F3/F4-R1/P1、双文件原子提交、无 V2/network/SQLite/tianxia/provider 回退均未发现回退。
  4. output PASS:本结论确认当前实现与 2026-08-05 正式只读输出证据可作为本 MVP 的完整实现/输出交付;不授权或要求重复生产执行。未来 daily 仍须逐次通过当前专表、日历水位和行级证据门禁。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 交付状态:IMPLEMENTATION_AND_EXISTING_OUTPUT_ACCEPTED
  • 后续评审:NOT_REQUIRED;如未来新增港股来源、provider、SQLite/V2 回退、网络路径、计划任务安装或交易指令,须作为新需求另行治理,不属于本次 PASS。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-DESIGN-REREVIEW-20260805-001

  • 记录时间:2026-08-05T23:33:00+08:00
  • 审核阶段:V001 HOLD/4 的 F1—F4 限定安全设计复审;V001+V002 组成唯一合同,冲突处 V002 优先。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;目标仅限 青枫浦上Q / BV1HA3o6oEJJ
  • 请求交接:HANDOFF-INFODEV-INFOREV-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-DESIGN-REREVIEW-20260805-001;前序审计=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V001-DESIGN-20260805-001 / HOLD/4;来源/回传任务=019fb7c5-b721-7332-b5c3-7120176fe016;请求方=case_analysis.video_downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 设计实物:V001=22418/665DDDFE4247DEFEE69B6DD1E0CBBD128EDD75B8A32BA609C90C718AC7C97C71;V002=23356/8526D942228B77C8A13FE8D6AC57B33925C59547FF25273E4A668DF2677564C2,均与交接一致;V002 strict UTF-8/no BOM/trailing whitespace=PASS
  • 冻结后半程:bridge=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687,均未漂移。
  • 独立身份复算:manifest key 严格 Base64 解码为 294-byte SPKI DER;SHA-256=E83C2B2AF3CF011543FBA13FBC524D1122EEA68548F9F27B9F7A82B5D594666C;前 128 bit nibble a..p 映射得到 oidmclckpdmpabbfedplkbdplmfcenbb,与 pinned ID 和 exact origin 一致。
  • 独立冻结依赖核对:yt-dlp 2026.07.04 实物中 globals.plugin_dirs 默认确为 ['default']plugins.load_plugins()YTDLP_NO_PLUGINS 或空 plugin_dirs 时立即返回,首次 YoutubeDL 初始化调用 load_all_plugins()。V002 的“stdlib 启动→NUL→设置环境→import→清空目录→真实加载并断言 maps/directories 全空→READY→才发送 secret”顺序可闭环前序 F2,而非继续依赖 custom logger。
  • 治理:OK / projects=1 / warnings=0。共享 outline/plan/execution log 可被并行 owner 继续 append;设计、worklog 和冻结后半程哈希一致,不把共享账本随后追加视为设计漂移。
  • 外部动作:implementation/tests/extension/host=0;real Cookie/token/signed URL=0;Chrome/registry/network/download/media=0;quarantine/F:\video/formal ana-data=0

Findings

  • 无阻断 finding。

审核结论

  1. F1 PASS / fixed identity and wire schema:manifest public key、DER hash、expected extension ID、exact origin、extension/host build identity 和 artifact manifest 形成可复算固定身份;安装器只能比较 observed ID,不能用任意 ID 铸造 origin;host 在 stdin/worker/secret 前复核 Chrome origin argv。协议 v2 对 frame、duplicate key、类型、整数/bool、page proof、start、cookie store/partition、domain/path/session/expiry 和 Cookie 数量/字节上限给出 exact fail-closed 合同。
  2. F2 PASS / plugin and output isolation:broker 不 import yt-dlp,worker 在任何 secret 进入前关闭真实插件入口并报告 READY_PLUGIN_DISABLED;协议 handle 独立、不可继承,fd1/fd2、worker、真实 CookieJar/yt-dlp/FFmpeg 输出统一进入非持久化 NUL。冻结真实包、畸形 Cookie、默认目录 sentinel plugin 与 sleeping FFmpeg 的无网络测试足以验证前序“真实包而非 fake logger”阻断。
  3. F3 PASS / one extraction and downloader binding:exact processed info 只解析一次;唯一 selected format 合并到同一 download_info,验证与 process_info() 使用同一对象并设置第二解析 guard。实际叶只允许 HTTPS HttpFD/DashSegmentsFD;FFmpegFD/HlsFD/ExternalFD/m3u8/未知协议在首媒体字节前拒绝。audit hook 禁 URL/header/Cookie 进入子进程,双流和单文件都只对本地文件生成唯一 MKV。
  4. F4 PASS / bounded ownership:reader/coordinator/worker 分工、阶段/总墙钟、retry、grace/kill/join 均有固定上限;worker 在 suspended 状态加入独立 KILL_ON_JOB_CLOSE Job Object 后才恢复,不能建立所有权即在 secret 前停止。具体实现必须按第 5.3 节由 worker 产生 yt-dlp/FFmpeg/bridge 后代并继承同一 job;broker 的“调度”不得实现为 job 外直接启动 bridge。真实 worker/child/grandchild 覆盖 cancel、EOF、disconnect、BaseException、timeout 和 host kill,可验证强杀时不依赖 Python finally。
  5. preserved boundaries PASS:exact BVID、第二次用户点击、无通用/批量下载、无 external messages/loopback/token 文件、内存秘密、页面/full-duration/DRM/multi-P/live/600 秒 preview/partial 门禁、冻结 backhalf 和实现审核前 offline-only 边界未回退。

实现授权与验收边界

  • 允许新增既定 dev/project-dev/bili_authenticated_extension/、对应 test 子目录与一页用法,按 V001+V002 实现最小离线 extension/native host、synthetic AV 和真实 sleeping-child 测试。
  • 实现必须固定 yt-dlp 版本及相关模块哈希、pinned FFmpeg/host/bridge executable、worker-spawned job inheritance、秘密 sentinel 全树扫描和冻结 bridge 回归;任何从 broker 直接在 task job 外启动 bridge、二次 metadata 提取、URL 进入 FFmpeg argv或插件 maps 非空均为实现阻断。
  • 本 PASS 不授权读取真实 Cookie、真实 Chrome/会话、安装/修改扩展或 Native Host、写 HKCU、联网下载、读取隔离 preview、写 F:\video/正式 ana-data 或启动转写;上述真实动作仍须等实现审核 PASS 后由既有权限链另行明确授权。

结论

  • 审计状态:PASS
  • 阻断问题数:0
  • 设计状态:V001_PLUS_V002_IMPLEMENTATION_READY_OFFLINE_ONLY
  • 下一入口:完成最小实现、全部冻结离线/合成/真实 sleeping-child 测试并提交同一 reviewer 的必要实现审核;不创建平行任务或真实下载链。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-REVIEW-20260806-001

  • 记录时间:2026-08-06T03:14:51+08:00
  • 审核阶段:已通过 V001+V002 组合安全设计后的 offline-only 限定实现审核;真实安装、认证会话和下载继续冻结。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;唯一目标=青枫浦上Q / BV1HA3o6oEJJ;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-REVIEW-20260806-001;前序审计=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-DESIGN-REREVIEW-20260805-001 / PASS/0;来源/回传任务=019fb7c5-b721-7332-b5c3-7120176fe016;请求方=case_analysis.video_downloader / 019fcc5d-798f-7ea1-8325-3a4d1f2dc5a5
  • 设计基线:V001=22418/665DDDFE4247DEFEE69B6DD1E0CBBD128EDD75B8A32BA609C90C718AC7C97C71;V002=23356/8526D942228B77C8A13FE8D6AC57B33925C59547FF25273E4A668DF2677564C2,均与交接一致。
  • 冻结实现清单:source-artifact-manifest.json=2510/91E5E28CC21F9E214FE3A6D351D883AF3F12DA11C4DD9828D79934108D9367EC;清单所列 15 个产品文件的 bytes/SHA-256 全部复算匹配,实际产品目录除清单自身外无漏项。测试树聚合=7 files/612 bytes/1A97EF2CD9A4D7FA64D49A3890F22730622087C09DCFD5990A25B95230C7471B;用法=10499/9789F2B7CE0141E726A47CA396D89873BCCFD4260C1AA4210C766A92FB0ABCCA;worklog=5269/62C789E3271D821550BBC51A194E75CC9B546E581F6F00380C536BE6B3384AEF,均与提交一致。
  • 冻结后半程未漂移:bridge=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687
  • 独立执行:目标环境=28/28 PASS / Ran 28 in 12.273s,无 skip;冻结 bridge=21/21 PASS / Ran 21 in 0.152s;全项目=127 tests / OK / 6 skipped / Ran 127 in 65.865s。Python compile、Node check、PowerShell parser、scoped diff、strict UTF-8/no BOM/no trailing whitespace=PASS;治理=OK/projects=1/warnings=0
  • 外部动作:real Cookie/session/Chrome/extension install/native host install/HKCU=0;network/download/real media/quarantine=0F:\video/formal ana-data/transcription=0;reviewer 对实现、测试、说明和冻结 bridge 的修改=0

Findings

F1(阻断,实际 worker 无法建立固定 stage):环境清理删除了运行时必需的 LOCALAPPDATA

  • worker.py:195-204 把固定运行根定义为 %LOCALAPPDATA%\project-info\bili-auth-ingress\BV1HA3o6oEJJ,缺少 LOCALAPPDATA 即抛 E_STAGE;但 worker.py:477-481 的 sanitized environment allowlist 不含 LOCALAPPDATA,而 _worker_mainnative_host.py:452-455 清空整个环境后才读取 secret、加载配置并进入 run_authenticated_task()
  • reviewer 在目标环境按实际清空顺序执行,得到 LOCALAPPDATA_present Falsefixed_stage_root_error E_STAGE。现有真实 worker 测试因源码目录没有 config.json,在更早的 E_CONFIG 处结束,没有走到 stage 根,因此 28/28 绿灯未发现此必现故障。当前快照即使未来合法安装并提供完整配置,也不能开始下载。

F2(阻断,秘密前预检):第二次点击没有建立新的无秘密 ready/lease,陈旧 stage 清理也发生在 secret 进入之后

  • background.js:233-258 的第二次 start 仅复用第一次校验时的 nativeReady,随后立即调用 cookies.getAll() 并发送 secret start;它没有在 Cookie 读取前请求一次 fresh preflight。若 config/hash/正式输出碰撞在两次点击之间变化,broker 直到收到含 Cookie 的 start 后才在 native_host.py:637-644 复查并拒绝,违反“E_EXISTS/config/hash 在 Cookie 读取前失败”的冻结合同。
  • V002 要求 host crash 后的固定 stage 清理在任何新 secret 前完成;实际 cleanup_stale_runs() 位于 worker.py:757-760,只在 broker 已收到 start、worker 已报告 READY、broker 已把 secret frame 写入 pipe 后执行。stage 重解析点、未知残留或清理错误因此都只能在 secret 已进入 worker 后发现。

F3(阻断,取消与正式发布竞态):本地验证后到 frozen bridge 提交前没有取消检查,coordinator 又过早把任务标为 CANCELED

  • worker.py 只在 766、797、800 行检查 cancel;进入 802—825 行的本地 remux/FFprobe/bridge 链后没有设计要求的 FFmpeg 前后、bridge 前后检查。WorkerTask.cancel() 又在 native_host.py:312-319 立即把任务设为 terminal CANCELED,然后才给予 worker 3 秒 grace;bridge 可在这段窗口内完成 CreateNew 正式媒体和 mapping。
  • reviewer 纯临时桩反例在 probe_mkv() 返回时把 cancel 置 true;当前 run_authenticated_task() 仍调用 run_frozen_bridge() 一次,并返回 ('BV1HA3o6oEJJ.mkv','BV1HA3o6oEJJ.download.json',True)。这证明“UI 已收到 CANCELED”与“正式输出已提交”可同时发生;现有测试只证明 Job 能杀真实 sleeping descendants,没有覆盖产品入口的 cancel/commit 仲裁。

F4(阻断,构建/安装产物不完整):构建为 one-directory,安装却只复制一个 EXE

  • build_host.ps1:28-37 明确使用 PyInstaller --onedir;这种输出由 EXE 与同目录依赖树共同组成。当前 build manifest 在 46—55 行只记录主 EXE,未绑定其余运行文件;install_native_host.ps1:174-177 也只复制该 EXE 和 config,不复制或复验 one-directory 依赖树。
  • 因此即使后续授权操作者完成真实构建,安装目录也不是可运行的已审核 host;同时未绑定依赖树使构建输出无法按 source artifact 证据做完整性验收。现有测试只验证“缺少固定 PyInstaller 时输出根不创建”,没有验证可运行的完整安装树。

F5(阻断,安装 fail-closed/供应链):安装器接受任意自洽清单并可覆盖既有 HKCU 注册,失败时不回滚注册表

  • V002 要求安装器在 HKCU 前核对实现审核冻结的 artifact manifest。实际 install_native_host.ps1:57-95 只检查调用方提供清单的通用 schema/identity 与相互引用,没有固定本次 15 文件集合或审核冻结清单。现有 test_installer_validation_only_has_no_registry_or_install_output 正例反而构造仅含 source.txt 的一文件 source manifest、任意 sys.executable host 及自签 build manifest并成功得到 VALIDATION_PASS_ONLY,直接证明冻结实现身份未被安装门禁绑定;build_host.ps1 在 PyInstaller 前也未逐项复验 source manifest。
  • 安装路径 install_native_host.ps1:188-190 使用 New-Item -ForceSet-Item,会覆盖同名既有 Native Messaging 注册;catch 只删除 $root,不恢复或删除本次 HKCU 变更。重复安装或注册表中途失败不能满足 no-overwrite/原状态恢复。测试从未执行 -Install 的临时 registry provider 正反例,故没有覆盖设计冻结的 CreateNew、第二 origin/wildcard、首/中途失败和重复运行矩阵。

已通过且冻结的实现部分

  1. extension public key/SPKI hash/expected ID/exact origin、manifest 权限、protocol v2 exact request schema、duplicate key/bool-as-int/frame 上限、page/cookie store/partition/domain/path/session/expiry 门禁均与设计一致。
  2. broker 在 origin 校验后才读 stdin;worker suspended→AssignProcessToJobObject→resume,broker Job handle non-inheritable且 kill-on-close。真实 worker/child/grandchild 七类终态与 abrupt owner death 均证明 PID 全灭,未发现 breakaway 或 broker 在 job 外启动 bridge。
  3. yt-dlp 2026.07.04 模块哈希、import 前 YTDLP_NO_PLUGINS、plugin dirs/maps 全空、NUL 输出、内存 CookieJar、单次 extract_info、同一 download_info、HTTPS HttpFD/DashSegmentsFD、二次解析 guard和本地 MKV路径均通过现有实现与非真空测试。
  4. 冻结 accept-browser-file 后半程 21/21 通过;600 秒 preview、multi-P/auth、AV/时长/SHA-256/CreateNew/BaseException 合同未漂移。上述通过项不因 F1—F5 重开。

最小 required fixes

  1. F1:保留并严格验证一个非秘密、绝对、本地且无重解析链的 LOCALAPPDATA/固定 stage 根,或在环境清理前用 Win32 known-folder 得到同一固定根;加入真实 worker 入口正例,必须越过 config 和 stage 创建而不是继续以 E_CONFIG 提前结束。
  2. F2:在第二次点击读取 Cookie 前增加一次无秘密 prepare/lease 状态机,原子完成 fresh config/hash/正式碰撞、固定 stage 陈旧运行清理、Job 分配和 plugin READY;任何失败保持 Cookie read/start-secret/network/stage-new=0。增加“第一次 READY 后 config/输出/stage 被改变”的入口反例。
  3. F3:按 V002 补齐每个本地 blocking stage 与 bridge 前后的 cancel 检查,并让 coordinator 只在 worker 确认 pre-commit cancellation 后宣告 CANCELED;定义 bridge 已进入/已提交时 cancel 与 COMPLETE 的唯一仲裁,保证任何 CANCELED 终态正式输出恒为 0。增加 probe 后 cancel、bridge 前 cancel、bridge 中 cancel、EOF/disconnect/timeout 的非真空入口测试与正式目录断言。
  4. F4:二选一闭环:改成经过冻结验证的单文件 host;或保留 --onedir 并对完整依赖树生成 name/bytes/SHA-256 清单,安装时 CreateNew 复制整树、复读复验后才生成 host manifest。增加合成 one-directory 多文件树的完整/缺件/篡改/中途失败测试;本修复复审不要求真实构建或安装。
  5. F5:让安装入口绑定本轮最终冻结 source/build receipt 和 exact 文件集合,禁止任意自签/缺件清单;构建前逐项复验 source 清单。HKCU 路径必须预检不存在、禁止 -Force 覆盖,并把 root 与 registry 首/中途 OSError/BaseException 纳入同一回滚状态机;用临时 registry provider 覆盖成功、重复、错误 origin/ID/hash、首/中途失败和原状态恢复,不写真实 HKCU。
  6. 修复仅限当前 extension 源、对应离线测试、用法/证据和账本;冻结 bridge 三文件不得改。冻结新 hashes 后只提交 F1—F5 限定复审;不得把修复过程扩展为真实 Chrome/Cookie、构建安装、HKCU、network/download、real media、F:\video、formal ana-data 或转写。

结论

  • 审计状态:HOLD
  • 阻断问题数:5
  • 当前安全边界:当前实现只可用于 F1—F5 的离线修复与临时测试;不得构建/安装扩展或 Native Host,不得读取真实 Cookie/会话、联网下载、读取隔离 preview、写正式媒体/数据或启动转写。冻结 bridge 与既有已验收第一条视频继续保持原状。
  • 复审边界:仅复审 F1—F5、补充的非真空离线证据及上述 passed contracts 是否回退;无需也不得进行任何真实认证、安装或下载动作。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-F1-F5-REREVIEW-20260806-001

  • 记录时间:2026-08-06T04:27:47+08:00
  • 审核阶段:前序实现审核 HOLD/5 的 F1—F5 限定独立复审;V001+V002 已通过设计合同、前序 passed-and-frozen 结论及冻结 accept-browser-file 后半程不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;唯一目标=青枫浦上Q / BV1HA3o6oEJJ;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • 请求交接:HANDOFF-INFODEV-INFOREV-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-F1-F5-REREVIEW-20260806-001;前序审计=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-REVIEW-20260806-001 / HOLD/5;来源/回传任务=019fb7c5-b721-7332-b5c3-7120176fe016
  • 修复快照:source manifest=2511/CE43F1BD7AB87EFAA6B98EB456EC3938E4DDFEBBAB36268E774746F307EF7C0A,所列 15 个产品文件 bytes/SHA-256 独立复算全部匹配、无缺件;build script=6322/7A6528C4F5019F59D59D7FD92E753CE8A9B62E8FDA1ABB6CD98004B032D56129;installer=15542/783A3E0227B11C1023684522A9BA54222781B926668361939002A6889A269EAB;测试树聚合=7 files/612 bytes/8BDA96E3CFE867E0E2906BE9CEF13B1CD39AAF1D5969A7B0A63EC38630D4A0E1;用法=11513/C4B6B0F2E4EE32D4FFA3E4AA633C56E701777B9ABD6EA3DC9012D80BC8915D69;worklog=6736/FA5169F52D841D37776CEA1A593F2E71457F009BD45E39875973372E3DAC7E35
  • 冻结后半程未漂移:code=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687
  • 独立执行:目标环境=30/30 PASS / Ran 30 in 27.473s;冻结 bridge=21/21 PASS / Ran 21 in 0.182s;全项目=129 tests / OK / 6 skipped / Ran 129 in 78.568s;Python compile、Node check、JSON parse、PowerShell parser、strict UTF-8/no BOM/no trailing whitespace、scoped diff=PASS;治理=OK/projects=1/warnings=0
  • 外部动作:真实 Cookie/session/Chrome、正式 extension/native host build/install、HKCU、network/download、quarantine/real media、F:\video、formal ana-data、transcription=0;reviewer 对实现/测试/说明/冻结 bridge 修改=0。仅使用 TemporaryDirectory、fake PyInstaller、mock Chrome 和临时文件 registry provider 做离线反例。

Findings

F2-R1(阻断,prepare/secret 并发仲裁):同一可见第二次点击可并发进入两条 start,导致 Cookie 读取和 secret frame 各发生两次

  • sidepanel.js:45 在点击处理开始时不立即禁用按钮或取得本地 in-flight lease;background.js:202-220freshNativePrepare() 使用全局 nativeRevision/lastNativeType/preparedTaskNonce,没有 request/lease correlation;background.js:260-305 也没有在第一个 await 前原子设置 start-in-progress。两个并发 start 因而可以共享/交错 prepare 状态。
  • reviewer 将 mock getAllCookieStores() 延迟 20 ms 后并发执行 Promise.all([dispatch('start'), dispatch('start')]),当前实现实际得到 cookieReads=2prepareCount=3(含前序失败 prepare)、startCount=2;两个 start 均已携带 Cookie secret,其中一个最终 E_EXTENSION。在真实 broker 中第二个 start 还会使 WorkerTask.start()E_PREPAREnative_host.py:722-727 随即 task.terminate(),可中止第一个合法任务。
  • 现有 background_contract.mjs 只覆盖顺序单击,故 30/30 绿灯未验证“一个 prepare lease 只能消费一次、一个用户动作最多一次 Cookie read/start secret”。这仍违反 F2 的 secret-free prepare/lease 和单任务合同。

F4-R1(阻断,正式用法未同步):构建合同已改为 onefile,但交付说明仍两处声明 one-directory

  • B站已登录会话完整视频扩展入口.md:31 仍写 PyInstaller 6.15.0,one-directory,第 41 行仍称 build_host.ps1 生成 one-directory host;同一文件第 74、80、92 行和实际 build_host.ps1:78-103 则冻结为 --onefile、唯一 EXE。
  • 这是未来获授权操作者的正式构建/安装入口,互相矛盾的包装合同会使验收对象和文件完整性口径不唯一。F4 的代码路径与 fake builder 状态机已通过,但交付文档尚未闭环原阻断。

F5-R1(阻断,审核快照没有外部信任锚):bundled source manifest 仍可与被改产品一起重签并被 build/installer 接受

  • build_host.ps1:11-55install_native_host.ps1:96-173 只要求 source manifest 与脚本同目录、文件集/字段固定且内部 bytes/hash 自洽;两者均未比较本次审核冻结的 source manifest SHA-256 CE43F1BD...7C0A 或其他 reviewer/admin 发出的外部 receipt。build receipt 又由同一未锚定 build script 根据当前 manifest 自行生成,因此不能把“当前自洽”提升为“本轮已审核”。
  • reviewer 在纯临时复制中给 worker.py 追加 synthetic 字节、把 15 项 source manifest 重新计算为新哈希 C8887646...6F14,再用测试同类 fake PyInstaller 6.15.0 运行复制的 build script;结果 returncode=0,生成唯一 EXE 与 schema 2 receipt。随后复制的 installer 对该未审核 manifest/receipt 返回 VALIDATION_PASS_ONLY,而正式安装目录和临时 registry 均未创建。被改 worker=877A79D8...913CE,与本审计冻结物不一致但门禁仍通过。
  • 现有测试只覆盖“修改产品但不更新 manifest”和“把相同 manifest 复制到外部路径”;没有覆盖攻击者/误操作同时刷新同目录 manifest 与 build receipt 的反例。V002 第 2.1 节要求 HKCU 前核对实现审核冻结 artifact manifest hashes,当前仍未实现该信任来源。

已通过并冻结的闭环

  1. F1 PASSLOCALAPPDATA 在环境清理前按绝对本地、既有链无 reparse 校验并唯一保留;真实 job-owned worker 使用有效 config 越过旧 E_CONFIG,secret=0 时完成 stale cleanup/lease,EOF 后 stage/正式输出均为 0。
  2. F3 PASS:下载后、本地 remux/rename/候选/FFprobe 与 bridge 前均有 checkpoint;commit event 使 pre-commit cancel 终态正式输出为 0、bridge 已进入时 cancel 被拒绝并由 bridge 终态决定。现有 probe/commit/bridge 桩、coordinator timeout/cancel 及真实 Job 后代测试通过,未复现前序 CANCELED+正式输出并存。
  3. F4 code PASS:实际构建脚本固定 PyInstaller 6.15.0 --onefile,输出根只允许唯一 EXE+schema 2 receipt;fake builder 成功/失败和 work/spec 清理通过。仅正式用法的两处 one-directory 陈述未同步。
  4. F5 transaction PASS:installer 已禁止 -Force 覆盖,root/registry 预检不存在,host/config/manifest 使用 CreateNew+复读,临时文件 registry provider 覆盖成功、重复及六个失败点并恢复空状态;当前剩余阻断仅是未绑定外部审核哈希的供应链身份。
  5. 前序 public key/SPKI/ID/origin/wire schema、插件禁用/NUL/内存 Cookie、单次解析/同一对象、downloader allowlist、本地 MKV、Job Object 后代所有权以及冻结 bridge 21/21 均未发现回退。

最小 required fixes

  1. F2-R1:在 side panel/background 的第一个异步边界前取得不可重入的 start lease并立即禁用 start/retry;给 prepare 响应绑定一次性 request/lease ID,broker 原子消费一次且 duplicate prepare/start 只返回 E_BUSY/E_PREPARE、不得终止已启动的合法任务。新增延迟 Cookie-store 的并发双击入口反例,必须证明第二条在 Cookie 读取前失败、总 cookieReads=1、start secret frame=1、首任务不被终止。
  2. F4-R1:把正式用法第 31、41 行统一为 PyInstaller 6.15.0 --onefile / no UPX / 唯一 EXE+schema 2 receipt;全文件不得再出现 one-directory/onedir,且不改变真实动作冻结边界。
  3. F5-R1:为 build 和 install 增加来自本次正式审计/管理员确认、位于可变 source/build 树之外的 reviewer-approved source-manifest hash 信任锚,并在解析 manifest、调用 builder或复制产物前比较;真实 build 完成后、HKCU 前还须对 exact build receipt/EXE 做一次 hash-only 限定确认或使用等价的外部批准 receipt。新增“修改产品并同步重算同目录 source manifest/build receipt”的反例,给定原审核哈希时必须在 build/install 输出前失败。文档明确实现 PASS 最多授权 build,install/HKCU 仍须等 exact build receipt 确认。
  4. 仅修复 F2/F4/F5 对应 extension、离线测试、用法/证据/账本;F1/F3 和冻结 bridge 不重开。不得执行真实 PyInstaller 构建、安装、HKCU、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或转写。

结论

  • 审计状态:HOLD
  • 阻断问题数:3
  • 当前安全边界:当前快照仅可用于 F2-R1/F4-R1/F5-R1 的离线修复与临时测试;不得据此构建或安装正式 Extension/Native Host,不得读取真实 Cookie/session、操作 Chrome/HKCU、联网下载或触碰真实/正式媒体数据。冻结 bridge 与既有已验收视频保持原状。
  • 下一复审:只复审上述三项及本轮已通过合同是否回退;一次提交完整冻结哈希和纯离线证据,不新增任务或审核链。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-HOLD3-MINIMAL-OFFLINE-REPAIR-REREVIEW-20260806-001

  • 记录时间:2026-08-06T12:18:05+08:00
  • 审核阶段:同一事项、同一审核链内,前序 HOLD/3 的 F2-R1、F4-R1、F5-R1 限定实现复审;F1/F3、V001+V002 已通过合同及冻结 accept-browser-file 后半程不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;唯一目标=青枫浦上Q / BV1HA3o6oEJJ
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-HOLD3-MINIMAL-OFFLINE-REPAIR-REREVIEW-20260806-001;管理员 owner 续派=HANDOFF-INFOADMIN-INFOREV-BILI-AUTHENTICATED-SESSION-HOLD3-OWNER-CONTINUATION-20260806-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXTENSION-INGRESS-V002-IMPLEMENTATION-F1-F5-REREVIEW-20260806-001 / HOLD/3
  • 修复快照:source manifest=2511/039BE7791B517290F13458151A19B400C8DE516963FADB7354E22C680BE89709,所列 15 个产品文件 bytes/SHA-256 独立复算全部匹配、文件集无差异;background=13201/27C0598DD8D70659B1E518C841F2CC5908165458F99E8531D58A6B15F767BDE8;sidepanel=2364/88794C840C0491E0017E7E8D15A956E4AA28DCEB71950A991F4A40399C2449B4;protocol=11393/8E8A1BBB742B37358A2848B28D2A7B10ACA9B20167844388455CAAB59DBE422D;native host=29843/41CA31D688F39E53B5C7A11ACE1390C3BEA1D8E08D0FFFF49C4C62D320F42937;build=8303/78EFFE9D2704F8FB5680C191BD9F014CDAF7F60A3F20F000569B88453527F5B1;installer=19477/3016CE524AFDC3FD9A9F4DD4810F39BFAEE0A211A79DEA306FA54069C6C1490C
  • 测试/说明证据:测试树=7 files/612 aggregate-manifest bytes/DA738E0155939CD668FED75E4B15C47D47D7CC4D1B00EA21EE4A7BACF45F1476;用法=15739/3B7EE09DA09DFE6ECCF313B976A7FE9A827E5A3DDD9A04C22E11F3E29BF99FB8;secondary worklog=1636/5A08AA001FC6BADBE0726A8D84AED1916786DE94D5A9C627AF905A0C341E22F6
  • reviewer-owned 树外批准回执:ai-inforev/worklog/2026-08-06-bili-authenticated-session-source-approval.json=373/F6A56C14ED8DB1DFF7918F72CC5316D65866CED9B2D98368A88DF47D338FCBAA;其 exact schema 绑定 source manifest=2511/039BE7791B517290F13458151A19B400C8DE516963FADB7354E22C680BE89709,位于 source/build 树外,approved_by_role=dev.reviewer.project,批准范围仅为 controlled-build-source-manifest
  • 冻结后半程未漂移:bridge code=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687

Findings

  • 阻断 findings:0

原 HOLD/3 闭环

  1. F2-R1 PASS:side panel 在第一次异步边界前同步取得不可重入 UI lease并立即禁用 start/retry/validate;background 在任何 await/Cookie store 读取前同步取得唯一 start lease,prepare/start 以唯一 32 位小写十六进制 prepare_id 定向关联。延迟 Cookie-store 并发双击反例实际证明一成功一 E_BUSYcookieStoreReads=1cookieReads=1、携密 start=1;broker 的 duplicate/mismatch start 只返回 E_PREPARE,不再 terminate 已启动任务。
  2. F4-R1 PASS:正式操作口径已统一为固定 PyInstaller 6.15.0 --onefile --noupx、唯一 EXE+schema 2 build receipt;原第 31/41 行矛盾已消失。全文仅剩一处明确声明“不再提供或暗示 onedir/one-directory”的否定性闭环说明,不构成可执行构建口径或验收歧义;真实 build=0
  3. F5-R1 PASS:build 在解析 source manifest、调用 builder或创建 output 前,install 在解析 manifest、复制或 HKCU 前,均要求 source/build 树外批准回执;installer 还要求 exact EXE/build receipt 的独立 build approval。篡改产品并同步重算同目录 source manifest/build receipt 的离线反例,在旧外部 source approval 下于 output/install/registry 前 fail closed。开发员没有创建、自签或自批正式 trust receipt;本审计由 reviewer 对 exact source manifest 独立复算后生成上述 source approval。
  4. passed/frozen 未回退:F1 stage 环境、F3 cancel/commit 仲裁、public key/SPKI/ID/origin/wire schema、插件禁用/秘密内存边界、单次解析/下载器 allowlist、本地 MKV、Job Object 后代所有权及冻结 bridge 均未发现回退。

独立验证

  • 目标环境:31/31 PASS / Ran 31 in 32.841s,无 skip;冻结 bridge:21/21 PASS / Ran 21 in 0.231s
  • 全项目:130 tests / OK / 6 skipped / Ran 130 in 83.965s;skip 为非目标环境集成条件,不影响本轮目标测试的无 skip 结论。
  • Python compile、Node syntax、PowerShell parser、JSON、strict UTF-8/no BOM/no trailing whitespace、U+FFFD、scoped diff=PASS;治理=OK/projects=1/warnings=0
  • 外部动作:正式/真实 build、install、HKCU、Chrome、Cookie/session、network/download、real media、F:\video、formal ana-data、transcription、secret persistence=0;reviewer 未修改产品、测试、用法或冻结 bridge。

结论与后续门禁

  • 审计状态:PASS
  • 阻断问题数:0
  • 实现结论:HOLD3_MINIMAL_OFFLINE_REPAIR_ACCEPTED
  • 授权边界:允许获授权操作者仅使用本审计冻结 source manifest 与 reviewer-owned source approval 执行一次受控 build;本 PASS 不授权安装、HKCU、真实 Chrome/Cookie/session、网络下载、正式媒体/数据或转写。
  • 安装门禁:受控 build 完成后必须提交唯一 EXE 与 schema 2 build receipt 的 exact bytes/SHA-256,先由 dev.reviewer.projectproject.admin 完成 hash-only 限定确认并形成树外 install-exact-build approval;在该后续确认 PASS 前,install/HKCU 继续冻结。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-EXACT-BUILD-HASH-ONLY-CONFIRMATION-20260806-001

  • 记录时间:2026-08-06T14:53:29+08:00
  • 审核阶段:同一事项、同一审核链内,已通过实现的唯一一次 exact-source 受控 build 的 hash-only 限定确认;不重开 HOLD/3 实现、F1/F3、冻结 bridge 或产品合同。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-EXACT-BUILD-HASH-ONLY-CONFIRMATION-20260806-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序实现审计:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-HOLD3-MINIMAL-OFFLINE-REPAIR-REREVIEW-20260806-001=334024/C063BD046AE56B1D24A6167623DFA696206E4EA17DE645253F89398ADECC3FDD / PASS/0
  • reviewer source approval:ai-inforev/worklog/2026-08-06-bili-authenticated-session-source-approval.json=373/F6A56C14ED8DB1DFF7918F72CC5316D65866CED9B2D98368A88DF47D338FCBAA;绑定 source manifest=2511/039BE7791B517290F13458151A19B400C8DE516963FADB7354E22C680BE89709
  • 管理预置链:builder Python=262144/5912D0884B23C0343983A864C6064242391E2265536F50B88624857E353882C9;PyInstaller EXE=108469/D5DC4427C5E5D417457DAE6FD8B50EF2AFA0A4CE5FDFD5767AB20C5B56555C39;wheelhouse manifest=792/7A05B7637F8254ECE6C5B38D9C54D870FC3F62877C66C1FD52BC8766C9D64529;provision receipt=2027/B65F4184E8782394F2CC27C47CB8656C942E366FD80E8FA7A548CE5A3367BACF,均与提交一致。
  • build script=8303/78EFFE9D2704F8FB5680C191BD9F014CDAF7F60A3F20F000569B88453527F5B1;开发执行证据记录 build count=1、exit=0、wall=20.839s、PyInstaller 6.15.0 --clean --noupx --onefile、network/dependency install=0

Findings

  • 阻断 findings:0

Hash-only 独立确认

  1. 输出根 dev/tmp/bili-auth-controlled-build-20260806-001 恰好包含两个普通、非 reparse 文件,目录=0.build/.spec=0
  • project-info-bili-auth-native-host.exe=8608281/F0D3CE2EF12D7D305B8F765169CBF5430DF9F0D36D03FF4447A85378AFF8A26F
  • build-artifact-manifest.json=995/9B989A32C92A4EB89911C9D5151F31B416BA8F265785CE575FDD1A23FBEDF63D
  1. receipt strict UTF-8/no BOM/no trailing whitespace、无 duplicate key,exact schema 2;target/extension_id/build identities/packaging=pyinstaller-onefile/pyinstaller_version=6.15.0 均匹配。builder Python、build script、source manifest 的 bytes/SHA-256 全部复算一致。
  2. receipt 的唯一 files[0] 精确绑定上述 EXE 的 name/bytes/SHA-256;reviewer 仅静态读取首两字节确认 MZ,未加载或执行 EXE。
  3. source manifest 所列 15 个产品文件 bytes/SHA-256 复算 15/15 PASS,实际文件集无差异;source approval→source manifest→build receipt→EXE 链完整。
  4. 开发执行日志、工具说明与 secondary worklog 分别为 191404/2BE532490D536BD54521B560F1DE7EB5CDFDD7DA5794F3483A124A673135B9F518047/A338B2D75296181162DD7498879067C39D7A33B271A8D200044156D2E9392F954048/3FD25884CD4AAA9D6041F435ED9DC535D1915803063D9B4AC0FB406AEBF29397;均声明 EXE execution/install/HKCU/Chrome/Cookie/session/network/download/media/F:\video/formal ana-data/transcription=0。输出根无日志、秘密或额外 sidecar;治理=OK/projects=1/warnings=0

Reviewer-owned exact-build approval

  • 已生成 source/build 树外回执:ai-inforev/worklog/2026-08-06-bili-authenticated-session-build-approval.json=594/244097BC466D969E046F0E64E9D3A1213F5AB64E12C9358DF0807B4BA0F8F816
  • exact schema 1:approval_scope=install-exact-buildapproved_by_role=dev.reviewer.projectstatus=APPROVED;精确绑定 source manifest SHA-256、build receipt bytes/SHA-256 与 EXE bytes/SHA-256,位置不在 source/build 树内。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:EXACT_BUILD_HASH_ONLY_CONFIRMED
  • 上述 exact build 已满足 installer 的独立 build-identity 前置门禁;只允许未来获明确授权的操作者将同一 source approval、同一 build approval、同一 receipt 和同一 EXE 作为不可替换输入。任何 bytes/hash/path/output-set 漂移均须失败关闭并重新审核。
  • 本 hash-only PASS 未执行或自动授权当前回合的 install/HKCU,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription;是否启动实际安装仍由项目管理员/请求方按原任务链另行明确调度。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-BUILD-CONTRACT-REPAIR-SOURCE-REVIEW-20260806-001

  • 记录时间:2026-08-06T23:04:24+08:00
  • 审核阶段:同一事项、同一审核链内,旧 exact build 被静态证明不可安装后的 yt-dlp 依赖/source/build-contract 限定复审;不重开 HOLD/3 实现 PASS、F1/F3、冻结 bridge 或产品合同。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-BUILD-CONTRACT-REPAIR-SOURCE-REVIEW-20260806-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 管理授权:HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-SESSION-YTDLP-BUILD-CONTRACT-REPAIR-ASSIGN-20260806-001;旧 EXE/receipt/approval 保持原 bytes/SHA-256,但状态仅为历史证据、NOT_INSTALLABLE/SUPERSEDED_FOR_INSTALL
  • 提交快照:source manifest=3029/D1CE8C00A50CF17E45FB915577369BADA4AD9937335290852F393DC6BD053FCF;dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D;yt-dlp wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266;build script=16099/8AC31F601FA71712154FCEC5B72E40BECAC32D8943F1B24E5D0B2D7E71E8666B;installer=20876/ECEC7AB1C8B6AB5D36CC686251C67990B2BCFEEA03165C6827B128C4664DD3FA
  • 证据:测试树=7 files/612 aggregate-manifest bytes/BAF8F96215FFCF83A8B40A42B0B53ACC1766C5392EE768EEE19B8460CD107278;工具说明=22353/C730ADDEAA268AB31103A73E5D7AC5E43A93E8EEEE780DD35F018EC4033E33C6;machine evidence=4339/7E3E9E61D8CB7B1E91F5701365FD038068F218594197579AAD4BB552FD0072F5

Findings

F1(阻断,exact-source 门禁只核对 manifest 自述集合,未核对实际源树集合)

  • build_host.ps1:59-97 只把硬编码的 17 个路径与 sourceManifest.files 比较并逐项复算;没有递归枚举 sourceRoot 的实际普通文件、目录/reparse 状态。因此,批准后新增但未列入 manifest 的文件不会被拒绝。test_protocol.py:101-115 同样只枚举根目录直接文件与 dependencies/ 直接文件,忽略额外子目录和递归文件。
  • reviewer 在系统临时目录复制当前 source,新增未列入 manifest 的根级 yt_dlp.py,保持 source manifest 原字节,并生成仅供反例使用的临时 reviewer-style receipt;使用管理员预置 Python 调用 build_host.ps1 -ValidateOnly,实际 exit=0、返回 VALIDATION_PASS_ONLY、output absent。该未批准文件可在构建脚本目录进入 Python/PyInstaller 搜索面,违反“exact source manifest/17 项唯一集合”合同。
  • 当前真实源树在 reviewer 独立枚举下为 17/17 PASS,但批准回执只绑定 manifest bytes/SHA;若 build 门禁不能在实际执行前重新核对真实树,批准后的额外文件漂移无法 fail closed。

F2(阻断,PyInstaller 版本门禁可由外部 PYTHONPATH 伪造,pinned builder 身份不成立)

  • build_host.ps1:148-150 通过继承环境的 python -c importlib.metadata 判断 PyInstaller 版本;216-220 明确保留并拼接调用方原 PYTHONPATH225 再以同一受污染解释器执行 python -m PyInstaller。脚本没有使用 isolated mode,也未绑定管理端预置的 PyInstaller executable/provision receipt exact bytes/SHA。
  • reviewer 在系统临时目录放置伪造 PyInstaller package 与 PyInstaller-6.15.0.dist-info,只设置 PYTHONPATH,再对未改当前 source 运行 -ValidateOnly;实际 exit=0 并返回 pyinstaller_version=6.15.0。因此任意同名模块/metadata 可冒充获准 builder。
  • 现有 test_native_host.py:658-718 正是通过 PYTHONPATH=fake-site 注入伪 PyInstaller,并把脚本接受该 builder、生成 receipt 断言为成功;测试虽通过,却非真空地证明生产门禁可被绕过。相同入口还可能替换 python -m pip,破坏“仅离线固定 wheel / 固定 builder”供应链边界。

已通过并冻结的检查

  1. 当前 source manifest 严格 JSON、无 duplicate key;所列 17 项与当前实际普通文件集合一致,bytes/SHA-256=17/17 PASS;dependency manifest 的 bytes/SHA 与 source manifest 绑定一致。
  2. wheel strict ZIP 检查通过:CRC、1059 项唯一名称、无路径逃逸/符号链接、RECORD 对全部非 RECORD 文件的 size/SHA-256 复算均 PASS;Name=yt-dlpVersion=2026.7.4Tag=py3-none-any。38 条 Requires-Dist 全部带 extra 条件,非条件运行依赖=0
  3. build/installer 的新 receipt 字段已绑定 dependency manifest、yt-dlp wheel、archive anchors 和 metadata;旧 source/receipt/approval 因 source hash/新字段不匹配不能满足新安装合同。该子结论不替代 F1/F2 的构建前门禁。
  4. reviewer 聚焦运行 source-manifest、build-contract、installer transaction 三项测试=3/3 PASS / Ran 3 in 103.170s;PowerShell/Python 静态检查与提交证据一致。上述绿灯不消除两项已实际复现的反例。
  5. replacement build、install、HKCU、EXE execution、Chrome/Cookie/session、media network/download、F:\video、formal ana-data、transcription=0;reviewer 未修改业务代码、测试、wheel、manifest、说明或冻结 bridge。

最小 required fixes

  1. F1:在读取外部 source approval 后、任何 Python/pip/PyInstaller/output 动作前,递归枚举真实 source tree;除 source manifest 自身外,普通文件路径集合必须与 manifest 的 17 项逐项、大小写敏感完全一致,并拒绝额外根文件、额外/嵌套目录文件以及 source/dependencies 路径链上的 reparse。build 与 installer 共用或等价执行该 exact-tree gate。新增根级额外 yt_dlp.py、嵌套额外文件、reparse(本机支持时)反例,均须在 output/install/registry 前失败。
  2. F2:生产构建路径不得从调用方 PYTHONPATH/PYTHONHOME/user-site 解析 Python 模块,也不得把旧 PYTHONPATH 拼回构建环境。所有版本探针、pip、PyInstaller、archive viewer 使用隔离解释器/清洁环境;同时绑定并复算管理员批准的 exact Python、PyInstaller executable 或等价 tree-external provision receipt。新增伪 PyInstaller/伪 pipPYTHONPATH 注入反例,必须证明伪模块未执行且不能形成 accepted receipt;当前 fake-builder 成功测试须改用不会被生产参数选择的明确测试 seam。
  3. 只修 F1/F2 及对应离线测试、说明/证据/账本;已通过 wheel 内容、receipt 新字段、installer transaction、HOLD/3 实现与冻结 bridge 不重开。修复后 replacement build 仍保持 0,先提交本 reviewer 做 F1/F2-only source 复审。

结论与边界

  • 审计状态:HOLD
  • 阻断问题数:2
  • 结论:SOURCE_APPROVAL_NOT_CREATED;当前 source/dependency/build-contract 快照不得用于 replacement build。
  • 当前安全边界:旧与新 build 均不得安装;replacement build/install/HKCU/EXE execution 继续冻结。不得接触真实 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • 下一复审:只复审 F1/F2、相应非真空离线反例及已通过合同是否回退;不得新增任务或审核链。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-BUILD-CONTRACT-HOLD2-SOURCE-REREVIEW-20260807-001

  • 记录时间:2026-08-07T01:07:09+08:00
  • 审核阶段:同一事项、同一审核链内,仅复审前序 HOLD/2 的 F1 actual source-tree exact set/reparse 与 F2 clean exact-builder/no inherited PYTHONPATH;F1/F3 runtime、HOLD/3 已通过合同、冻结 bridge 与产品范围未重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-BUILD-CONTRACT-HOLD2-SOURCE-REREVIEW-20260807-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 提交快照:source manifest=3029/E01C1320F8C7677B7435B4C8B87EA3688BA652585648D7CFD1F88D0DADB26958;build script=20430/3B0552ADA09D279D08FF89A84F59847C8F86BBC7606257DE8B26203CCBD42F92;installer=22247/F127BAE512BEE03AD78780BB1C98065398EF910EF1A6F9D59EE42463F4E2A62D;dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D;yt-dlp wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266
  • 构建信任输入:exact Python=262144/5912D0884B23C0343983A864C6064242391E2265536F50B88624857E353882C9;exact PyInstaller executable=108469/D5DC4427C5E5D417457DAE6FD8B50EF2AFA0A4CE5FDFD5767AB20C5B56555C39;tree-external provision receipt=2027/B65F4184E8782394F2CC27C47CB8656C942E366FD80E8FA7A548CE5A3367BACF

Findings

  • 阻断问题:无。
  • F1 已闭环:reviewer 独立递归枚举当前实际 source tree,除 manifest 自身外为大小写敏感 17/17 精确集合,逐文件 bytes/SHA-256 全匹配,source root、dependencies/ 与全部子路径 reparse=0build_host.ps1:36-53,82-121install_native_host.ps1:70-87,193-231 均在 Python/build output 或 install/copy/HKCU 之前执行 actual-tree exact-set 与 reparse fail-closed 门禁。
  • F2 已闭环:build_host.ps1:166-217 在首次 Python 调用前复算 exact Python、PyInstaller executable 与 tree-external provision receipt 的固定 bytes/SHA-256及相互绑定,随后清除所有继承 PYTHON*;版本探针、pip、PyInstaller 与 archive viewer 均使用同一 exact Python 的 isolated 调用,不再拼回调用方 PYTHONPATH。schema 2 receipt 记录 PyInstaller executable/provision receipt,installer 在任何正式副作用前强制核对;旧 receipt/approval 不能满足新 source/hash/字段合同。
  • reviewer 重新执行前序反例与聚焦门禁:额外根级 yt_dlp.py、嵌套额外文件与 junction/reparse 均在 output 前失败;伪 PyInstaller/伪 pipPYTHONPATH marker 未执行,-ValidateOnly 只由 exact builder 返回且不创建 output;installer transaction/source-manifest 复核通过。测试=3/3 PASS / Ran 3 in 106.392s
  • machine evidence=5519/EBB72CDFC9A389F8D57AAA2F9A4F5E068D49B9CD0CD337F29C43C0F62ED1C8AC;提交的说明/worklog 与冻结哈希一致。旧 EXE=8608281/F0D3CE2EF12D7D305B8F765169CBF5430DF9F0D36D03FF4447A85378AFF8A26F、旧 receipt=995/9B989A32C92A4EB89911C9D5151F31B416BA8F265785CE575FDD1A23FBEDF63D 仅保留历史证据,继续 NOT_INSTALLABLE/SUPERSEDED_FOR_INSTALL

Reviewer-owned source approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-07-bili-authenticated-session-ytdlp-build-source-approval.json=373/26AF51848717C47A2915D633B258269EA79213A94BAFEFF9CE7D30CDC2A77F96
  • approval 仅绑定 source manifest=3029/E01C1320F8C7677B7435B4C8B87EA3688BA652585648D7CFD1F88D0DADB26958,scope=controlled-build-source-manifest;未创建、复用或更新 install-exact-build approval。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:HOLD2_F1_F2_CLOSED_SOURCE_APPROVED
  • 仅允许管理员已授权的唯一 owner 使用本次 exact source manifest、上述 reviewer approval、exact Python/PyInstaller/provision receipt,在新的不存在 output 目录执行一次 clean replacement build;任何 bytes/hash/path/tree/output-set 漂移均须失败关闭并重新审核。
  • 本 PASS 不授权 install/HKCU/EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。replacement EXE/schema 2 receipt 形成后仍须沿同链做 hash-only 限定确认并取得新的 install-exact-build approval。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-METADATA-REPAIR-SOURCE-REREVIEW-20260807-001

  • 记录时间:2026-08-07T02:37:42+08:00
  • 审核阶段:同一事项、同一审核链内,仅复审前次受控 replacement build 因 copy_metadata('yt-dlp') 无法发现临时 .deps distribution 而失败后的 metadata-discovery source 修复;前序 F1 actual source-tree/reparse、F2 exact Python/PyInstaller/provision receipt、HOLD/3 已通过合同、冻结 bridge 与产品范围不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-METADATA-REPAIR-SOURCE-REREVIEW-20260807-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 管理授权:HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-SESSION-YTDLP-METADATA-REPAIR-REBUILD-AUTH-20260807-001;前次失败证据=3253/34EEC108F0F27384F605C67AB4529682463196B8C0A5F03CC96E595DD61D19FA,失败 output 保持不存在,repair build count=0
  • 提交快照:source manifest=3029/AC852D40CF2B6FE891BE25D2E6E068A876EAC60E07EE6E9DB6826AC1064B29B8;build script=25586/F5E9FC58313B2CB765772BF3A5C8605BCA9DD91A1FF74D0F03DBEB3174949845;installer=22247/F127BAE512BEE03AD78780BB1C98065398EF910EF1A6F9D59EE42463F4E2A62D;dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D;yt-dlp wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266
  • 独立快照复核:上述文件 bytes/SHA-256 全部匹配;实际 source tree 为大小写敏感 exact 17/17、逐文件 hash 全匹配、reparse=0;候选 output dev/tmp/bili-auth-controlled-build-ytdlp-20260807-002 不存在;旧 reviewer approval 仍只绑定前一 manifest,未创建绑定本次 manifest 的新 approval。

Findings

F1(阻断,未验证的 .deps 代码在完整性门禁前被执行)

  • build_host.ps1:263-275 将 pinned wheel 安装到 output-owned .deps 后,build_host.ps1:276-279 立即把该目录插入 sys.path 并执行 import yt_dlp;实际 .deps 的 canonical direct-child/owner、递归 no-reparse、wheel 派生精确文件集与 hash、RECORD、确定性 INSTALLER/REQUESTED 以及唯一 distribution/version 校验直到 build_host.ps1:280-397 才执行。因此,当前顺序违反“只有已验证 .deps 才可进入解释器并执行”的修复合同。
  • reviewer 在系统临时目录复制当前 source,仅修改临时脚本,使 pip 安装后、上述 legacy import probe 前向 .deps/yt_dlp/__init__.py 追加 marker 写入代码,并同步临时 manifest/临时 reviewer-style receipt;实际执行结果为 exit=1marker_executed=trueoutput_exists=false、最终 exact-tree gate=true。这证明恶意或损坏的依赖代码已在后续 fail-closed 门禁发现篡改之前执行,output 回滚不能消除该前置代码执行风险。
  • 提交的 missing metadata/tampered package/wrong owner/extra distribution 用例与 reviewer 聚焦运行均能在最终门禁处失败,但没有断言“被篡改的 import-executed module 在门禁前未执行”。独立运行两个相关测试=2/2 PASS / Ran 2 in 122.812s,不构成对上述 marker 反例的闭环。

已通过并冻结的检查

  1. source actual-tree exact set/reparse、exact Python/PyInstaller/provision receipt、继承 PYTHON* 清理及旧 F1/F2 修复未发现回退;dependency manifest 与 pinned wheel 的提交 hash 匹配。
  2. 前次 build failure 被如实保留,前次失败 output 与本次候选 output 均不存在;旧 EXE/receipt/approval 继续仅作历史证据且 NOT_INSTALLABLE/SUPERSEDED_FOR_INSTALL
  3. 当前 repair build、install、HKCU、EXE execution、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription=0;reviewer 未修改产品、测试、wheel、manifest、说明或冻结 bridge。

最小 required fixes

  1. 删除 build_host.ps1:276-279 的 pre-validation executable import probe,或将所有对 .depssys.path 注入/模块导入严格移到 exact-tree、reparse、wheel 派生 bytes/hash、RECORDINSTALLER/REQUESTED 与唯一 yt-dlp==2026.7.4 distribution 全部验证成功之后。现有 post-validation PyInstaller launcher 已可在执行 PyInstaller 前检查 importlib.metadata.version('yt-dlp'),不得保留第二条更早的可执行依赖入口。
  2. 增加非真空反例:在 pip install 后篡改 .deps/yt_dlp/__init__.py(或其他首次 import 必执行模块)写 marker;断言构建在完整性门禁失败、marker 不存在、output/receipt 不存在。保留既有 missing metadata、wrong owner、extra distribution 与最终清理断言。
  3. 仅修复上述顺序和对应离线测试/说明/证据;replacement build 继续为 0,先回到同链做 metadata-repair-only source 复审。不得安装、执行 EXE 或触发任何真实认证、联网、媒体和正式路径动作。

结论与边界

  • 审计状态:HOLD
  • 阻断问题数:1
  • 结论:SOURCE_APPROVAL_NOT_CREATED;本次 source manifest=3029/AC852D40CF2B6FE891BE25D2E6E068A876EAC60E07EE6E9DB6826AC1064B29B8 不得用于 replacement build。
  • 当前安全边界:replacement build/install/HKCU/EXE execution 继续冻结;不得接触真实 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • 下一复审:仅复审本 F1 顺序闭环、marker 非执行反例及已通过合同是否回退;不新增任务、审核链或产品范围。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-PREVALIDATION-F1-SOURCE-REREVIEW-20260807-001

  • 记录时间:2026-08-07T03:25:02+08:00
  • 审核阶段:同一事项、同一审核链内,仅复审前序 HOLD/1 的 F1_PREVALIDATION_DEPS_CODE_EXECUTION;F1/F2 source/provision gates、HOLD/3 runtime contracts、冻结 bridge 与产品范围不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-PREVALIDATION-F1-SOURCE-REREVIEW-20260807-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-METADATA-REPAIR-SOURCE-REREVIEW-20260807-001 / HOLD/1
  • 提交快照:build script=25093/43816E7932A785321B545073FEAD9EB38198E5ED3B07F2469062895ADC41238F;source manifest=3029/463182C6980734B72831BDF9B387160F8AD21A03B52CBAB4AC74CA98CEB1B7AE;test=59374/55F7F4ECA14E370BAB1D5D1CA154BE8BFD1E602C5460B69670A376751C5E08EA;dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D;wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266
  • 说明/证据:工具说明=31945/7A9D76F77A497A02366306659E24EA50EBA3270ACE1876B05DF563133E562F92;secondary worklog=12524/0512E88954B1972E26DDBC5C6552FA562A541014EE4CD6F117BB9930C3F1907C;machine evidence=2686/A3BA1EDB3C5C236C886B17821095481541DA1CAA7A349C3F4C25D279AF6BADF2

Findings

  • 阻断问题:无。

F1 闭环

  1. build_host.ps1:263-275 仅执行 isolated/no-index/no-deps/no-compile 的 pinned wheel 安装;旧的 pip 后 executable installedProbe/import yt_dlp 已删除。静态检索确认校验前不存在 .depssys.path 注入或模块 import。
  2. build_host.ps1:276-393 在执行任何 .deps 代码前,依次验证 .deps 为 output 的 canonical direct child、目录与递归子项均非 reparse、实际文件集合/bytes/SHA-256 与 pinned wheel 派生集合一致、RECORD 全路径/hash/size 一致、INSTALLER/REQUESTED 为确定值、distribution 恰为唯一 yt-dlp==2026.7.4,且拒绝 PyInstaller 注入。
  3. 首次把 .deps 放入 sys.path 的位置为 build_host.ps1:394-411 的 post-validation PyInstaller launcher;其先确认路径归属和 metadata version,再调用已批准 PyInstaller。未发现第二条提前 executable dependency 路径。
  4. 新反例在 TemporaryDirectory 的脚本副本中,于 pip 后向 .deps/yt_dlp/__init__.py 注入 marker 写入代码;integrity gate 非零、output absent、receipt absent、marker absent。reviewer 独立复跑该完整测试=1/1 PASS / Ran 1 in 53.791s

Passed/frozen 未回退

  • reviewer 独立复算 actual source tree:除 source manifest 自身外大小写敏感 exact 17/17,逐文件 bytes/SHA-256 全匹配,reparse=0;候选 output dev/tmp/bili-auth-controlled-build-ytdlp-20260807-002 不存在。
  • 冻结 bridge 保持:code=28500/749FC486B0F42315BD463F11771FE2A7C71CAB53DD9AC2E411CE82E1175DFF13;tests=22553/80D8C94DF6922820AA4643984E91209C16046364C20A6A04F6ADA22C8DC36C8B;usage=6931/8103EA6F2077BF6BB30B31BCDFB3786B057306A747C18286E2622D19F8393687
  • 提交的 extension=32 tests/OK/5 skipped、bridge=21/21 PASS、project=134 tests/OK/6 skipped 及 parser/compile/UTF-8/governance 证据与冻结工件一致;本限定复审未重跑 build、安装或真实链路。
  • replacement build/install/HKCU/EXE execution/Chrome/Cookie/session/network/download/media/F:\video/formal ana-data/transcription=0

Reviewer-owned source approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-07-bili-authenticated-session-ytdlp-prevalidation-source-approval.json=373/54514FCD70D2ED85F33E48433B13241F845A329A3DBD2C089AF416F1D67B2CEB
  • approval exact schema 1,仅绑定 source manifest=3029/463182C6980734B72831BDF9B387160F8AD21A03B52CBAB4AC74CA98CEB1B7AE,scope=controlled-build-source-manifestapproved_by_role=dev.reviewer.project;未创建、复用或更新 install-exact-build approval。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:F1_PREVALIDATION_DEPS_CODE_EXECUTION_CLOSED_SOURCE_APPROVED
  • 仅允许管理员已授权的唯一 owner 使用本次 exact source manifest、新 reviewer approval、既有 exact Python/PyInstaller/provision receipt,在新的不存在 output 目录执行一次 clean replacement build;任何 bytes/hash/path/tree/output-set 漂移均须失败关闭并重新审核。
  • 本 PASS 不授权 install/HKCU/EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。replacement EXE/schema 2 receipt 形成后仍须沿同链做 hash-only 限定确认并取得新的 install-exact-build approval。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-ARCHIVE-METADATA-CONTRACT-SOURCE-REREVIEW-20260808-001

  • 记录时间:2026-08-08T13:44:23+08:00
  • 审核阶段:同一事项、同一审核链内,仅复审 archive-metadata contract source 快照;前序 source tree、prevalidation、HOLD/3 runtime contracts、冻结 bridge 与产品范围不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260807042629035_d5f27466;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-ARCHIVE-METADATA-CONTRACT-SOURCE-REREVIEW-20260807-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 提交冻结快照:source manifest=3029/508F69CE49224F0B79BA24E25F47CE84E598C3D6747FF284A7B4FD32E7E19910;build script=32216/4E25D57D8133670D25BACF0E2A38D1C673DB9576413B22EBDC28304CAB6B2A33;installer=22467/DBF1A828DC343DCA4B52283B8EE189962007581E42D03D213A55461CE05CFEF6;test=62074/66B70D38E983806B82A2D00A1F741A79445E9C9CF80EA2C0951EED2935C1CC2B;dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D;wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266;machine evidence=2513/F885984DB369081F374AB1E655F70F63169B2612A77190C790B8B205DD4E47AE

Findings

  • 阻断问题:无。

Archive metadata contract 闭环

  1. 前序独立检查已确认 actual source tree 大小写敏感 exact 17/17、逐文件 bytes/SHA-256 全匹配、reparse=0;本 continuation 未重做该检查。
  2. build_host.ps1 使用 PyInstaller 6.15.0 CArchiveReader 结构化遍历顶层 CArchive 与嵌套 PYZ,规范化路径分隔符并拒绝重复归一化路径;固定要求 worker、yt_dlp 及 downloader/globals/plugins/version 模块锚点。
  3. metadata root 必须唯一为 yt_dlp-2026.7.4.dist-info,类型、Name/Version、精确 7 文件集合、逐文件 bytes 与固定 tree hash 均须匹配已验证 .deps;installer 同步强制 schema 2 receipt 的 archive verification、source/dependency/build 绑定与 exact EXE 绑定,旧 receipt/approval 不可复用。
  4. 既有离线实物树 dev/tmp/bili-auth-ytdlp-build-contract-repair-20260806-001/metadata-install-layout-probe-no-compile/yt_dlp-2026.7.4.dist-info 只读复算为精确 7 文件:INSTALLERMETADATARECORDREQUESTEDWHEELentry_points.txtlicenses/LICENSE;reparse=0;按正式算法所得 tree SHA-256=7C9ABE2387AF3594593BB162C29757B10693F90DD61606272089DB9815C2105C,与 machine evidence 一致。
  5. 前序已完成的聚焦 archive 合同测试=1/1 PASS / Ran 1 in 156.385s,覆盖模块缺失、metadata 缺失、归一化重复、Name/Version 错误、不完整/额外 metadata 路径、替代内容及 Windows 分隔符正例;本 continuation 未重跑测试。
  6. 候选 output dev/tmp/bili-auth-controlled-build-ytdlp-20260807-003 保持不存在;build/install/HKCU/EXE execution/Chrome/Cookie/session/network/download/media/F:\video/formal ana-data/transcription=0

Reviewer-owned source approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-archive-metadata-source-approval.json=373/A46A8D29A42B85E0DB83AA4EC5153B298BE9C24684637C6B7864AD23EF5B41E8;其 exact schema 1 仅绑定 source manifest=3029/508F69CE49224F0B79BA24E25F47CE84E598C3D6747FF284A7B4FD32E7E19910,scope=controlled-build-source-manifestapproved_by_role=dev.reviewer.project
  • 未创建、复用或更新 install-exact-build approval;后续 exact EXE/schema 2 receipt 仍须沿同链做 hash-only 限定确认。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:ARCHIVE_METADATA_CONTRACT_CLOSED_SOURCE_APPROVED
  • 仅允许管理员已授权的唯一 owner 使用本次 exact source manifest、上述 reviewer approval、既有 exact Python/PyInstaller/provision receipt,在新的不存在 output 目录执行一次 clean replacement build;任何 bytes/hash/path/tree/archive/output-set 漂移均须失败关闭并重新审核。
  • 本 PASS 不授权 install/HKCU/EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-ARCHIVE-METADATA-TYPE-CONTRACT-SOURCE-REREVIEW-20260808-001

  • 记录时间:2026-08-08T16:23:14+08:00
  • 审核阶段:同一事项、同一审核链内,仅复审 build-003 的 E_ARCHIVE_METADATA_TYPE 假阴性及管理员授权的 exact x / Windows-promoted b metadata type 合同;前序 source-tree/reparse/dependency/clean-environment/prevalidation/path/file-set/bytes/identity/tree-hash gates、冻结 bridge/runtime 与产品范围不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-ARCHIVE-METADATA-TYPE-CONTRACT-SOURCE-REREVIEW-20260808-001;MB-X 消息=msg_20260808155805146_193e6c84;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 管理授权:HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-SESSION-YTDLP-TYPE-CONTRACT-REPAIR-BUILD004-AUTH-20260808-001;build-004 在本复审前保持 attempt=0、output absent。
  • 冻结快照:build script=33020/3739436920FCEA8BA68DC04BBDAB0F346C08216F49D89A097C50075912A258A0;installer=22741/53A1D1AFD9E4571A2491AE66C5E721E77A2201DBFAA29C9094E42CE0CB684C2A;source manifest=3029/21009AADBAC3F25AAA15712948232796E813A5973FDE497B11A334915A3C7EB3;test=69608/2E7D6BE3B9607A34A90B283F2CDDBC65A31CD2AF02026EB97E8CED6C153075AB;machine evidence=4012/5880E90521F1B382C8B546A5814CBEC5DDEC826897F1EC498EEDE0C18C4263EB
  • build-003 原始失败证据:dev/tmp/bili-auth-ytdlp-build-contract-repair-20260806-001/replacement-build-003-blocked-20260808.json=3516/0FA8D0D9719D19C819F607E383D12B93021CE718489A742F740FBFEE13BBCC73;attempt=1、retry=0、accepted EXE/receipt=0/0,失败 output 已回滚不存在。

Findings

  • 阻断问题:无。

Metadata type contract 闭环

  1. reviewer 独立复算 source manifest 与当前 actual source tree:大小写敏感 exact 17/17,missing/extra/bad hash=0/0/0,source root 及递归子路径 reparse=0;提交的 build/installer/test/evidence bytes/SHA-256 均匹配。
  2. build_host.ps1 仅在唯一候选 metadata root 已锁定为 yt_dlp-2026.7.4.dist-info 且七个精确相对文件集合已冻结后,对这些成员接受 CArchive type x 或 Windows 因 os.access(source, X_OK) 提升的 bb 不会扩展为任意路径、模块、脚本或其他数据许可。
  3. type Z/a/d/l/m/n/o/s/z 继续 E_ARCHIVE_METADATA_TYPE fail closed;错误 metadata 路径上的 b 不能成为合法根并以 E_ARCHIVE_METADATA_DUPLICATE_OR_PATH 失败。逐文件 bytes、Name/Version、固定七文件集合与 tree SHA-256 继续独立绑定。
  4. schema 2 receipt 新增实际 archive_verification.metadata_type_codes;builder 只接受非空且为 b/x 子集,installer 同步验证该字段以及固定 metadata tree hash、source/dependency/build/EXE 绑定。旧 receipt 与旧 source approval 不能满足本快照。
  5. reviewer 独立运行真实 PyInstaller CArchiveWriter 的 x/b 合同与 installer/receipt 事务两项窄测:2/2 PASS / Ran 2 in 17.027s。测试覆盖实际 writer 生成的两种类型、receipt type codes、installer 强制绑定与事务回滚;未运行正式 build。
  6. 提交证据中的 complete type/build gate 矩阵覆盖其他类型、错误路径 b、路径/文件集/bytes/Name/Version/tree-hash 漂移;bridge=21/21 PASS、project=135 tests OK / 6 skipped 与静态/治理证据未发现冻结合同回退。

Reviewer-owned source approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-archive-metadata-type-source-approval.json=373/102B30405B81137BD3AC9B81CFA39A6A7BB21531115FB3F361F821B2A093335E
  • approval exact schema 1,仅绑定 source manifest=3029/21009AADBAC3F25AAA15712948232796E813A5973FDE497B11A334915A3C7EB3,scope=controlled-build-source-manifestapproved_by_role=dev.reviewer.project;未创建、复用或更新 install-exact-build approval。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:ARCHIVE_METADATA_TYPE_CONTRACT_CLOSED_SOURCE_APPROVED
  • 仅允许管理员已授权的唯一 owner 使用本次 exact source manifest、上述 reviewer approval 与既有 exact Python/PyInstaller/provision receipt,在新的不存在 output 目录执行一次 build-004;任何 bytes/hash/path/tree/archive/type/output-set 漂移均须失败关闭并重新审核。
  • 本 PASS 不授权 install/HKCU/EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。build-004 形成 exact EXE/schema 2 receipt 后仍须沿同链做 hash-only 限定确认并取得 install-exact-build approval。
  • Open questions:无。

    DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-REPLACEMENT-BUILD-004-HASH-ONLY-CONFIRMATION-20260808-001

  • 记录时间:2026-08-08T17:14:35+08:00

  • 审核阶段:同一事项、同一审核链内,对 build-004 唯一 EXE 与 schema 2 receipt 做 exact-build hash-only 限定确认;不重开已通过 source/runtime 合同,不执行 EXE,不安装,不操作 HKCU 或任何真实认证、联网、媒体路径。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260808170546380_8f0fb84f;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-REPLACEMENT-BUILD-004-HASH-ONLY-CONFIRMATION-20260808-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序 source 审核:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-ARCHIVE-METADATA-TYPE-CONTRACT-SOURCE-REREVIEW-20260808-001 / PASS/0;reviewer source approval=ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-archive-metadata-type-source-approval.json=373/102B30405B81137BD3AC9B81CFA39A6A7BB21531115FB3F361F821B2A093335E,精确绑定 source manifest=3029/21009AADBAC3F25AAA15712948232796E813A5973FDE497B11A334915A3C7EB3
  • build-004 提交实物:EXE=dev/tmp/bili-auth-controlled-build-ytdlp-20260808-004/project-info-bili-auth-native-host.exe=21343775/DBF155BCC05B4DF55592D0A4B56612F8BE9C990B3B9AF7691F6A11648866B0B0;schema 2 receipt=dev/tmp/bili-auth-controlled-build-ytdlp-20260808-004/build-artifact-manifest.json=2874/0B36AA7DCA3AD80F8A370E96D50CAAFB386291EE2741305C7797ED663F5C2B27;machine evidence=3842/82F2DCAEC8F79E44AA73B740BAEEA84FF2F2FCC02EE0E003C2D71E3B632F8057

Findings

F1(阻断):build-004 receipt 的 metadata tree hash 与同一 source-approved installer 的 preinstall 身份门禁不一致

  • reviewer 只读复算确认 receipt 的 archive_verification.metadata_tree_sha256=32F1DC23F6704966AE4511CB173318CD11FCBA031323028D268D9F2488589E70。使用获批 PyInstaller 6.15.0 的 CArchiveReader 静态读取 EXE,得到唯一 yt_dlp-2026.7.4.dist-info 的精确七文件集合、type codes=[b],按冻结算法复算 tree SHA-256 同为 32F1DC23F6704966AE4511CB173318CD11FCBA031323028D268D9F2488589E70;该检查未加载或执行 EXE。
  • 但同一 source manifest 所冻结的 install_native_host.ps1=22741/53A1D1AFD9E4571A2491AE66C5E721E77A2201DBFAA29C9094E42CE0CB684C2A 在第 259 行只接受 archive_verification.metadata_tree_sha256=7C9ABE2387AF3594593BB162C29757B10693F90DD61606272089DB9815C2105C,否则在复制产物或 HKCU 前抛出 Build artifact receipt identity mismatch.
  • 因而当前 exact EXE/receipt 虽然自身 bytes/hash 与静态 archive 内容一致,却无法通过其获批源快照自身的 installer preinstall 合同;为其签发 install-exact-build approval 会把已知不可安装的构建错误提升为安装许可,属于阻断。

已通过的 hash-only 检查

  1. output root 恰好包含两个普通、非 reparse 文件,目录与 .build/.spec/.deps 均为 0;EXE 前两字节为 MZ,未执行。
  2. EXE、receipt、machine evidence、source manifest、source approval、build script、dependency manifest、pinned wheel、exact Python/PyInstaller 与 provision receipt 的提交 bytes/SHA-256 均与实物匹配。
  3. receipt 为 strict UTF-8/no BOM/no trailing whitespace、无 duplicate key,schema 2、target/build identity、source/dependency/builder 绑定及唯一 EXE name/bytes/SHA-256 均匹配。
  4. 文档=42401/387FEF1D591264AA0B412C82F8A187E161A38BF5F3674057D5B8A20FD9DDCB5D、secondary worklog=22062/E7A1E5ECC26C1835F239ADBC884F0024CEF0420F694BCD37DB030EC24BFE80F0、执行日志=215555/4BC01DB6C402A6CE00E205122E1A6A982EF166CEF8FC438E718792F23BF08272 与提交一致;提交证据记录 install/HKCU/EXE execution/Chrome/Cookie/session/network/download/real media/F:\video/formal ana-data/transcription=0

最小 required fixes

  1. 保持当前 build-004 不安装、不执行、不签发 install approval。仅在同一任务/审核链内修正 build/installer 的 metadata tree hash 合同,使二者基于同一套已验证 metadata 七文件和同一 canonical tree-hash 算法得出并强制同一个值;不得放宽精确文件集、逐文件 bytes、Name/Version、type b/x、source/dependency/builder/EXE 绑定。
  2. 增加非真空离线反例:把生产等价 schema 2 receipt 交给 installer 的 preinstall validation,证明正确 current tree hash 在任何 copy/HKCU 前通过;旧 7C9ABE...105C 或任意漂移值必须在同一位置 fail closed,且 install root/HKCU/临时残留为 0。
  3. installer/source manifest 变更后,当前 build-004 receipt 的 source-manifest 绑定即过期;必须先完成同链 source 限定复审与新的 reviewer-owned source approval,再经管理员授权生成一个新的 absent-output exact build,最后重新提交 hash-only 确认。不得复用本轮未签发的 install approval,也不得在复审前重试安装。

结论与边界

  • 审计状态:HOLD
  • 阻断问题数:1
  • 结论:BUILD004_NOT_INSTALLABLE_NO_INSTALL_APPROVAL
  • reviewer 未创建、复用或更新任何 install-exact-build approval。
  • 当前边界:build-004 EXE/receipt 仅可保留为冻结失败证据;install/HKCU/EXE execution 继续冻结,也不得触发 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • Open questions:无。

    DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-CANONICAL-TREE-HASH-SOURCE-REREVIEW-20260808-001

  • 记录时间:2026-08-08T19:55:10+08:00

  • 审核阶段:同一事项、同一审核链内,仅复审 build-004 HOLD/1 的 canonical seven-file tree-hash source 修复;冻结 bridge/worker/runtime 及既有 source-tree/reparse/dependency/clean-environment/prevalidation/path/file-set/bytes/Name/Version/type b|x 合同不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260808194541817_31967104;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-CANONICAL-TREE-HASH-SOURCE-REREVIEW-20260808-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-REPLACEMENT-BUILD-004-HASH-ONLY-CONFIRMATION-20260808-001 / HOLD/1
  • 冻结 source:build script=35414/6184EBA087470BB5DBD6FEC29EB22068F8119FBDE2ED640715E8317B5A928C04;installer=24079/AA9667A3CD765B21058F234FD82DFDB9621161246041EC595E4BCB17DDCFDE86;source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535;test=70133/8913DC78EBB1780C29A518D7AC4DE90E4C8B0E8B8FF82106A3461326A3389045;machine evidence=3862/20F83A539477F0514BAB087F88036D3324F4BCD9950FF5C1409492CD17472CFB

Findings

  • 阻断 findings:0

Canonical tree-hash 合同闭环

  1. reviewer 独立复算 actual source tree:除 source manifest 自身外大小写敏感 exact 17/17,missing/extra/bad hash=0/0/0;source root、子目录与文件 reparse=0。dependency manifest=723/2943A0EF7968523A342C28824CACC16E2E0D8324D36DEEEE2E6FBABB910AC27D、pinned wheel=3184705/F11F2B11D5A8AC4059F9BDF29FA4407DC7C6BB00C5097E95CA22A7A9DB518266 未漂移。
  2. source-artifact-manifest.json#archive_metadata_contract 是单一 golden definition,精确冻结 root=yt_dlp-2026.7.4.dist-info、七个 relative files、Name=yt-dlp、Version=2026.7.4、types=[b,x]SOURCE_DATE_EPOCH=1786207924、canonical 算法及 tree SHA-256=32F1DC23F6704966AE4511CB173318CD11FCBA031323028D268D9F2488589E70
  3. build 与 installer 均先对该合同做 exact key/value/file-set 校验,再从同一 manifest 读取 canonical tree hash;build 对已验证 .deps 与静态 CArchive 分别复算并强制相等,receipt 只写入经复算通过的值;installer 在任何 copy/HKCU 前把 receipt 与同一 manifest 的 canonical 值精确比较。产品 build/installer 中历史 7C9ABE...105C 匹配数=0
  4. build 仅在 pinned wheel 的 pip 子进程期间设置 SOURCE_DATE_EPOCH,并在 finally 中恢复原进程值。已有隔离实物树精确七文件、reparse=0RECORD=91484/433ED247B6625B8960AD19676BD04EC689640CCE050604A925A3EC013AF07D4F;reviewer 按冻结算法复算 tree SHA-256=32F1DC23F6704966AE4511CB173318CD11FCBA031323028D268D9F2488589E70,Name/Version 唯一且匹配。
  5. reviewer 限定运行 installer production-equivalent receipt 与真实 CArchive writer x/b 两项窄测:2/2 PASS / Ran 2 in 22.169s。正例 canonical 32F1...E70 返回 VALIDATION_PASS_ONLY 且 install root/registry 为 0;历史 7C9...105C、全零、任意漂移均在 copy/HKCU 前 fail closed;真实 writer 的 x、Windows-promoted b 均维持七文件 bytes/identity/tree 门禁。两次先行 unittest loader 调用因 hyphen 路径与 -I 排除 cwd 在测试体执行前报 import error,修正为目标测试目录非隔离模块加载后上述两项均通过,不构成产品或合同失败。

其他静态与边界检查

  • PowerShell parser、Python in-memory compile、strict UTF-8/no BOM/no trailing whitespace、JSON parse、scoped diff=PASS;治理=OK/projects=1/warnings=0
  • 提交的 synthetic exact-builder seam=1/1 PASS / 348.093s、frozen bridge=21/21 PASS、final project=135 tests OK / 6 skipped 证据与冻结工件一致,本限定复审未重跑长矩阵或正式 build。
  • build-004 EXE/receipt 保持 immutable NOT_INSTALLABLE 历史;build-005 attempt=0dev/tmp/bili-auth-controlled-build-ytdlp-20260808-005 不存在。install/HKCU/EXE execution/Chrome/Cookie/session/network/download/media/F:\video/formal ana-data/transcription=0

Reviewer-owned source approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-canonical-tree-hash-source-approval.json=373/E0D621EB2C5E8149FE9B775CF7EA2F2ECB17C3FC3A6D4911D67CF2D24ACBD3EF
  • approval exact schema 1,仅绑定 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535,scope=controlled-build-source-manifestapproved_by_role=dev.reviewer.project;未创建、复用或更新 install-exact-build approval。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:CANONICAL_TREE_HASH_CONTRACT_CLOSED_SOURCE_APPROVED
  • 仅允许管理员已授权的唯一 owner 使用本次 exact source manifest、上述 reviewer source approval 与既有 exact Python/PyInstaller/provision receipt,在新的不存在 output 目录执行一次 build-005;任何 source/dependency/tree/archive/type/receipt/output-set 漂移必须 fail closed。
  • 本 PASS 不授权 install/HKCU/EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。build-005 形成 exact EXE/schema 2 receipt 后仍须同链 hash-only 限定确认并取得新的 install-exact-build approval。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-REPLACEMENT-BUILD-005-HASH-ONLY-CONFIRMATION-20260808-001

  • 记录时间:2026-08-08T20:34:29+08:00
  • 审核阶段:同一事项、同一审核链内,仅对管理员授权的唯一 build-005 EXE、schema 2 receipt、source/dependency/builder 绑定、canonical metadata tree contract 与精确输出集合做静态 hash-only 限定确认;不重开已通过 source/runtime 合同,不执行 EXE,不安装,不写 HKCU,也不触发任何真实认证、联网、下载、媒体或正式路径动作。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;请求=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-SESSION-YTDLP-REPLACEMENT-BUILD-005-HASH-ONLY-CONFIRMATION-20260808-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 管理授权:HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-SESSION-YTDLP-CANONICAL-TREE-HASH-REPAIR-BUILD005-AUTH-20260808-001
  • 前序 source 审核:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-YTDLP-CANONICAL-TREE-HASH-SOURCE-REREVIEW-20260808-001 / PASS/0;reviewer source approval=ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-canonical-tree-hash-source-approval.json=373/E0D621EB2C5E8149FE9B775CF7EA2F2ECB17C3FC3A6D4911D67CF2D24ACBD3EF,精确绑定 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535
  • build-005 提交实物:EXE=dev/tmp/bili-auth-controlled-build-ytdlp-20260808-005/project-info-bili-auth-native-host.exe=21343716/CABE09ACC0CC151B3C537F68B9AF1544D6CB5BCAF64FE3B3DB12055D52C732EE;schema 2 receipt=dev/tmp/bili-auth-controlled-build-ytdlp-20260808-005/build-artifact-manifest.json=2874/CC6663A15CDEB375167900730A9F956C9B09839558586E5DFC3D7FC57728ACC0;machine evidence=dev/tmp/bili-auth-ytdlp-build-contract-repair-20260806-001/replacement-build-005-success-20260808.json=4496/3FB4557AD81556068B27F6EBA10017883B511C52DDD66AA505150AAD4977CF57

Findings

  • 阻断 findings:0

Hash-only 独立确认

  1. output root dev/tmp/bili-auth-controlled-build-ytdlp-20260808-005 恰好包含上述两个普通、非 reparse 文件,目录=0.build/.spec/.deps=0;EXE 前两字节静态读取为 MZ,审核中未加载或执行该 EXE。
  2. reviewer 独立复算 EXE、receipt、source approval、source manifest、dependency manifest、pinned wheel、exact Python、exact PyInstaller、provision receipt、build script 与 machine evidence 的 bytes/SHA-256,均与提交值一致。receipt 的唯一 files[0] 精确绑定 EXE name/bytes/SHA-256;source approval→source manifest→receipt→EXE 链完整。
  3. receipt 为 strict JSON、无 duplicate key、schema=2、UTF-8/no BOM/no trailing whitespace;target/build identity、pyinstaller-onefile、PyInstaller=6.15.0、yt-dlp=2026.7.4、source/dependency/wheel/Python/PyInstaller/provision/build-script 字段均与冻结实物精确一致。
  4. reviewer 使用获准 PyInstaller CArchiveReader 对 EXE 做纯静态读取:唯一 yt_dlp-2026.7.4.dist-info 恰好包含冻结七文件,实际 type codes=[b] 且属于允许集合 [b,x],Name=yt-dlp、Version=2026.7.4;按 source manifest 冻结算法独立复算 metadata tree SHA-256=32F1DC23F6704966AE4511CB173318CD11FCBA031323028D268D9F2488589E70,与 source contract 和 receipt 完全一致;receipt 所列 required modules 缺失数=0
  5. build 证据记录 attempt=1、retry=0、exit=0、wall=66.8s;历史 build-004 EXE/receipt hash 未变且继续仅为 NOT_INSTALLABLE_HISTORY,本次未复用其 approval。提交证据声明 install/HKCU/EXE execution/Chrome/Cookie/session/network/download/real media/F:\video/formal ana-data/transcription=0,静态实物检查未发现反证。

Reviewer-owned exact-build approval

  • 已创建 source/build 树外 approval:ai-inforev/worklog/2026-08-08-bili-authenticated-session-ytdlp-replacement-build-005-install-approval.json=596/4D18A32DE9DFEB6B90C1A398087BD36CEAE09418D54E1F0DC485D6B95C962A44
  • approval exact schema 1:approval_scope=install-exact-buildapproved_by_role=dev.reviewer.projectstatus=APPROVED;精确绑定 source manifest SHA-256、build-005 receipt bytes/SHA-256 与 build-005 EXE bytes/SHA-256。该 approval 不在 source/build 树内,且与历史 build-004 approval 不可互换。

结论与边界

  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:BUILD005_EXACT_BUILD_HASH_ONLY_CONFIRMED
  • build-005 已满足 installer 的独立 exact-build identity 前置门禁;未来只有获得另行明确安装调度的操作者,才可把同一 source approval、上述 build-005 approval、同一 schema 2 receipt 和同一 EXE 作为不可替换输入。任一 bytes/hash/path/output-set 漂移均须 fail closed 并重新审核。
  • 本 hash-only PASS 与 approval 本身不授权当前回合实际 install/HKCU,不授权 EXE execution,也不授权 Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V003-DESIGN-20260810-001

  • 记录时间:2026-08-10T03:27:32+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内的 V003 重型安全设计独立审核;实现、Web Store 发布、policy/HKCU、Chrome/session、网络、下载和真实数据动作继续冻结。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;方案=dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V003.md=17715/1EC7F6D8D6CD6AA9BEE5F5696D1CB578514CA3C61ADA838777093C8EFEF2C2F1
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V003-DESIGN-20260810-001;管理续派=HANDOFF-INFOADMIN-INFODEV2-BILI-AUTHENTICATED-EXTENSION-ZERO-MANUAL-STANDARD-LOAD-ASSIGN-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 角色与入口核验:dev.developer.project.secondary / infodev-2 是登记 owner,dev.reviewer.project / inforev 是共享独立审核员;目标落点=dev/project-devdev-doc/project-doc,审计入口=dev-doc/开发审计报告.md,均与 mbx.project.yaml、项目配置和工作说明一致。
  • 上游账本核验:开发总纲、计划和执行日志已登记同一事项续派、重型方案先审、原 owner 不并发、真实动作全冻结;未创建新 task 或平行审核链。
  • 冻结基线独立复算:原 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535;清单所列实际源码树=17/17 exact、缺失=0、额外=0、bytes/hash 漂移=0、reparse=0。拟新增 managed-load 产品目录和测试目录均不存在,符合 implementation frozen。
  • 方案编码检查:strict UTF-8=PASS、BOM=NO、trailing whitespace=0、目标文件 git diff --check=PASS
  • 外部一手事实:Chrome Enterprise 官方策略页确认 Web Store 扩展可通过 Windows Software\\Policies\\Google\\Chrome\\ExtensionInstallForcelist 静默强制安装,策略在 profile 层生效;Chrome 官方分发文档确认 Windows 标准安装来源必须是 Chrome Web Store。因此 V003 选择的总体机制有受支持依据,不需要退回开发者模式、unpacked、CDP 或自托管 CRX。证据:https://chromeenterprise.google/policies/extension-install-forcelist/https://developer.chrome.com/docs/extensions/how-to/distribute

Findings

F1_DESIGN_WEBSTORE_PACKAGE_NOT_UPLOAD_READY(阻断;产物/外部发布合同)

  • V003 第5、6、11节冻结 ZIP 恰好只有 manifest.json/background.js/sidepanel.html/sidepanel.css/sidepanel.js 五文件;实际冻结 manifest 没有 icons 字段,源码树也没有 icon 资产。Chrome 官方 manifest 文档把 descriptionicons 列为 Chrome Web Store 所需键,官方 Web Store 准备文档也要求提交完整扩展 ZIP。因此当前 exact-five 包不能作为已具备发布条件的安全实施合同。证据:https://developer.chrome.com/docs/extensions/reference/manifesthttps://developer.chrome.com/docs/webstore/prepare
  • 最小修订:在不改写原17文件的前提下,明确一个受审的 Web Store packaging overlay,冻结发布 manifest 相对原 manifest 仅允许的字段差异、所需 icon 文件及其 bytes/SHA-256,并相应修订 exact payload/ZIP/receipt/测试合同;或者提供 Google 官方 validator 对当前 exact-five 包确实可接受的可复验依据。发布返回 ID 非 exact ID 时继续 fail closed,不允许迁就修改 Native Host origin。

F2_DESIGN_SOURCE_APPROVAL_CONTRACT_MISSING(阻断;供应链信任)

  • 第6、11节要求 builder 在任何输出前消费树外 source approval,build receipt 也要绑定它,但全文没有冻结该 approval 的 schema、scope、批准角色、精确绑定字段、路径边界、生成时点和失效条件;第5节列出的 exact schema 集合也未包含 source approval。开发员将不得不自行发明信任锚或测试会误把同树自签文件当批准。
  • 最小修订:增加 reviewer-owned、source/output 树外 source approval 的 exact schema,至少绑定 task、managed-load contract bytes/SHA-256、原 source manifest、发布 payload/overlay exact set、批准角色/状态/时间;明确只在 V003 实现审核 PASS 后由 reviewer 创建,Build 只能消费其 exact bytes/hash,ValidateOnly 离线测试只使用临时 fixture。

F3_DESIGN_SECRET_SCAN_CONTRADICTS_FROZEN_RUNTIME(阻断;秘密边界/测试合同)

  • 第10、11节要求源码、ZIP、测试和证据递归拒绝 cookie/token/... 等“字段名”,但被冻结的合法五文件中,manifest 必然包含 cookies permission,background.js 必然包含 chrome.cookiescookie_store_idcookies 和内存 cookie record 字段。按设计逐字实施会让所有正确输入永久失败;放宽实现又会违反冻结方案。
  • 最小修订:把门禁改为拒绝认证秘密**值**、凭据持久化字段和秘密输出 sink,而不是拒绝运行所需的公开 API/协议标识符;使用唯一 synthetic secret sentinel 证明其不进入 ZIP 外持久化物、receipt、stdout/stderr、argv/env、日志和证据,同时保留对真实 credential literal、token 文件、profile/Cookie 数据落盘的硬阻断。

F4_DESIGN_EXCEPTION_MODEL_LANGUAGE_MISMATCH(阻断;错误处理/可验收性)

  • 产品入口被冻结为 PowerShell 脚本,但第8、9、11节使用 Python 的 BaseException/KeyboardInterrupt/SystemExit 类型体系并要求“原类型重抛”。PowerShell 实际处理的是 terminating .NET/PowerShell errors,try/catch/finally 及 Ctrl+C pipeline stop 的语义不同;当前测试矩阵没有可实现的异常注入与终态判定口径。Microsoft 一手说明:https://learn.microsoft.com/powershell/module/microsoft.powershell.core/about/about_try_catch_finally
  • 最小修订:二选一并冻结唯一口径:保留 PowerShell时改为实际 terminating error、PipelineStoppedException/Ctrl+C、外部进程终止分类与 exit/stderr 合同;或把事务核心显式落为 Python 模块、PowerShell 仅做代理,从而使用 BaseException 语义。测试须与所选语言实际异常类型一致,不能在接口层声称保留不存在的类型。

F5_DESIGN_INSTALL_ROLLBACK_CRASH_REOPEN_GAP(阻断;策略污染/恢复)

  • Install 在写入 policy value 后、final install receipt rename 前若进程被终止或机器中断,会留下已生效策略值但没有正式 receipt;此时下一次 Install 因目标占用停止,Rollback 又因缺正式 install receipt 不能运行。Rollback 在删除 policy value 后、final rollback receipt 前中断也会留下相反的不可判定状态。catch/finally 不能覆盖强制终止或掉电,现有 BaseException 点注入不能证明恢复。
  • 最小修订:冻结 pending receipt 的 durable phase/ownership/preimage/commit-point 字段和启动时唯一恢复矩阵。建议以 final receipt rename 为 commit point:commit 前重启一律恢复前像;安装中断时只在能证明本次 ownership 和 exact value 时删除本值,回滚中断时恢复 exact value;任何外部漂移或所有权不明均 SAFETY_STOP 并保留证据。增加真实子进程 kill/crash-reopen 测试,覆盖 value 写/删与 final receipt 之间的每个持久化点。

F6_DESIGN_POLICY_PREIMAGE_SCHEMA_INCONSISTENT(阻断;策略并存安全)

  • 第7.2节的 install approval 只冻结“其他 value names 的排序哈希”,第8.1、8.3、8.4节却要求验证和保持其他 values 的 names/types/data exact 前像;现有 approval schema 无法证明同名 policy value 的 type/data 在审批后未变化,也不足以支持 exact 回读、回滚和 HealthCheck。
  • 最小修订:在 install approval 和 pending/install/rollback receipt 中冻结同一 canonical preimage 摘要,至少覆盖 policy key 是否存在,以及每个既有 value 的 name、registry type、data 的长度与无秘密哈希;安装前最后一次复算,安装/回滚后再次复算。任何 target race、同名数据变化或其他 value 漂移均不得覆盖/删除,必须停止并保留外部失败证据。

结论与 required_fixes

  • 审计状态:HOLD
  • 阻断问题数:6
  • 非阻断建议:无;上述均是当前安全实施所必需的发布可行性、信任锚、秘密门禁或恢复合同,不是样式/命名加码。
  • required_fixes:只修订 V003 以一次闭合 F1—F6;保留 Web Store + official update URL + 单值 ExtensionInstallForcelist 主路径、exact extension ID、独立目录、冻结原17文件/runtime/bridge、四个后续外部门和全部零真实动作边界。复审只检查 F1—F6 及 preserved contracts 是否回退。
  • 本 HOLD 不授权创建 managed-load 代码、测试或候选 ZIP,不授权 Web Store 发布、policy/HKCU、Chrome/session、network/download、real media、F:\video、formal ana-data 或 transcription。
  • Open questions:无;开发员可直接按上述最小修订形成同链 V004 后一次性提交聚焦复审。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V004-DESIGN-REREVIEW-20260810-001

  • 记录时间:2026-08-10T04:42:19+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅对 V003 HOLD/6 的 F1—F6 闭环及 preserved contracts 做聚焦设计复审;实现、候选包、Web Store 发布、policy/HKCU、Chrome/session、网络、下载和真实数据动作继续冻结。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;基础方案=dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V003.md=17715/1EC7F6D8D6CD6AA9BEE5F5696D1CB578514CA3C61ADA838777093C8EFEF2C2F1;修订=dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V004.md=21074/6E2B2AEDD2A432889ACD5314B5AD1C93B923D937E628434AE952A303A2BE8486
  • 请求交接:HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V004-DESIGN-20260810-001;前序结果=HANDOFF-INFOREV-INFODEV2-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V003-DESIGN-REVIEW-RESULT-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 方案编码与治理:V004 strict UTF-8=PASS、BOM=NO、trailing whitespace=0;开发总纲、计划、执行日志和目录导读登记同一 task/owner/reviewer 链;mbx validate --project project-info --governance=OK/projects=1/warnings=0
  • 冻结边界独立复算:原 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535;实际源码树=17/17 exact、missing/extra/hash mismatch/reparse=0/0/0/0;拟新增 managed-load 产品目录和测试目录均不存在,候选 ZIP=0

Findings

  • 阻断 findings:0

F1—F6 闭环确认

  1. F1 / upload-ready packaging overlay:PASS。 reviewer 严格解码 embedded overlay manifest,复算=1150/92F2E950BA5CA5ECDA5A0F167DD90FB19449D4CC3AE1C6AB7AB404A337BA7A43;与原 manifest.json=1011/9B5CEB76758D69C3A9F7DEBDE5A55B026E70BA064769180A6F959A04283EA865 深比较确认唯一新增字段为冻结 icons 对象,原 key/version/permissions/runtime 全部逐值不变。四个 embedded PNG 的提交 bytes/SHA-256 均匹配,PNG signature、IHDR 尺寸、RGBA 8-bit、chunk CRC、IDAT 解压/scanline 长度和 IEND 均通过;从未变 public key 独立派生 extension ID=oidmclckpdmpabbfedplkbdplmfcenbb。exact-nine ZIP、旧 exact-five 负例和 overlay-only 差异门禁足以闭合发布包阻断。
  2. F2 / reviewer-owned source approval:PASS。 schema、scope/status、批准角色、task、contract、原 source manifest、managed source tree、9-entry payload、实现 PASS 审计和 RFC3339 时间均已冻结;正式 approval 只能在实现审核 PASS 后由原 reviewer 于 source/output/install 树外创建,生产入口强绑定 exact path/bytes/SHA-256,test-only scope 只能经不可由生产 CLI/环境选择的内部 adapter 注入临时 fixture,developer 自签或旧批准均 fail closed。
  3. F3 / secret-value boundary:PASS。 V004 明确废止合法 cookies permission/API/协议字段的关键词误杀,改以冻结 source bytes、exact schema/value domain、零环境/profile 枚举和 synthetic sentinel 端到端 sink 检查证明秘密值不进入 ZIP、receipts、stdout/stderr、日志、argv 快照或证据;真实 credential literal、authorization/cookie header、signed URL、private-key/profile 数据和秘密输出 sink 仍硬阻断,未放宽 V001+V002 内存秘密合同。
  4. F4 / PowerShell exception model:PASS。 产品语言保持 PowerShell,统一采用 terminating errors、PipelineStoppedException/合作式取消、实际 Ctrl+C 与不可捕获 kill/power-loss 分类;安全门禁、普通失败和可捕获取消分别冻结 exit 3/4/130,不可捕获中断不虚报 stdout/exit 或成功 receipt,而由下次 reopen recovery 收口;已删除 Python BaseException/KeyboardInterrupt/SystemExit 和“原类型重抛”冲突语义。
  5. F5 / durable intent and crash-reopen:PASS。 receipt parent、current-user mutex、immutable install/rollback pending、final receipt atomic rename commit point及完整启动恢复矩阵均已冻结。commit 前只在 exact preimage/owned exact target 可证明时恢复前像;final exact 后按 committed state 识别;target、其他 value、key、temp、schema/hash/binding 任一歧义均零 registry mutation 并 SAFETY_STOP。真实子 PowerShell + file-registry seam 在每个持久化点强杀并重启入口的验收矩阵覆盖 install/rollback 两向恢复、recovery receipt 写失败、无自动重试和无伪成功。
  6. F6 / canonical policy preimage:PASS。 install approval、pending/final、rollback 和 HealthCheck 共用 exact preimage:key_exists、target absent、全部既有 value 的 ordinal name、kind、canonical data length/hash及总 hash;String/Expand/Multi/DWord/QWord/Binary 的规范编码明确,Unknown/不可无损规范化值 fail closed。管理员 install approval 同时绑定 release/source/native/receipt paths/full preimage;mutex 双进程、target/other-value last-check drift、key absent/existing、全部允许 kind 与 rollback 完整前像均进入非真空测试合同,已消除“仅 value names hash”与 exact 恢复要求的不一致。

Preserved contracts 与结论

  • V003 的 Web Store + official update URL + 单值 ExtensionInstallForcelist 唯一路径、exact extension ID、冻结原17文件/build-005/installed Native Host/bridge/runtime、独立 managed-load 目录及 Web Store 发布、release approval、管理员 install approval、实际 policy install、Chrome enabled/runtime 分阶段外部门均未回退。
  • 审计状态:PASS
  • 阻断问题数:0
  • 结论:V003_V004_F1_F6_DESIGN_CLOSED_IMPLEMENTATION_AUTHORIZED_OFFLINE_ONLY
  • 授权边界:仅允许唯一 owner 按 V003+V004 组合合同创建 dev/project-dev/bili_authenticated_extension_managed_load/、对应测试和实现证据,运行纯离线/合成测试并提交同链实现审核;实现审核 PASS 前不得创建正式 reviewer source approval。
  • 本 PASS 不授权候选包外部发布、Web Store upload/publish、release approval、policy/HKCU、Chrome/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime。任何后续门不得回退开发者模式、unpacked、--load-extension、CDP/profile 注入、自托管更新服务或第三方 Host。
  • Open questions:无;后续评审仅在实现明确提交后按组合合同进行。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-IMPLEMENTATION-REVIEW-20260810-001

  • 记录时间:2026-08-10T09:01:23+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,按已通过的 V003+V004 组合合同对 managed-load 离线实现、测试与证据做一次独立实现审核;Web Store publish、policy/HKCU、Chrome/session、网络下载、真实媒体与 runtime 均未授权且未执行。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260810082543675_7b284c77;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-IMPLEMENTATION-20260810-001;回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计基线:V003=17715/1EC7F6D8D6CD6AA9BEE5F5696D1CB578514CA3C61ADA838777093C8EFEF2C2F1;V004=21074/6E2B2AEDD2A432889ACD5314B5AD1C93B923D937E628434AE952A303A2BE8486;前序设计审计=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V004-DESIGN-REREVIEW-20260810-001 / PASS/0
  • 冻结实现复算:builder=26507/F0F4ED492A02DAC7E03B7F45B3E118B597F950C696FAADC28158F69A6D3F4811;installer=58279/C444C85D0B4C0B550E64329415388294F555456DB1ED728EE3ADE683639F3EFF;contract=8294/F5E5DE4AEC355A5024E3E221B3E358C0D189B1949A1B18D870ABE6D8BF9EFA4B;README=2538/7FB38D806F0F37C99C1319B294ED4A64C82AF3A0A1DC0787C461B08042DCA2A3;test=30172/B28863DFFED9B2A71A8ED78EC85DDDFA8EF57D0F887EBBCCC15141A7EBA21968;tool doc=5429/98FE152D9CE9065371FDCE1DEE94091181819E28D19B092D91F84139388CF3EA;evidence doc=5122/32DA1913F16C3BFF114C735F48C510ACA6A032C921187C2E61A9DD9F0CCCA0BE;machine evidence=4757/047028BD9FA51A18EC3AEBA8550074D3776998CFDB1DD4A5355DEEAE585F0AA2;review request=4548/264EF88F38144B6317557690B3D630F31A4356D57036307F8795BA8EC1AB6E48,均与提交一致。
  • 冻结原扩展独立复算:source manifest 所列实物=17/17 exact,missing/extra/hash mismatch=0/0/0。治理校验=OK/projects=1/warnings=0

Findings

F1_SOURCE_APPROVAL_TRUST_AND_SCHEMA_FAIL_OPEN(阻断;正式批准可被调用方自报)

  • build_webstore_upload.ps1:308-331install_managed_extension_policy.ps1:116-145 只校验调用方提供文件的 path/bytes/SHA、approved_by_role 字符串以及 implementation-review 字段的格式;未复读或复算 dev-doc/开发审计报告.md 的 exact bytes/SHA,未证明 audit ID/PASS 终态实际存在,也未把正式 approval 限定到 reviewer-owned 树外信任位置。因此 developer 可自行生成内容自洽、角色自报为 reviewer 的 production-scope approval。
  • V004 第3节冻结 managed_load_contract={path,bytes,sha256}original_source_manifest={path,bytes,sha256};当前两入口却以 exact keys @('bytes','sha256') 接受缺 path 的对象并拒绝含 path 的正式对象,产品 schema 与已通过设计相反。
  • reviewer 临时 ValidateOnly 反例实际结果:production scope、自报 reviewer、audit_bytes=1audit_sha256=AAAA... 且缺上述两个 path 的 approval 返回 exit=0 / VALIDATION_PASS_ONLY;同一对象补齐 V004 要求的两个 path 后返回 exit=3 / E_BUILD_CONTRACT。该反例未生成 ZIP、未写正式路径。

F2_PRODUCTION_SELECTABLE_TEST_SEAMS(阻断;test-only scope 可由产品 CLI 开启)

  • builder 的 -TestOnlyAllowSyntheticApproval/-TestOriginalSourceRoot(第12—15行)和 installer 的 -TestOnlyAllowSyntheticApprovals/-TestFileRegistryPath/-TestInjectFailure/-TestPauseAt(第15—23行)均为产品脚本公开参数;DontShow 只隐藏帮助,不形成不可达边界。调用者可直接选择 synthetic approval、替换原 source root、切换 file-registry provider 或注入暂停/故障。
  • 这违反 V004 第3节“test-only scope 只能经不可从生产 CLI/环境选择的内部 adapter 注入”的冻结合同;当前测试也全部依赖这些产品参数,未证明 production wrapper 对 developer 自签、test scope 和 test provider fail closed。

F3_RECOVERY_ERROR_TAXONOMY_AND_FAILURE_EVIDENCE_MISSING(阻断;恢复失败被吞并且无外部失败证据)

  • installer 第659—669、675—685行对 recovery/终态复核异常使用空 catch {};二次恢复失败会被静默丢弃,主异常与 secondary rollback/recovery failure 均未留下可审核关系。第687—689行又把 receipt 损坏、unknown temp、外部漂移和恢复歧义统一压成 E_MANAGED_LOAD,未实现 V004 冻结的 E_RECEIPTE_RECOVERY_AMBIGUOUS 等终态区分。
  • contract/install approval 未绑定 administrator-approved independent failure root,产品也未实现包含固定 error code/hash 的 CreateNew 外部失败证据;这不满足 V004 第5节和第6.4节对原 ErrorRecord、二次失败及失败证据落点的要求。

F4_CRASH_CANCEL_ACCEPTANCE_MATRIX_INCOMPLETE(阻断;提交证据不足以证明每一持久化点)

  • test_managed_load.py 的真实子进程强杀只覆盖 install after-policy-write、rollback after-policy-delete,以及并发测试中的 after-install-pending;其余 install/rollback pending flush、最后前像检查、postimage、final temp flush/rename 前后没有逐点 kill/reopen 反例。第489—524行仅对 install 侧做同进程普通异常注入,不能替代不可捕获中断。
  • 未发现 recovery receipt 写失败、实际 Ctrl+C(宿主支持时)或 primary+secondary recovery failure 的非真空测试;测试只断言若干 exit code,没有断言 E_RECEIPT/E_RECOVERY_AMBIGUOUS 与外部失败证据。提交材料声称“每个持久化点”的验收与实际测试集合不一致。

已通过且冻结的检查

  • exact-nine payload、overlay-only manifest、四个 PNG 固定内容、确定性 ZIP 基本实现未发现本次同边界阻断;冻结原扩展 17 文件未回退。
  • secret sentinel、禁止 Chrome/CDP/unpacked/自托管路径、policy canonical preimage、单值策略与主要 install/rollback happy path/部分 crash-reopen 测试未发现新增范围漂移。
  • 提交的 12/12、冻结扩展 33/33、其他 project 102/102 结果仅说明现有测试通过;F1 的独立反例证明现有测试未覆盖正式 trust boundary,不能据此放行。

最小 required fixes

  1. 按 V004 exact schema 同时加入并验证两个 {path,bytes,sha256} 绑定;正式 source approval 必须位于 reviewer-owned、source/test/output/install 树外的固定信任位置,并由产品入口复算该 approval 所绑定的实际实现审计文件 bytes/SHA、audit ID 与 PASS 终态。增加 developer 自签、假 audit、旧 audit、错误/缺失 path、同树/输出树/安装树 approval 的 production-scope 反例。
  2. 从产品参数面彻底移除 synthetic approval、source override、file-registry、fault/pause 等 test seams;改用测试目录内的内部 adapter/测试 wrapper 或不可由产品 CLI/环境选择的依赖注入。增加生产入口传入全部 test 参数均因未知参数失败且零副作用的断言。
  3. 在 administrator-approved 独立 failure root 的 exact approval 绑定下实现 CreateNew/flush 的规范失败证据,记录固定 primary error code/hash 与 secondary recovery failure code/hash,不回显 message/path/value;不得使用空 catch 吞掉恢复失败,并恢复 E_RECEIPT/E_RECOVERY_AMBIGUOUS 等冻结终态。
  4. 补齐 install/rollback 每个持久化点的真实子 PowerShell kill/reopen 矩阵、可支持时的实际 Ctrl+C、recovery receipt 写失败及 primary+secondary failure 反例;逐例断言 registry 前像/后像、pending/final/recovery/failure evidence、无伪成功、无自动重试及精确 exit/error code。
  5. 修复仅限上述四项及对应测试/说明/证据;保持 V003+V004 其余合同、原17文件、build-005、installed Native Host、bridge/runtime 和全部真实动作边界不变,再沿同一 task/reviewer 链一次性提交 F1—F4 限定复审。

结论与边界

  • 审计状态:HOLD
  • 阻断问题数:4
  • 结论:IMPLEMENTATION_NOT_APPROVED_SOURCE_APPROVAL_NOT_CREATED
  • reviewer-owned 正式 source approval:未创建;当前 managed-load source tree、contract、builder/installer 和测试不得用于 Web Store candidate build 或后续发布门。
  • 当前安全边界:Web Store upload/publish、release approval、policy/HKCU、Chrome/session、network/download、real media、F:\video、formal ana-data、transcription 与 runtime 继续冻结;不得回退开发者模式、unpacked、--load-extension、CDP/profile 注入、自托管更新服务或第三方 Host。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-HOLD4-LIMITED-REREVIEW-20260810-001

  • 记录时间:2026-08-10T12:34:21.2746865+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅复审前序实现 HOLD/4 的 F1 source approval trust/schema、F2 production test seam、F3 recovery taxonomy/failure evidence、F4 crash/cancel matrix;V003+V004 其余 passed contracts、原17文件、build-005、installed Native Host、bridge/runtime 与产品范围不重开。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260810120722843_3cdd3ff8;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-HOLD4-LIMITED-REREVIEW-20260810-001;回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 前序审计:DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-IMPLEMENTATION-REVIEW-20260810-001 / HOLD/4,提交时审计快照=411809/48FEFD1CFD277139B0D94A4D72E8DACC35071CB0BB39D5B091FB2C37F34FDB50
  • 设计基线:V003=17715/1EC7F6D8D6CD6AA9BEE5F5696D1CB578514CA3C61ADA838777093C8EFEF2C2F1;V004=21074/6E2B2AEDD2A432889ACD5314B5AD1C93B923D937E628434AE952A303A2BE8486
  • 冻结实现:builder=28818/5B829CF265FD513C1076BA345D48EF48BC8880AB9AA083D21022E8F35BB0C8FB;installer=68147/568E1AEF1FA09AE29091A7133B5F0A0F5DDD1D9754C3F604B627E84EF44E177B;contract=9290/0143C8D9B00FA363B746D9228CB31CC23FFF0AFB4C78672005035E47E6738757;README=3271/87B6F2D5A0F2FD1C40FF92E9A70958DFC24ADAA3181D789FD451490600FEE0CC;test=52212/2CFD357EEC087BF6F11B50988E6CE3B0B7C2829168789069B283F0118131BAE5
  • reviewer 独立复算当前产品 Get-TreeSummary ordinal 算法:managed-load source tree=4/B7D904E13C6629BF41CB80ED9527B43F23FD8B43240E62A3075C1D484E2FC55D,reparse=0;payload=9/1BD2276429357E84D23686C34109C0CCBAAAC0BF6CDA585204C88CAB26B54C63;原 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535
  • 证据纠偏:提交请求及 machine evidence 的 tree=7533015F5B0B034B9F1E4B305CD62D45B5317E647E945FB84E0C94FE86CF8144 使用不区分大小写的路径排序,不是产品入口冻结的 ordinal 排序结果;本审计及正式 approval 以产品可自行复算的 B7D904E13C6629BF41CB80ED9527B43F23FD8B43240E62A3075C1D484E2FC55D 为唯一权威值。该说明性证据偏差未影响任何产品字节、反例或安全门禁。

Findings

  • 阻断 findings:0

F1—F4 闭环确认

  1. F1 / reviewer trust anchor 与审计物理绑定:PASS。 builder 与 installer 的正式入口均把 source approval 固定到 contract 声明的 reviewer 私有路径;approval 的 contract/original-source 两个嵌套对象均强制 exact {path,bytes,sha256},同时绑定 managed source tree、九项 payload 及实现审计。产品重新读取真实 dev-doc/开发审计报告.md,复算 bytes/SHA-256,要求 audit ID 唯一、section 同时包含本 task、当前产品树和逐行 exact PASS/0/blocking_findings=0 终态。developer 自签、source/output/install 同树、假/旧审计、错误或缺失 path、旧树均在候选输出前 fail closed。
  2. F2 / production test seam:PASS。 两个产品脚本的公开参数面仅保留正式参数;synthetic approval、source override、file-registry、fault/pause 与 adapter 参数全部为未知参数并在任何产品副作用前失败。测试只复制产品树到 TemporaryDirectory,再由测试代码在副本的固定内部锚点注入 adapter;该注入不能由正式 CLI 或环境开启。
  3. F3 / recovery taxonomy 与独立失败证据:PASS。 install approval exact receipt_paths 已包含 source/receipt 树外的独立 failure_root;产品在任何失败证据写入前验证其边界,使用 CreateNew、flush、复读与 exact schema 校验,仅记录固定 primary/secondary code 及其 SHA-256,不记录异常 message/path/value。恢复路径无空 catch;E_RECEIPTE_RECOVERY_AMBIGUOUSE_RECOVERY_FAILED 与普通回滚终态保持可区分,已提交 recovery receipt 可在 reopen 时复验并消费。
  4. F4 / crash、cancel 与 reopen 非真空矩阵:PASS。 install 与 rollback 各七个持久化点均由真实子 PowerShell pause、强杀和入口 reopen 覆盖;pending/final temp、policy mutation、postimage 与 final commit point 分别断言 registry 前像/后像、pending/final/recovery/failure evidence、精确 exit/error code、无伪成功及无自动重试。另覆盖 recovery receipt 写入前/temp/commit 三点强杀、ordinary/pipeline-stop、primary+secondary failure、ambiguous drift 与 mutex。当前 Windows PowerShell host 对实际 CTRL_BREAK_EVENT 不投递,测试按 V004 host-supported 条件明确 skip 并强制清理子进程;不可捕获强杀矩阵已完整通过。

Reviewer 独立验证

  • F1/F2 聚焦反例:2/2 PASS / Ran 2 in 29.607s
  • F3 taxonomy/failure evidence 与 recovery-receipt crash:2/2 PASS / Ran 2 in 38.224s
  • F4 install/rollback 全持久化点真实 kill/reopen:1/1 PASS / Ran 1 in 115.172s
  • 合计独立聚焦验证:5/5 PASS / 183.003s;PowerShell parser=PASS;scoped diff check=PASS;治理校验=OK/projects=1/warnings=0

结论与边界

  • verdict=PASS/0
  • blocking_findings=0
  • 结论:HOLD4_F1_F4_CLOSED_IMPLEMENTATION_APPROVED_SOURCE_APPROVAL_AUTHORIZED
  • reviewer-owned source approval 固定路径:ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-source-approval.json;仅在本 section 成为审计文件最终快照后创建,并精确绑定本审计 bytes/SHA-256、当前 source tree 与九项 payload。
  • 本 PASS 仅关闭 managed-load 离线实现审核并允许 exact source approval 作为后续受控候选 ZIP 构建的必要输入;不授权 Web Store upload/publish、release approval、policy/HKCU、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-CANDIDATE-PACKAGE-REVIEW-20260810-001

  • 记录时间:2026-08-10T17:14:00+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,对唯一 managed-load Web Store 候选 ZIP 的 identity、schema 1 build receipt、source approval 绑定与 release-gate 可推进性做合并独立审核;不重开已通过的 V003+V004 离线实现合同,不执行 Web Store upload/publish、policy/HKCU、Chrome/session、network/download、真实媒体或 runtime。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260810162629091_0240d438;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-CANDIDATE-PACKAGE-REVIEW-NATIVE-WAKEUP-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 候选实物:ZIP=dev/tmp/bili-auth-extension-managed-load-candidate-20260810-001/project-info-bili-auth-ingress-webstore.zip=20072/96A7FA513EA136A63A15AC1654D4918F368B3D2CD195F381536C1A6B138D2E91;receipt=dev/tmp/bili-auth-extension-managed-load-candidate-20260810-001/webstore-upload-build-receipt.json=2165/4D90F74D7FE0DBDF197499AC48040733D1C4A885262C7B6734BC2A7F1284596F;machine evidence=5218/44F5BE0476C594CFB686AE568269D0B55FED302EE2C372D0FC87E22E0F851ACA
  • 前序 trust anchor:source approval=ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-source-approval.json=2261/F54924D29A1390538C7BBB1BB30A5F2E2FC4A7AFB7F935E1184B8C6D91D22ED0;其 implementation-review 绑定=DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-HOLD4-LIMITED-REREVIEW-20260810-001,整份审计文件快照=417971/392A9C468FD19E422B5150043B58DCB24252A1A2C9C9203FA14B25A556CE5F4C

Findings

F1_SOURCE_APPROVAL_BINDS_MUTABLE_APPEND_ONLY_AUDIT_SNAPSHOT(阻断;本次正式审计追加会使下游 installer 必然 fail closed)

  • source approval 的 implementation_review 把整个 dev-doc/开发审计报告.md 固定为 audit_bytes=417971audit_sha256=392A9C468FD19E422B5150043B58DCB24252A1A2C9C9203FA14B25A556CE5F4C。本轮审核开始时 reviewer 独立复算该绑定仍精确匹配。
  • build_webstore_upload.ps1:148-169install_managed_extension_policy.ps1:130-151 均重新读取当前物理审计文件,并要求整文件 bytes/SHA 与上述 immutable source approval 完全相等;installer 又在第175行无条件执行该检查。只读内存反例证明:在当前审计末尾追加任意非空合法内容后,文件 bytes/SHA 立即变化且 binding_match=false
  • 本事项治理合同要求本次候选包审核在同一追加式审计文件 EOF 留痕,因此本 section 自身落盘即会使现有 source approval 过期。候选 ZIP/receipt 虽已正确生成,但后续即使 Web Store 返回 exact ID/version、reviewer 再签 release approval,installer 仍会在 source approval 的 implementation-audit 物理身份检查处失败,无法进入 copy/HKCU 前的正式安装门。
  • 这是 source approval 在实现审核 PASS 后首次形成、并进入下一次必须追加审计的候选包阶段才具备的生命周期反例;前序 F1—F4 限定实现复审时尚无可消费的正式 approval/后续审计组合,故本次发现不重开已关闭实现问题,而是当前 release-gate 的新增实质阻断。

已通过并冻结的候选包静态检查

  1. output root 恰好包含上述 ZIP 与 receipt 两个普通、非 reparse 文件,目录与附加输出为 0。ZIP exact 9 entries、唯一且按 ordinal 顺序;固定 DOS 时间 2026-08-10 00:00:00、CRC、无加密、无绝对路径/.. 均通过。
  2. 九项 entry 的相对路径、逐项 bytes/SHA-256 与 source approval 全部一致;独立复算 payload tree SHA-256=1BD2276429357E84D23686C34109C0CCBAAAC0BF6CDA585204C88CAB26B54C63。manifest version=1.0.0、version_name=1.0.0+20260805.v002,public key 独立派生 extension ID=oidmclckpdmpabbfedplkbdplmfcenbb
  3. receipt strict JSON/no duplicate key、UTF-8 no BOM、schema 1、exact top keys、九项 entry、ZIP/source approval/contract/original manifest/payload tree 绑定均匹配。候选实物与请求所列 bytes/SHA-256 全部复算一致。
  4. 静态 secret sentinel、credential/header、private-key 与 signed-URL 扫描未发现命中;提交证据声明 Web Store upload/publish、policy/HKCU、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription/runtime=0,静态实物审核未发现反证。

最小 required fixes

  1. 在同一 task/reviewer 链做聚焦 trust-contract 修订:source approval 不得绑定会继续追加的整个审计文件物理 bytes/SHA;应改为绑定不可变、reviewer-owned、树外的实现审计 receipt,或绑定可唯一抽取且有 canonical bytes/SHA 的实现审计 section。后续普通追加必须保持验证通过,而原实现审计 section/receipt 的删除、替换、重复或任意字节漂移必须 fail closed。
  2. 同步修改 builder、installer、managed-load contract、source approval schema 与非真空测试;增加“source approval 形成后追加合法候选审核记录仍可由 installer 验证”的正例,以及篡改/删除/复制原实现审计 section 或 receipt 的负例。测试必须覆盖 builder 与 installer 两个消费者,并保持 reviewer-owned、树外、developer 不可自签边界。
  3. 修订经同链限定设计/实现审核 PASS 后,由 reviewer 创建新的 source approval。由于当前 schema 1 candidate receipt 精确绑定旧 source approval bytes/SHA,当前 ZIP 可保留为内容身份已验证的历史证据,但当前 ZIP+receipt 组合不得进入发布门;须由管理员另行授权在新 absent output root 生成一次绑定新 source approval 的 exact candidate,再做同链 hash-only/release-gate 复核。
  4. 正式 Web Store release approval 只能在受权发布完成并取得 exact Web Store ID/version/evidence 后由 reviewer 创建;本轮既无发布事实也存在上述 source-chain 阻断,因此不得创建预发布 release approval。修复闭环前 project.admin 不得授权 upload/publish,policy/HKCU、Chrome/session 与 runtime 继续冻结。

结论与边界

  • verdict=HOLD/1
  • blocking_findings=1
  • 结论:CANDIDATE_IDENTITY_VALID_RELEASE_GATE_BLOCKED_BY_MUTABLE_AUDIT_BINDING
  • reviewer-owned release-gate/release approval:未创建。候选包不能进入 project.admin 外部发布决策门。
  • 下一精确审批边界:先完成上述 source-approval 审计锚点修订的同链聚焦设计/实现审核与新 source approval,再生成并复核新 candidate;其 PASS 后才可请求 project.admin 对 Web Store upload/publish 作独立外部授权,发布事实核对通过后才由 reviewer 创建正式 release approval。
  • 当前继续禁止 Web Store upload/publish、policy/HKCU、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V005-AUDIT-ANCHOR-DESIGN-REVIEW-20260810-001

  • 记录时间:2026-08-10T18:54:14+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅审核 V005 对 source approval lifecycle、schema 2 与 canonical LF implementation-audit section 锚点的聚焦设计;V003+V004 已通过产品/runtime 合同、历史候选与全部真实动作门禁不重开,产品代码、测试、候选输出均保持冻结。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260810183219226_3cb8fed7;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V005-AUDIT-ANCHOR-DESIGN-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计实物:dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V005.md=7957/0A679BB43B64E1AC7E5CB97F650E60F82467884F9D80B737756EBCE6990D27E2;strict UTF-8、no BOM、LF、trailing whitespace=PASS
  • 冻结实现复算:builder=28818/5B829CF265FD513C1076BA345D48EF48BC8880AB9AA083D21022E8F35BB0C8FB;installer=68147/568E1AEF1FA09AE29091A7133B5F0A0F5DDD1D9754C3F604B627E84EF44E177B;contract=9290/0143C8D9B00FA363B746D9228CB31CC23FFF0AFB4C78672005035E47E6738757;README=3271/87B6F2D5A0F2FD1C40FF92E9A70958DFC24ADAA3181D789FD451490600FEE0CC;test=52212/2CFD357EEC087BF6F11B50988E6CE3B0B7C2829168789069B283F0118131BAE5,均与提交一致且未修改。

Findings

F1_SCHEMA2_APPROVAL_FIXED_PATH_LIFECYCLE_UNDEFINED(阻断;新 approval 与冻结旧 approval 占用同一唯一 production path)

  • V005 第1节明确冻结历史 schema 1 source approval 2261/F54924D29A1390538C7BBB1BB30A5F2E2FC4A7AFB7F935E1184B8C6D91D22ED0,不得修改、覆盖或复用;第3节又禁止修改 reviewer 私有批准。该实物当前位于 ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-source-approval.json
  • V003+V004 当前 production contract 的 trust.reviewer_source_approval_path 恰好仍固定为上述同一路径,builder 与 installer 只接受 contract 声明的该 exact reviewer-owned path。V005 虽要求实现审核 PASS 后由 reviewer 创建一个新 schema 2 approval,却没有冻结一个与历史文件不同的新 exact path,也没有授权覆盖旧路径;其第2.1节还声明 approval 外层 path 绑定继续不变。
  • 因而按当前文字实施只有两个选择,二者均违反冻结合同:覆盖旧 reviewer approval,或由实现者自行猜测一个新路径并使 builder/installer/contract 对消费者入口产生未审差异。Stage A 无法在不破坏历史证据且不猜合同的情况下完成,属于方案级阻断。

已通过并冻结的 V005 设计检查

  1. schema 2 删除 whole-file audit_bytes/audit_sha256,改为绑定唯一 canonical LF level-2 section 的 bytes/SHA,根因方向正确;旧 schema 1、stale/cross-source approval 在副作用前失败关闭,边界清楚。
  2. canonical 算法对 UTF-8/BOM/NUL/CR、唯一 exact heading、section 终点、尾部空行、最终 LF、required PASS lines、task ID 与当前 source tree 均有确定定义;builder/installer 共享 contract 且在输出/copy/HKCU/pending 前验证。
  3. reviewer 用当前正式实现 PASS section 做只读可行性复算:整份审计 strict UTF-8/no BOM/NUL/CR,目标标题唯一;canonical section=6161/C734E55AF42171D8B247431197E7AE4AB90141B48EA93A65C549387AED11D857,exact - verdict=PASS/0- blocking_findings=0 各1次,task ID 与 source tree B7D904E13C6629BF41CB80ED9527B43F23FD8B43240E62A3075C1D484E2FC55D 均存在;后续候选审计节已形成明确二级标题边界。
  4. 两消费者正例、后续一个/多个无关 section 追加、原节修改/删除/截断/复制/插入、schema/ID/hash/format/verdict/tree/path/encoding/reparse 漂移的验收矩阵完整;production CLI 不暴露测试 adapter,失败均要求零输出/零 copy/零 HKCU/零 pending/receipt。
  5. V003+V004 的 exact-nine payload、扩展 ID、秘密边界、policy 事务、安装恢复、历史候选不可复用以及 Stage A/Stage B/发布/release approval 分阶段门禁均未回退。

最小 required fixes

  1. 在同一链的 V005 修订中冻结一个与历史 schema 1 文件不同、唯一且确定的 schema 2 reviewer approval production path,并把 managed-load-contract.json#trust.reviewer_source_approval_path 明确迁移到该新路径;旧路径及旧文件继续 immutable historical evidence,禁止覆盖、删除、移动或作为 fallback。
  2. 明确新路径在实现审核 PASS 前必须不存在;PASS 后只能由 dev.reviewer.project 以 CreateNew/复读/bytes/SHA 校验方式创建。developer、builder、installer 与 project.admin 均不得代建、覆盖或自动迁移;若新路径已占用则停止并重新审核,不得选择其他路径。
  3. 在第4节补充两消费者的路径迁移反例:旧 schema 1 path/file、任意新路径、旧文件覆盖、目标预占、schema 2 放在旧路径、schema 1 放在新路径均须在输出/copy/HKCU/pending/receipt 前 E_BUILD_CONTRACT;同时断言旧 approval bytes/SHA 永久不变、新 approval 仅在 reviewer source review PASS 后出现。
  4. 只修上述 approval-path lifecycle 与对应 contract/tests/说明;canonical section 算法和其他已通过合同保持冻结。修订后沿同一 task/reviewer 链做一次 F1-only 设计复审;PASS 前不得实施 Stage A。

结论与边界

  • verdict=HOLD/1
  • blocking_findings=1
  • 结论:V005_AUDIT_SECTION_ALGORITHM_VALID_SCHEMA2_APPROVAL_PATH_NOT_IMPLEMENTABLE
  • V005 当前不得进入 Stage A 实现;未创建新 schema 2 source approval,未生成或复用候选包。
  • 当前继续禁止 Web Store upload/publish、release approval、policy/HKCU、install/enable、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V006-SCHEMA2-APPROVAL-PATH-F1-DESIGN-REREVIEW-20260810-001

  • 记录时间:2026-08-10T19:19:42+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅复审 V005 HOLD/1 的 F1 schema2 approval production-path lifecycle;V005 已通过的 canonical LF audit section 算法/schema 2 字段/两消费者验收矩阵及 V003+V004 产品/runtime/外部动作合同不重开,Stage A 实现继续冻结至本结论。
  • 审核对象:DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001;需求=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001;MB-X 消息=msg_20260810191413802_1285e824;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V006-SCHEMA2-APPROVAL-PATH-F1-DESIGN-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 复审对象:V005=7957/0A679BB43B64E1AC7E5CB97F650E60F82467884F9D80B737756EBCE6990D27E2;V006=dev-doc/project-doc/开发方案/CODE-DESIGN-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-V006.md=5152/66C90694A3F51649D049E7400C27BC016314878DF3C2661C2F4BABE2AB8935E8;V006 strict UTF-8/no BOM/LF/no trailing whitespace=PASS

Findings

  • blocking findings:0

F1 路径生命周期闭环

  1. 历史 schema 1 approval 路径和实物永久冻结为 ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-source-approval.json=2261/F54924D29A1390538C7BBB1BB30A5F2E2FC4A7AFB7F935E1184B8C6D91D22ED0;不得覆盖、删除、移动、重命名、迁移、复用或 fallback。reviewer 本轮独立复算实物仍精确匹配。
  2. schema 2 production approval 的唯一新路径已明确冻结为 ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-audit-anchor-source-approval.json;本轮只读检查确认该路径 ABSENT。Stage A 仅允许把 contract 的 exact production path 迁移到该值,builder/installer 不得通过参数、环境、目录扫描、相邻文件或旧路径选择其他 approval。
  3. 新路径在实现审核 PASS 前必须持续 absent;之后仅 dev.reviewer.project 可用 CreateNew、flush/fsync、strict JSON 复读及 exact bytes/SHA 校验创建。普通文件、目录或 reparse 预占均要求 SAFETY_STOP 并重新审核,不得删除占用物、覆盖或改选路径。
  4. builder 与 installer 均在任何 output/copy/HKCU/pending/receipt 前验证 exact path、外层 bytes/SHA、schema 2、canonical audit section、managed source tree、original source、contract 与 payload。旧 path/file、任意新 path、schema/path 交叉、历史覆盖、目标预占、旧 tree/contract/section 与 fallback 尝试的非真空矩阵完整,并冻结零副作用与旧 approval 实物不变断言。
  5. 冻结实现复算未漂移:builder=28818/5B829CF265FD513C1076BA345D48EF48BC8880AB9AA083D21022E8F35BB0C8FB;installer=68147/568E1AEF1FA09AE29091A7133B5F0A0F5DDD1D9754C3F604B627E84EF44E177B;contract=9290/0143C8D9B00FA363B746D9228CB31CC23FFF0AFB4C78672005035E47E6738757;README=3271/87B6F2D5A0F2FD1C40FF92E9A70958DFC24ADAA3181D789FD451490600FEE0CC;test=52212/2CFD357EEC087BF6F11B50988E6CE3B0B7C2829168789069B283F0118131BAE5

结论与边界

  • verdict=PASS/0
  • blocking_findings=0
  • 结论:V005_V006_AUDIT_ANCHOR_AND_SCHEMA2_APPROVAL_PATH_DESIGN_CLOSED_STAGE_A_AUTHORIZED_OFFLINE_ONLY
  • 仅授权唯一 owner 按 V005+V006 组合合同实施 Stage A:修改已列 builder/installer/contract/test/README/证据说明,运行离线验收并提交同链 source/implementation 复审。实现审核 PASS 前新 schema2 approval 必须保持 absent,developer 不得创建或模拟正式 reviewer approval。
  • 本 PASS 不授权新候选、Web Store upload/publish、release approval、policy/HKCU、install/enable、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime;历史候选继续不可复用或发布。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-IMMUTABLE-AUDIT-ANCHOR-STAGE-A-IMPLEMENTATION-REREVIEW-20260810-001

  • 记录时间:2026-08-10T21:21:44.0073219+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅复审 V005+V006 immutable implementation-audit section anchor 与独立 schema 2 source approval production path 的 Stage A 实施;V003+V004 已通过合同、冻结 bridge/runtime、历史候选与全部真实动作边界不重开。
  • task_id=DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260810210126336_082b57d1;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-IMMUTABLE-AUDIT-ANCHOR-STAGE-A-IMPLEMENTATION-REREVIEW-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计基线:V005=7957/0A679BB43B64E1AC7E5CB97F650E60F82467884F9D80B737756EBCE6990D27E2;V006=5152/66C90694A3F51649D049E7400C27BC016314878DF3C2661C2F4BABE2AB8935E8;前序设计结论=PASS/0
  • 冻结实现:builder=30149/F3B22497AB9EE5F35E53769D191B795BF784F75F808434D9C73806EB0C20C4EC;installer=69545/1F8AFDBAD2FA8E9D73FF51C23ACA5F59FD12EA1B793C011A740ED6696100E681;contract=9782/56BEE58F540554ADEA85D323A434D2C3FD8B44643C7C00C6E2C36F247D2CCBDD;README=3857/650670F0A31C6351CE29367C111FF322CE86DAFE02C8DF6BB2D6A4E70C91EBA8;test=58365/9EDA8789B79A4C2D35EBB007FC70B2EDF392B73D0039D5BB95C1F48679C73729
  • managed_load_source_tree=1BC35E9C2973BC7A10B5F87DA63BBA4335774130F4C0A7D81F524B89FD896216
  • source_tree_file_count=4

Findings

  • 阻断 findings:0

V005+V006 Stage A 闭环确认

  1. builder 与 installer 均从 managed-load-contract.json 消费同一 mbx-markdown-level2-section-lf-v1 合同,严格校验 UTF-8/no BOM/no NUL/no CR、唯一 exact 二级标题、下一二级标题或 EOF 边界、尾部空行归一和单一最终 LF;approval 精确绑定 section bytes/SHA、PASS 终态、task ID 与当前 source tree,不再绑定持续追加的整份审计 bytes/SHA。
  2. schema 2 production path 唯一固定为 ai-inforev/worklog/2026-08-10-bili-authenticated-extension-managed-load-audit-anchor-source-approval.json;本结论落盘前该路径不存在。历史 schema 1 approval 保持 2261/F54924D29A1390538C7BBB1BB30A5F2E2FC4A7AFB7F935E1184B8C6D91D22ED0,两消费者无路径、schema、参数、环境或邻接 fallback。
  3. reviewer 独立复算实现树=4/1BC35E9C2973BC7A10B5F87DA63BBA4335774130F4C0A7D81F524B89FD896216、reparse=0;产品代码中 whole-file audit_bytes/audit_sha256 匹配为 0。历史候选 ZIP=20072/96A7FA513EA136A63A15AC1654D4918F368B3D2CD195F381536C1A6B138D2E91 与 receipt=2165/4D90F74D7FE0DBDF197499AC48040733D1C4A885262C7B6734BC2A7F1284596F 未漂移,继续为 NOT_PUBLISHABLE_HISTORY
  4. 独立聚焦用例 test_19_schema2_immutable_audit_section_and_approval_path_are_shared=1/1 PASS / 33.982s,覆盖后续审计追加正例,以及 schema1/旧路径/章节篡改/缺失/重复/跨 source 重签的 builder+installer 零副作用反例;PowerShell parser=PASS,治理校验=OK/projects=1/warnings=0

结论与边界

  • verdict=PASS/0
  • blocking_findings=0
  • 结论:V005_V006_IMMUTABLE_AUDIT_ANCHOR_STAGE_A_IMPLEMENTATION_APPROVED_SCHEMA2_SOURCE_APPROVAL_AUTHORIZED
  • 仅授权 dev.reviewer.project 在本 section 落盘后,以 CreateNew 在 V006 固定树外路径创建一次 schema 2 source approval,绑定本 section canonical bytes/SHA、当前 contract/original manifest/source tree 与 exact-nine payload,并回读冻结 approval exact bytes/SHA。
  • 本 PASS 不授权生成或复用候选包,不授权 Web Store upload/publish、release approval、policy/HKCU、install/enable、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 或 runtime;历史候选和旧 approval 继续 immutable、不可发布、不可 fallback。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-STAGE-B-CANDIDATE-HASH-RELEASE-GATE-REVIEW-20260810-001

  • 记录时间:2026-08-10T22:55:59.9897526+08:00
  • 审核阶段:同一 authenticated-session task、同一 owner/reviewer 链内,仅对 Stage B 唯一受控候选的 ZIP/schema 1 build receipt 做 hash-only/static identity 与 release-gate readiness 审核;不执行构建、上传、发布、release approval、policy/HKCU、Chrome/session 或任何真实动作。
  • task_id=DEV-PROJECT-INFO-BILI-AUTHENTICATED-SESSION-DOWNLOAD-20260805-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260810221524280_19c0b086;请求交接=HANDOFF-INFODEV2-INFOREV-BILI-AUTHENTICATED-EXTENSION-MANAGED-LOAD-STAGE-B-CANDIDATE-HASH-RELEASE-GATE-REVIEW-20260810-001;来源/回传任务=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 管理授权=msg_20260810214310133_51a87b66;唯一 operator=dev.developer.project.secondary/infodev-2;build attempt=1;retry=0;本审核未执行或重试构建。
  • 审核根=dev/tmp/bili-auth-extension-managed-load-candidate-audit-anchor-20260810-002;输出集合=2 个普通非 reparse 文件、目录=0

Findings

  • 阻断 findings:0

候选身份与 release gate 复核

  1. 接受候选 ZIP:project-info-bili-auth-ingress-webstore.zip=20072/96A7FA513EA136A63A15AC1654D4918F368B3D2CD195F381536C1A6B138D2E91。ZIP exact-nine entry 名称按 ordinal 排序且唯一,固定时间=2026-08-10T00:00:00,无加密、无绝对路径或 ..,逐项 CRC、bytes/SHA-256 与 receipt 全部匹配。
  2. 接受 build receipt:webstore-upload-build-receipt.json=2165/441493BE0DC5B0AE19D4C4CAC14A93F12D9237AF6FD1FCDE654BD398698DCD7B。strict JSON/no duplicate key、UTF-8/no BOM/LF、schema 1、exact key set、BUILD_COMPLETE、时间顺序、唯一 ZIP binding 均通过。
  3. receipt 精确绑定 contract=9782/56BEE58F540554ADEA85D323A434D2C3FD8B44643C7C00C6E2C36F247D2CCBDD、原 source manifest=3681/333BA59512C5F68B35C00B8C9738C8B26FB78285F05851F9F35BA3FC44819535、schema 2 source approval=2366/BE159EB0C4ABC211C20EEF4F11B4208F43EC384A2E3528B04492623E147D2E32。approval 继续精确绑定 canonical implementation-audit section=4093/FA5C924E1F98D372E5AA5EFFBA574079A30EE091D122D90684CC74C0AC774586 与 source tree=4/1BC35E9C2973BC7A10B5F87DA63BBA4335774130F4C0A7D81F524B89FD896216;本次 append 不改变该 immutable section。
  4. 独立复算 payload tree=9/1BD2276429357E84D23686C34109C0CCBAAAC0BF6CDA585204C88CAB26B54C63;manifest version=1.0.0、version_name=1.0.0+20260805.v002,public key 派生 extension ID=oidmclckpdmpabbfedplkbdplmfcenbb。Cookie/session/header/private-key/signed-URL 与 synthetic sentinel 静态命中=0
  5. 历史候选 ZIP 虽因确定性内容与本次 ZIP 同哈希,历史 receipt=2165/4D90F74D7FE0DBDF197499AC48040733D1C4A885262C7B6734BC2A7F1284596F 和 schema 1 approval=2261/F54924D29A1390538C7BBB1BB30A5F2E2FC4A7AFB7F935E1184B8C6D91D22ED0 仍是 NOT_PUBLISHABLE_HISTORY,不得与本次新 receipt 混用或 fallback。
  6. 当前无 Web Store upload/publish 或 publication fact;reviewer-owned release approval 匹配实物=0。因此本结论只确认候选具备向独立外部上传授权门提交的静态准备条件,不构成上传、发布、安装或运行授权。

结论与边界

  • verdict=PASS/0
  • blocking_findings=0
  • release_gate_status=UPLOAD_READY_NOT_PUBLISHED_RELEASE_APPROVAL_ABSENT
  • accepted_zip=20072/96A7FA513EA136A63A15AC1654D4918F368B3D2CD195F381536C1A6B138D2E91
  • accepted_receipt=2165/441493BE0DC5B0AE19D4C4CAC14A93F12D9237AF6FD1FCDE654BD398698DCD7B
  • release_approval=ABSENT_NOT_CREATED_NOT_INFERRED
  • 本 PASS 不授权 Web Store upload/publish;任何上传/发布仍须 project.admin 的独立外部动作授权,发布完成后还须 exact Web Store ID/version/publication evidence 的同链复核,方可由 reviewer 另行创建 release approval。
  • policy/HKCU、install/enable、Chrome/Cookie/session、network/download、real media、F:\video、formal ana-data、transcription 与 runtime 继续冻结;本轮外部/真实动作=0
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001-TERMINAL

  • 记录时间:2026-08-13T13:10:00+08:00
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813114445612_ca976cf4;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V001-DESIGN-REVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计=24165/DA597448EFD47361779464B44BF92C8CDE9B4AC1769764EE0AF2301075C86045;code/test/fixture/formal data 均冻结。

Findings

  • verdict=HOLD/5
  • blocking_findings=5
  1. F1_EVIDENCE_NO_NEW_PROOF_NOT_DETERMINISTIC:no-new 依赖外部自报 coverage 布尔值,缺少可复算的 DOM/parser/逐页卡片/end-of-feed/limit 证明。须冻结 bounded page_observation,由 CLI 推导 coverage;任何上限、未推进或 marker 缺失均禁止 no-new,并补伪造/截断/空页反例。
  2. F2_REFRESH_PENDING_CRASH_RECOVERY_UNDEFINEDrefresh-begin 后、transaction.pending 前的崩溃没有 reopen 状态机,会让旧 pending 永久阻塞小时运行。须冻结 pre-transaction phase/ownership/deadline/evidence 恢复、durable run record、清理/保留、exit 与全点注入。
  3. F3_MIXED_HISTORY_CATALOG_CONTRACT_UNDERSPECIFIED:48 行 mixed history 的 token namespace/union、状态优先级、UID 缺失、身份冲突、artifact 校验和新 state event schema 未冻结。须基于现有 48 行给出 exact 分类、canonical dedupe/unique-entity 摘要及冲突反例。只读核验确认 16 个 SAVED 实物存在且哈希匹配。
  4. F4_DUAL_MANIFEST_COMMIT_HAS_LOST_UPDATE_RACES:state 前像在发布前未 compare,formal check 与 replace 间存在 TOCTOU。须冻结两份 exact candidate,并用共享跨进程锁或可证明 CAS 覆盖 compare-through-replace;任何漂移 fail/rebegin,补两进程竞争反例。
  5. F5_BOUNDED_RUN_EVIDENCE_NOT_ATOMIC_WITH_TERMINAL_RESULT:formal commit、receipt、latest/168-slot 与 pending cleanup 的顺序和恢复未冻结,同小时 collision/slot 失败可导致业务结果与唯一审计证据分离。须冻结 exact run schema、slot 规则和 reopen 矩阵;durable record 前不得返回终态,并补全点异常/同小时/replay。

Preserved contracts and boundary

  • supported Chrome exact URL、单次 navigate/reload、禁止 CDP/profile/Cookie/header/412 绕过;五终态总体优先级、discovery 非权威和两个真实样本解释方向正确。
  • 全文/原图/video metadata+cover、no-overwrite、secret/raw error fail-closed、失败不增长 formal manifest 可保留。
  • required_fixes 仅限 F1-F5;无需新增真实运行。产品 code/test/fixture、formal data、Chrome refresh、network retry、download/video、extension/policy/HKCU/secret 继续冻结。
  • 结论=V001_DESIGN_HELD_IMPLEMENTATION_REMAINS_FROZEN
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V003-TWO-BLOCKER-DESIGN-REREVIEW-20260813-001

  • 记录时间:2026-08-13T13:33:29.7178224+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审 V002 HOLD/2 的 observation 互斥计数与 stale formal-lock/StateLock kill-recovery;F3、F5及其余已通过合同不重开,产品实现继续冻结。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813132059812_a522ee8e;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V003-TWO-BLOCKER-DESIGN-REREVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 复算对象:V001=24165/DA597448EFD47361779464B44BF92C8CDE9B4AC1769764EE0AF2301075C86045;V002=22460/EC7E1D887FF930D7DA75F208975E17812E9D299606CD2A79B3E9BF14DE723A54;V003=11225/99F05DC30C374F93B527F688319B479651FA5D19909DDDDB8135066C552A7FC4
  • 冻结基线复算:code=60090/67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8B;config=1117/42A9AA7EE29ED061DC408C6C9A907FA7B20FD8C2B41605C54B6716A0FE388951;test=31303/D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;formal=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 lines

Findings

  • verdict=HOLD/1
  • blocking_findings=1

F2/F4-R2 — FORMAL_LOCK_TAKEOVER_NOT_RESTARTABLE_FOR_ALLOWED_PATHS_AND_RECOVERY_IDENTITY

V003 已把 formal lock 与 pending 精确绑定,并以进程死亡自动释放的稳定 StateLock 解开前序自闭锁;但接管提交仍有一个根因未闭环:其机械 quarantine 位于 state_dir/refresh/lock-recovery/,而被原子 rename 的主锁位于可独立配置的 archive_dir/.bili-dynamic-formal-manifest.lock。V001 未要求两根同卷,Windows 跨卷 rename 不能满足 V003 的 no-overwrite atomic rename,因此合法配置下步骤 2 不可实现。与此同时,TAKEOVER_PLANNED 在旧锁隔离前冻结“当前恢复进程”的 new claim;若该恢复进程在 phase 落盘后被 kill,下一进程按矩阵继续步骤 2/3 时可能写入已死亡或已被 PID reuse 的前一恢复者身份,造成虚假 busy、再次接管或无法证明当前 holder。

最小修复须同时冻结:

  1. quarantine 实物必须与 formal lock 位于同目录或可证明同卷的 owned 普通非 reparse 路径,保证 no-overwrite same-volume atomic rename;state_dir pending 只绑定该 exact quarantine path/bytes/hash,不把跨卷复制冒充原子隔离。补不同卷配置或等价 cross-device rename 反例。
  2. 未提交的 new claim 不得跨恢复进程沿用。可将 holder-dependent claim 延后到 OLD_LOCK_QUARANTINED 后由当前进程生成,或在 TAKEOVER_PLANNED 重开且旧锁仍在时先以 WAL 原子换绑当前进程身份,再隔离旧锁。补 kill-after-TAKEOVER_PLANNED、前一恢复 PID reuse、继续成功/安全停止与无重复 formal append 反例。

上述两点属于同一 stale-lock takeover 状态机根因;其余 owner-dead、PID creation time、generation、第三内容、双 recovery、terminal cleanup 门禁保持不变。

已关闭且冻结的原 finding

  • observation 互斥计数 CLOSED:V003 将 cards 严格限定为 complete card,将不完整节点置于 unparsed_nodescomplete_card_count=len(cards)unparsed_node_count=len(unparsed_nodes)visible_node_count 为二者之和,并要求 position 唯一、不相交且完整覆盖 [0, visible_node_count)。stable component/proof hash、50 节点上限及 unknown/incomplete/duplicate/limit 反例足以让 CLI 唯一复算,未再发现同边界阻断。

Preserved contracts and boundary

  • F3 mixed-history、F5 bounded hourly evidence 继续 CLOSED;V001+V002 已通过的 exact URL/一次刷新、五终态、no-new fail-closed、双 manifest candidate/前像比较、secret/raw-error、no-overwrite 和真实样本解释不重开。
  • required_fixes 仅限上述 F2/F4-R2;无需真实运行或新增产品范围。
  • 产品 code/test/fixture、formal data、Chrome refresh、network retry、download/video、extension/policy/HKCU/session secret 继续冻结。
  • 结论=V003_TWO_POINT_DESIGN_REREVIEW_HELD_1_IMPLEMENTATION_REMAINS_FROZEN
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V004-FINAL-LOCK-DESIGN-REREVIEW-20260813-001

  • 记录时间:2026-08-13T13:56:40.4975911+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审 V003 HOLD/1 的 formal-lock quarantine volume 与 TAKEOVER_PLANNED holder identity;其余 findings 与已通过合同不重开,产品实现保持冻结。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813135410147_cab50254;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V004-FINAL-LOCK-DESIGN-REREVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 复算对象:V003=11225/99F05DC30C374F93B527F688319B479651FA5D19909DDDDB8135066C552A7FC4;V004=6285/7B6198D74C90915E6DD36E4C12554FC5F9094A2B58D0230E6D76F0B844E7CCD5;V004 strict UTF-8/no BOM/no CR/no NUL=PASS
  • 冻结基线复算:code=60090/67B2E6FB34F100C57BF50A4D3067D6FDD6E47C5D3FBEF58D2CF5D8796B07AB8B;config=1117/42A9AA7EE29ED061DC408C6C9A907FA7B20FD8C2B41605C54B6716A0FE388951;test=31303/D82BFF8AD9B78FD749A7536FF9FED0486CF87D6B9FDDEE7947202C2414AAE322;fixture=1216/0CD53C7C93D7E05B4A913EBF5223366E3A06A17E2474DF52BC64F0BB4EBEA71F;formal=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 lines

Findings

  • verdict=PASS/0
  • blocking_findings=0
  1. F2/F4-R2 quarantine volume 已闭环:formal lock 与所有 quarantine 实物由同一已验证 archive_dir 父目录机械派生;lexical/reparse、owned marker、no-overwrite atomic rename、volume serial/device identity 和 cross-device fail-closed 门禁明确。state_dir 只持久化 exact relative path/bytes/hash/目录 identity,不再保存或 fallback 跨卷 quarantine;分离 state/archive root、不同 volume/EXDEV、第三目标及 rename 前后 kill 反例足以验证。
  2. F2/F4-R2 holder identity 已闭环:TAKEOVER_PLANNED 只保存 old claim、quarantine、next generation 等 holder-independent intent;只有 OLD_LOCK_QUARANTINED durable 后才由当前恢复进程生成 CREATE_PLANNED claim。恢复进程死亡时须证明旧 planned holder dead/PID reuse并以 WAL 换绑当前身份,claim_attempt 单调记录全部失败隔离历史;不会把前一恢复进程 PID/creation time 写成当前 holder。
  3. reopen 矩阵覆盖 TAKEOVER_PLANNEDOLD_LOCK_QUARANTINEDCREATE_PLANNEDNEW_LOCK_HELD 的主锁/quarantine 唯一组合;活 holder busy、PID reuse/第三内容/异 run ambiguous、双 recovery 仅 StateLock winner、formal append 最多一次均保持 fail-closed。

Preserved contracts and boundary

  • V003 observation 互斥计数及 V002 已关闭的 F3/F5 继续 CLOSED;V001—V003 其余 exact URL/一次刷新、五终态、no-new、pending WAL、双 candidate/前像、secret/raw-error、no-overwrite 合同不重开。
  • 未发现 V004 限定范围内剩余阻断;允许按 V001+V002+V003+V004 组合合同开始最小实现及离线测试,之后仍须提交独立实现审核。
  • 本 PASS 不授权 Chrome refresh、真实 network/download/video、formal data write、extension/policy/HKCU/session secret 或真实 smoke;这些动作继续冻结。
  • 结论=V004_FINAL_LOCK_DESIGN_PASS_IMPLEMENTATION_AUTHORIZED_OFFLINE_ONLY
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-IMPLEMENTATION-REVIEW-20260813-001

  • 记录时间:2026-08-13T17:38:09.9849672+08:00
  • 审核阶段:同一 task/reviewer 链内,按已通过的 V001+V002+V003+V004 组合合同进行独立离线实现审核;未触发 Chrome、网络、下载、session/Cookie、formal ana-data 写入、F:\video、媒体或转写。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813170207391_e004c3a4;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-IMPLEMENTATION-REVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结工件已复算匹配:collector=70562/EAA7FEA89BAB8A21766544A883C4B6DFE132B31183E9F5112B74AEFB86DB6D4C;refresh=70902/66FC55C3D5321DE11598A0A8428F07AD780D0AFDE509BAC9F7D30C91B2E1493D;observation contract=757/230E4F32766E8986805BE24272E1D893644D77936ED59A1919AB8A4F77B8F869;extractor=795/489052F4C4DBD831962A9B67D0FC5EE3D4D9C9C2C7130415B6CD37F2F096B2E6;config=1636/1E256CF760A9D66C44E229AE5EBD31BACD37F80AB6E73412DCCE6F612D95B9A7;old tests=31468/AD3C93B36B659E6646AE1834071257D35150E6CE768DA40D07E59FC791724156;refresh tests=20301/F181D020A3B38FC4E8E73622000A0A22D73C3F0475DCBC41B4C3410D6C99D0B1
  • 独立离线验证:py_compile=PASS;目标 unittest=22/22 PASS / 4.164s;五个 CLI command help 存在;formal manifest 审核前后均为 51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 lines,未写入。

Findings

  • verdict=HOLD/4
  • blocking_findings=4
  1. F1_OBSERVATION_ITEMS_NOT_BOUND_NO_NEW_FALSE_POSITIVE_validate_observations 只从 page_observation.cards 推导 coverage,而 _plan_content 独立遍历 evidence.items;实现未证明二者按 stable-key component 一一对应、无缺失/额外/字段漂移。独立入口反例以一张新的完整 card、exact end marker、items=[] 提交,实际返回 exit=0/status=REFRESH_CONFIRMED_NO_NEW/coverage_complete=true,违反“observed components 相对 catalog 无可保存新增”硬门。最小修复:在任何 no-new/事务判断前,从 cards 与 normalized items 重算并强制 exact component/identity/content/published/source 对应;缺项、额外项、错配只能 partial/schema failure,补 missing/extra/mismatch 公共 CLI 反例。
  2. F2_MIXED_HISTORY_CATALOG_FAIL_OPENload_formal_catalog 以每行首 token 直接计数,没有实现 V002 冻结的跨行 union-find、namespace/content-video/URL-stable 冲突、状态优先级;schema2 分支仅检查 dedupe_keys 排序。独立反例中 schema2 事件具有错误 entity_id、unknown status 与不存在 artifact,仍被接受为 saved component。schema1 的完整类型、URL身份及 artifact路径门也未全部实现。最小修复:实现 deterministic union/conflict 与 22/16/5/1 的组件级状态归并;schema1/2 全字段、UID、entity_id、dedupe、status/event、artifact relative/reparse/bytes/hash fail-closed,并补 V002 已冻结的全部 mixed-history 负例。
  3. F3_PENDING_SLOT_LATEST_RECEIPT_RECOVERY_CONTRACT_INCOMPLETE:hourly evidence 未按 V002 落地。latest.json 被写成完整 slot 副本,而非 exact 八字段可重建索引;no-formal-change terminal 的 transaction_receipt 实际为 null,而非 NO_FORMAL_CHANGE receipt;slot/latest 写后未完整回读校验,TERMINAL_RECORDED reopen 不核/补 latest,EVIDENCE_BOUND reopen 未实现,cleanup warning 语义缺失。独立 no-new 入口实物确认 latest 含完整 slot keys 且 receipt=null。最小修复:按冻结 schema/commit point/reopen matrix 实现 STARTED、planned terminal、slot readback、八字段 latest、NO_FORMAL_CHANGE/业务 receipt、cleanup warning,并补普通异常、KeyboardInterrupt/SystemExit、真实子进程 kill 的全持久化点矩阵。
  4. F4_FORMAL_LOCK_V004_KILL_RECOVERY_NOT_IMPLEMENTED:V004 的 CREATE_PLANNED holder 换绑和 quarantine 合同未落地。当前 _recovery_formal_lockCREATE_PLANNED + main absent + old quarantine exact + planned holder dead 时直接 E_RECOVERY_AMBIGUOUS,独立临时反例已复现;main 为 exact dead planned claim 时也不隔离失败 attempt 后换绑。quarantine 目录无 owner marker/fsync 证明,测试仅覆盖一次普通 dead-lock takeover,未覆盖 V004 全点 kill/reopen。最小修复:落实 holder-independent TAKEOVER_PLANNEDOLD_LOCK_QUARANTINED 后 current identity claim、dead/PID-reuse planned holder 的 claim_attempt 换绑与同目录失败隔离、owned marker/no-overwrite/fsync/cleanup;补 V004 明列的全 phase kill、双 recovery、cross-volume/reparse/第三内容反例。

Preserved contracts and boundary

  • 现有 22 项目标测试、原 check/move-completed/handoff 回归、互斥 observation node 计数、StateLock 基本内核互斥、正式 48 行只读摘要与 formal manifest 未变均确认;这些通过项不能覆盖上述非真空反例。
  • required_fixes 仅限 F1-F4,须以最小代码/离线测试/证据闭环;不要求也不授权真实 Chrome、网络、下载、formal write、F:\video、媒体或转写重跑。
  • 产品在实现审核通过前不得用于正式 hourly refresh/no-new 认定;现冻结快照可继续作为离线开发基线,不得声称 formal collector 已验收。
  • 结论=IMPLEMENTATION_HELD_4_OFFLINE_REPAIR_REQUIRED
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD4-FOCUSED-IMPLEMENTATION-REREVIEW-20260813-001

  • 记录时间:2026-08-13T20:41:14.6508278+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审首次实现 HOLD/4 的 F1—F4 修复;已通过合同与其余边界不重开。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813191657480_b3ae7ca9;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD4-FOCUSED-IMPLEMENTATION-REREVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结工件独立复算匹配:refresh=95237/84DFC57CC2B00E19F7594137E7766DDC2D4E0D2026323362601ACE282E20465D;entrypoint=70562/EAA7FEA89BAB8A21766544A883C4B6DFE132B31183E9F5112B74AEFB86DB6D4C;refresh tests=35296/A98D1D473656FF91AB399AEB559991CB862E22542F7383CDD0539E10D46A6EB0;collector tests=31468/AD3C93B36B659E6646AE1834071257D35150E6CE768DA40D07E59FC791724156;machine evidence=3203/8D26DAEB10C62D2FBC8EC12BF994F21742A0EBC61ECD73769D998E042386B37B
  • 独立离线复验:py_compile=PASS;目标 unittest=30/30 PASS / 5.356s。以下结论还基于临时目录公共入口/内部恢复入口的非真空反例与逐分支源码核验;未运行 Chrome、网络、下载或正式写入。
  • 正式 manifest 审核前后均为 ana-data/news-青枫浦上Q/manifest.jsonl|51598|0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73|48 lines,零改写。

Findings

  • verdict=HOLD/3
  • blocking_findings=3
  1. F2_CATALOG_EXACT_SCALAR_TYPE_AND_ID_LENGTH_FAIL_OPEN:F2 主体 union/conflict/precedence 与 artifact 身份已落地,但冻结的严格标量合同仍可被绕过。schema2 以 str(event["creator_uid"]) 比较 UID,导致整数 1420210197 被当作 exact string 接受;schema1 的数字 stable_id 只检查 isdecimal(),未限制 V002 冻结的 1..32 位,33 位 ID 仍进入 catalog。独立临时 formal 反例均被实际接受。最小修复:schema2 UID 必须先验证为 exact string;schema1 opus stable_id 必须为 1—32 位 ASCII 数字,并补两条公共入口 fail-closed 反例及 manifest 零改写断言。
  2. F3_PENDING_SLOT_EXACT_RECOVERY_STILL_FAIL_OPEN:八键 latest、receipt 和普通 terminal replay 已闭环,但完整 reopen matrix 仍未实现。refresh-begin 先 CreateNew pending,再用 replace 写 STARTED slot;若在二者之间崩溃,AWAITING_EVIDENCE reopen 只返回 E_BUSY,不会按 V002 重建同 run STARTED。_terminal 又会无条件 replace 当前 hour slot,故第三内容可被 terminal 覆盖;TERMINAL_RECORDED 只核 run_state/run_id/receipt is Mapping,未对 exact terminal schema、planned terminal、slot bytes/hash/receipt 身份作完整一致性验证。独立反例已分别复现“pending存在而 STARTED 缺失不重建”和“第三 slot 被终态覆盖”。最小修复:把 STARTED 写后回读及 reopen 重建纳入 WAL;任何非 exact same-run STARTED/TERMINAL slot 必须 E_RECOVERY_AMBIGUOUS 且零修改;terminal 写前验证当前 slot 只能是 exact same-run STARTED/允许的 exact replay,补 crash/third-content/tampered-terminal 非真空矩阵。
  3. F4_QUARANTINE_TAKEOVER_WAL_NOT_CRASH_DURABLE:基础 dead/PID-reuse CREATE_PLANNED 换绑正例已通过,但 V003+V004 的全点 kill/no-overwrite/fsync/cleanup 合同未落地。_rebind_takeover_claim 在把 exact stale main lock os.rename 到 failed quarantine 后,才把 failed identity 与新 claim 写入 pending;该窗口被 kill 会留下 pending 未记录的第三实物。rename 仍是“exists 检查 + os.rename”,没有 no-overwrite 原语或目录 fsync;quarantine 新建/marker/rename 后也无父目录 fsync,pending 保存 absolute path 而非冻结的 relative path+directory identity。另 _release_formal_lock 在 main lock 已缺失时直接 return,不能恢复“主锁已删、quarantine 尚未清”的 cleanup 崩溃点。最小修复:在每次隔离前先 durable 记录 exact relative target/目录 identity/attempt intent,采用同父目录 no-overwrite rename、源/目标目录 fsync+readback,再推进 phase;release 依据 pending 即使 main 已缺失也须验证并清理 exact quarantine/failed claims,歧义只报 warning/stop 而不丢 WAL;补 V004 明列的每一持久化点真实子进程 kill、existing target、第三内容及 cleanup-reopen 反例。

Closed and preserved

  • F1 observation/cards/items exact 双向 binding 已通过缺项、额外项、字段漂移、重复及 token overlap 非真空反例,本轮 CLOSED
  • F2 已实现的 union/conflict/precedence/artifact、F3 已实现的 receipt/latest 基本路径、F4 的基础 current-identity 换绑,以及既有 CLI、五终态、secret、formal source protection 等通过部分继续冻结;不得用这些通过项覆盖上述三个反例。
  • required_fixes 仅限 F2/F3/F4 的上述根因;不要求也不授权真实 Chrome、网络、下载、formal write、F:\video、Cookie/session、extension/HKCU、媒体或转写重跑。
  • 当前快照可作为隔离开发基线,但不得用于正式 hourly refresh/no-new 认定或宣称验收。
  • 结论=HOLD3_F1_CLOSED_F2_F3_F4_MINIMAL_OFFLINE_REPAIR_REQUIRED
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD3-F2-F4-IMPLEMENTATION-REREVIEW-20260814-001

  • 记录时间:2026-08-14T00:27:06.9553096+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审前序 HOLD/3 的 F2—F4 修复;F1 与其余 passed/frozen contracts 不重开。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260813230457007_d6f2e150;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD3-F2-F4-IMPLEMENTATION-REREVIEW-20260813-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结工件独立复算匹配:refresh=108102/579D743E141394727A5916D4A3DC12B6FEE648424A02176025FB6246BBF11609;entrypoint=70562/EAA7FEA89BAB8A21766544A883C4B6DFE132B31183E9F5112B74AEFB86DB6D4C;refresh tests=42589/59CBE3E6F44EFDDA882B01787C6533F422E4C65DC9CF15E478DDDD6D05AE35E3;collector tests=31468/AD3C93B36B659E6646AE1834071257D35150E6CE768DA40D07E59FC791724156;machine evidence=3033/7389A17107D20C383BCC5C59DC325B8440F005D4D57DC9FE2DA511504835E40B
  • 独立离线复验:目标 unittest=34/34 PASS / 6.284s;另对 F2 strict scalar、F3 pending/terminal third-content、F4 takeover/no-overwrite/cleanup 六项冻结反例复跑=6/6 PASS / 0.686s。未运行 Chrome、网络、下载、正式写入、F:\video、Cookie/session、扩展/HKCU、媒体或转写。
  • 正式 manifest 审核前后均为 ana-data/news-青枫浦上Q/manifest.jsonl|51598|0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73|48 lines,零改写。

Findings

  • verdict=HOLD/1
  • blocking_findings=1
  1. F4_NEW_FORMAL_CLAIM_CREATE_NOT_READBACK_OR_DIRECTORY_DURABLE:F2 strict scalar 与 F3 exact slot/replay 已按冻结反例关闭;F4 的隔离 intent、no-overwrite rename、relative/directory binding 与 main-missing cleanup 也已落地,但 V003+V004 冻结的 CreateNew 持久化点仍未闭环。_recovery_formal_lock_rebind_takeover_claim_create_new(path, payload) 返回后,未对新 formal lock 做 lexical lstat、exact bytes/hash 回读,也未 fsync 父目录,即把 claim 推进为 HELD、takeover 推进为 NEW_LOCK_HELD 并持久化 pending。独立非真空反例在第二次 formal CreateNew 返回后把实物改为第三字节串;恢复入口仍持久化 claim_state=HELDtakeover_phase=NEW_LOCK_HELD,而实际 SHA-256=8BF4BA49514F86E5747155134DB581C3D65C20E69427EFFB219313519A3FD131 与 claim 期望 SHA-256=4990D0C9E5AF0C044B4F97FECE1CB8293E62F685992B32117ACAA55C6D059A0A 不同。现有测试覆盖同进程普通异常,但未覆盖 V004 明列的 CreateNew/NEW_LOCK_HELD 真实子进程 kill 与写后身份漂移,不能证明崩溃后已宣告持锁的实物可信。

Required fix and preserved boundary

  • 仅修 F4:把所有 formal-lock CreateNew 分支统一收敛为“CreateNew + 文件 flush/fsync + lexical lstat + exact bytes/hash 回读 + 父目录 fsync”成功后,才允许 HELD/NEW_LOCK_HELD;任一步失败必须保留可重放的 CREATE_PLANNED,不得宣告持锁成功。
  • 补公共恢复入口的写后字节漂移/回读失败/父目录 fsync 失败反例,并补 V004 冻结的 CreateNew 与 NEW_LOCK_HELD 真子进程 kill-reopen 非真空矩阵;断言第三内容零覆盖、formal manifest 零改写、同 run 可精确恢复或 fail closed。
  • F2、F3 本轮 CLOSED;F4 已通过的 intent/no-overwrite/binding/cleanup 部分继续冻结,不得扩审或回退。
  • 当前快照仍仅可作为隔离开发基线,不得用于正式 hourly refresh/no-new 落盘。生产页面发现新增内容不改变该安全门槛;在实现复审 PASS 前不得执行正式 collector 写入。
  • 不要求也不授权真实 Chrome、网络、下载、formal write、F:\video、Cookie/session、extension/HKCU、媒体或转写重跑。
  • 结论=HOLD1_F2_F3_CLOSED_F4_CREATE_DURABILITY_REPAIR_REQUIRED
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD1-F4-DURABLE-CREATE-REREVIEW-20260814-001

  • 记录时间:2026-08-14T01:55:34.1872079+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审前序 HOLD/1F4_NEW_FORMAL_CLAIM_CREATE_NOT_READBACK_OR_DIRECTORY_DURABLE;F2、F3 与其余 passed/frozen contracts 不重开。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260814014710681_441dd970;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-HOLD1-F4-DURABLE-CREATE-REREVIEW-20260814-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 冻结工件独立复算匹配:refresh=109597/5C813E3023319A4DEB38AC7213135D52F7DB3E137D9306F642A94941AF8011BD;refresh tests=53314/5895C8409DF753C67A3E1429FF50048F7BE7850CABC63B13EBA42A55CBE85E10;entrypoint=70562/EAA7FEA89BAB8A21766544A883C4B6DFE132B31183E9F5112B74AEFB86DB6D4C;collector tests=31468/AD3C93B36B659E6646AE1834071257D35150E6CE768DA40D07E59FC791724156;implementation evidence=13570/1F2236337280E2CAA4919DED9C42FD80F131E4DFE983031C91BB893F9381EDEF;machine evidence=2766/74DE6928B8231E5BC6A4531E6874D5C24370131E1E63C0A5A5BF40F0C787E84B
  • 实现核验:所有 formal-lock CreateNew/重开分支均通过 _durable_formal_lock_claim;顺序为文件 CreateNew+flush/fsync、lexical lstat、exact bytes/length/SHA-256 回读、父目录 fsync、持久化后再次 exact 回读,全部完成后才允许 claim=HELD / takeover=NEW_LOCK_HELD 并写 pending。读取、身份或目录持久化失败均不会提前晋升;已存在 exact PLANNED claim 可在 reopen 时重验并完成晋升,第三内容 fail closed 且不覆盖。
  • 独立离线复验:聚焦 drift/readback/fsync 与真实子进程 CreateNew/NEW_LOCK_HELD kill-reopen=2/2 PASS / 1.675s;collector+refresh 全目标=36/36 PASS / 8.913spy_compile=PASS;CLI help=PASS;governance=OK/projects1/warnings0
  • 正式 manifest 审核前后均为 ana-data/news-青枫浦上Q/manifest.jsonl|51598|0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73|48 lines,零改写。

Findings

  • verdict=PASS/0
  • blocking_findings=0
  • 前序唯一阻断 F4_NEW_FORMAL_CLAIM_CREATE_NOT_READBACK_OR_DIRECTORY_DURABLE 已关闭;未发现本限定范围内剩余阻断。

Boundary and disposition

  • F2、F3 保持 CLOSED;F4 前序通过的 intent/no-overwrite/binding/cleanup 合同未回退。V001+V002+V003+V004 的离线实现审核现已通过。
  • 交付结论=OFFLINE_IMPLEMENTATION_ACCEPTED。本 PASS 只确认离线协调器、恢复语义与正式 manifest 零改写证据;不自动授权真实 Chrome 刷新、网络、下载或正式内容写入。
  • 后续真实页面读取与正式落盘仍须由请求方/项目管理员按既有独立生产边界显式调度,并保留 exact UID、五终态、coverage/no-new 与事务门禁;不得因页面已发现新增内容绕过门禁。
  • 本次未运行 Chrome、网络、下载、formal write、F:\video、Cookie/session、extension/HKCU、媒体或转写。
  • 结论=PASS0_F4_DURABLE_CREATE_CLOSED_OFFLINE_IMPLEMENTATION_ACCEPTED
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-RUNTIME-TIMEOUT-DESIGN-REVIEW-20260814-001

  • 记录时间:2026-08-14T04:58:49.8735583+08:00
  • 审核阶段:同一 task/reviewer 链内,仅审核 V005 对 supported Chrome control→visible page read 超时合同的增量;V001—V004、F2/F3/F4、UID、五终态、coverage/no-new、catalog、事务、slot 与 formal-lock 合同不重开,产品实现保持冻结。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260814044901141_9ff484b0;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-RUNTIME-TIMEOUT-DESIGN-20260814-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计工件独立复算匹配:V005=10479/D455D070B78C6DE815ECBDF80A42C5FA359B9B8B372052E1FD37B1B63A2DC118,strict UTF-8=PASS、BOM=NO、trailing whitespace=0;只读诊断=2454/3144C2DE317457994C25D348E27486776CD3103E43FBEE6055D1C5C09ACC6E2E;冻结 product=109597/5C813E3023319A4DEB38AC7213135D52F7DB3E137D9306F642A94941AF8011BD;冻结 tests=53314/5895C8409DF753C67A3E1429FF50048F7BE7850CABC63B13EBA42A55CBE85E10;governance=OK/projects1/warnings0
  • 诊断证据支持“冻结 15s/8s 小于当前约 21.3s 受支持控制路径延迟”的边界结论;未把内部遥测实现过度认定为唯一根因。018/019/020 旧槽保持不可变,正式 manifest 仍为 51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 lines

Findings

  • verdict=HOLD/1
  • blocking_findings=1
  1. F1_ACTION_ERROR_COUNT_AND_TERMINAL_PROJECTION_UNDEFINED:V005 冻结了 refresh_action_outcome=CONFIRMED|TIMEOUT|ERROR,但第 3.3 节矩阵只定义 confirmed、timeout 与 observation timeout/access 的投影,没有定义 action=ERROR 且 observation=READABLE 时新完整条目能否保存、无新增时应为 PARTIAL_DISCOVERY_UNCONFIRMED 还是 REFRESH_FAILED_PAGE_UNREADABLE,也没有明确在 action 调用已发出但同步报错、调用前校验失败两种情形中 refresh_count 是否均必须为 1。与此同时第 4 节又要求 refresh_count 只能为 1,导致“动作未发出即失败”无法诚实编码,“动作已发出但返回 ERROR”也缺少唯一终态。该缺口会让相同 runtime evidence 在实现中产生不同业务保存/终态,直接影响 formal write 安全与五终态确定性。

Required fix and preserved boundary

  • 仅修 V005 runtime 增量:冻结 refresh_action_outcome=ERROR 的两类精确语义——动作调用前失败与动作调用已发出后失败;为每类固定 refresh_count、是否允许一次 observation、可读新条目保存资格、无新增/coverage 的唯一终态及 no-new=false 门禁。若设计决定不支持 action=ERROR,则从 schema allowlist 删除并统一映射为既有 timeout/unreadable/access 的唯一合同。
  • evidence 的 refresh_count 应表达实际已发出的 action 次数,并与 pending 上限分离;若允许动作前失败,应允许 count=0 且禁止任何 no-new/正式保存,或明确由 controller 在 evidence 形成前直接终结 unreadable。补 action-before-dispatch error、action-after-dispatch error × READABLE-new/READABLE-empty/observation-error 的离线矩阵。
  • 已通过且继续冻结:单 action/单 observation、35/45/15/120 预算、同一单调总 deadline、零重试、action timeout 后不 no-new、schema2 历史只恢复、旧槽不可改判、秘密与禁止控制面边界。
  • 实现仍冻结;本 HOLD 不授权 Chrome、reload/goto、network、download、formal write、F:\video、Cookie/session、Raw CDP、媒体或转写。
  • 结论=V005_RUNTIME_TIMEOUT_DESIGN_HOLD1_ACTION_ERROR_SEMANTICS_REQUIRED
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V006-F1-RUNTIME-ERROR-DESIGN-REREVIEW-20260814-001

  • 记录时间:2026-08-14T05:10:59.4664278+08:00
  • 审核阶段:同一 task/reviewer 链内,仅复审 V005 HOLD/1F1_ACTION_ERROR_COUNT_AND_TERMINAL_PROJECTION_UNDEFINED;V005 已通过合同、V001—V004 与前序实现合同不重开,implementation 继续冻结。
  • task_id=DEV-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-20260813-001
  • requirement_id=REQ-BILI-DYNAMIC-COLLECTOR-20260804-001
  • MB-X 消息=msg_20260814050803015_18ed4f02;handoff=HANDOFF-INFODEV2-INFOREV-BILI-DYNAMIC-REFRESH-COLLECTOR-V006-F1-RUNTIME-ERROR-DESIGN-20260814-001;reply task=019fbcbb-bed7-7c90-83ab-f50610f80d3a
  • 设计工件独立复算匹配:V005=10479/D455D070B78C6DE815ECBDF80A42C5FA359B9B8B372052E1FD37B1B63A2DC118;V006=5204/4E2455708FC0C60BBBFD16CE60A0F335E237E63F7575FBCE10E07E308C172A84,strict UTF-8=PASS、BOM=NO、trailing whitespace=0;冻结 product=109597/5C813E3023319A4DEB38AC7213135D52F7DB3E137D9306F642A94941AF8011BD;冻结 tests=53314/5895C8409DF753C67A3E1429FF50048F7BE7850CABC63B13EBA42A55CBE85E10;governance=OK/projects1/warnings0
  • 正式 manifest 复核为 ana-data/news-青枫浦上Q/manifest.jsonl|51598|0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73|48 lines,未修改。

Findings

  • verdict=PASS/0
  • blocking_findings=0
  • 前序唯一阻断 F1_ACTION_ERROR_COUNT_AND_TERMINAL_PROJECTION_UNDEFINED 已关闭;未发现本限定范围内剩余阻断。

Closure and preserved boundary

  • V006 删除笼统 ERROR,精确拆分 PRE_DISPATCH_ERRORPOST_DISPATCH_ERROR,并由 controller dispatch 状态绑定,不允许 evidence 调用者单独自报。
  • PRE 固定 refresh_count=0/observation_count=0/elapsed=0/NOT_ATTEMPTED,零保存、no-new/coverage=false、唯一 unreadable;POST 固定 refresh_count=1、零重试,deadline 尚存时最多一次 observation:可读新完整条目可保存但 no-new/coverage=false,可读空/旧为 partial,read error 为 unreadable,access/identity mismatch 为 blocked;deadline 耗尽时固定 1/0 + DEADLINE_EXHAUSTED + unreadable
  • evidence 实际计数与 pending 最大上限已分离;outcome/count/elapsed/observation/terminal 不一致均在 manifests/slot 修改前 E_EVIDENCE_SCHEMA。离线矩阵覆盖 PRE/POST × readable-new/readable-empty/observation-error、deadline exhausted、第二 action/observation 与非法旧 ERROR
  • V005 已通过的单 action/单 observation、35/45/15/120 秒单调预算、retry0、timeout 不得证明 no-new、schema2 历史恢复、018/019/020 不可变、秘密/控制面边界继续冻结。
  • 结论=V005_V006_RUNTIME_TIMEOUT_DESIGN_PASS_IMPLEMENTATION_AUTHORIZED_OFFLINE_ONLY。只授权按 V005+V006 实现、离线/合成测试及后续限定实现审核;不授权真实 Chrome、reload/goto、network、formal write、Cookie/session、Raw CDP、download、media、F:\video 或 transcription。
  • Open questions:无。

DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-TERMINALIZATION-SUCCESSOR-20260814-001

  • canonical_findings_reference=DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-20260814-001
  • prior_terminalization_reference=DEV-AUDIT-PROJECT-INFO-BILI-DYNAMIC-REFRESH-COLLECTOR-V005-V006-RUNTIME-LIMITED-IMPLEMENTATION-REVIEW-TERMINALIZATION-20260814-001
  • verdict=HOLD/5
  • blocking_findings=5
  • F1=TRUSTED_RUNTIME_CONTROLLER_AND_DISPATCH_ENVELOPE_MISSING
  • F2=SOURCE_CONTROLLED_EXTRACTOR_CANNOT_PRODUCE_ACCEPTED_EVIDENCE
  • F3=OVERALL_DEADLINE_NOT_ENFORCED_AT_COMMIT
  • F4=LEGACY_SCHEMA2_PENDING_CAN_REISSUE_BROWSER_ACTION
  • F5=IDENTITY_MISMATCH_NOT_PROJECTED_TO_FROZEN_BLOCKED_TERMINAL
  • formal_manifest=51598/0E69AF2AF1C4B0014D2033A21F3986E283ECFD758EA652E7F2416006736C8D73/48 unchanged
  • code_and_formal=FROZEN_UNCHANGED
  • disposition=SAME_CHAIN_MINIMAL_OFFLINE_REPAIR_REQUIRED