| | |
| | | - 审计状态:`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_001` 与 `slide_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..38`,`35/37=0.946` 密度、`35/53=0.660` 全局占比;由区间保留旧 `slide_003`、`slide_009` 两个单页主题偏离,同时排除旧 `slide_001` 与 `slide_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. `PASS`:`select_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_feature` 和 `select_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 / 9C4F57ED56B01C9EE2BD68CDC532BC865F73EB3662E01B6600410C5660F1F605`;`dev/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`。 |
| | | - 实现授权:`DENIED`。`dev.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/9C4F57ED56B01C9EE2BD68CDC532BC865F73EB3662E01B6600410C5660F1F605`;`transcribe_media.py=20996/309166EEFE11A74472EA355CA4AF87F9432A15393B9ABE6D69F7F1054055DE35`;对应测试=`35037/63298A48F4F7944514301D0BC0AC619C58464651ABF8F53C23E15E85565106FA` 与 `17227/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.0` 且 `window_count>0`;密度不足或零窗口不能空通过。连续 `>=85.0` 按实际区间累计,`>=10.000 s` 即失败,不再用固定 20 行近似。 |
| | | 7. `PASS / F3 evidence`:逐窗成员/覆盖/最大间隔/加权 CPU、最差窗口以及高 CPU 段起止/时长均固定落盘;合成 CSV 覆盖 `<85`、`==85`、`9.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/9AD12F95C0615034B1BB9C72F79DFC5F1150DE33E2DD8889CFF14534509BB41A`;`transcribe_media.py=25087/E889D78DEEEFBC061CD0F952157C83997704CD46AF833AAF452293B7434D96FD`。 |
| | | - 测试/采样器:`test_extract_ppt_slides.py=55492/C18A2ACB79A4C74E5D93184723E17E4C13683CA52B0CD86B2AD47AFB6DD75CEA`;`test_transcribe_media.py=19507/1C58C4C9ED45A1276A7CFF4D7E376F133446F506CB1A4890D231D00A229B82AC`;`monitor_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=`NO`;`mbx 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_cuvid`、`hevc -> 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 2` 与 `hwdownload`;因此日志文本存在但实际命令不满足合同时仍可假 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/==85`、`9.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/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30A`;`transcribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8F`;`test_extract_ppt_slides.py=65196/50FCDCE8FF75711CF75599D9207C376DE8575C8EF193B9F81CC0F5B50CF02A4E`;`test_transcribe_media.py=23080/1BD0D8B1392BD69F72CBCE1A279BBEF2B36B813E03147E298D366FEBC4524E95`;`monitor_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/55`、`62/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_pids`、`ffmpeg_command_lines` 和 `nvidia_smi_compute_task_rows`,但 `Analyze-ResourceSamples` 的 `$RequiredColumns` 没有这三列;删除任一列仍不会产生 `required_column_missing_*`。 |
| | | - 现有缺列反例只删除 `gpu_query_raw_rows`,不能证明上述冻结列的 schema 门禁。实际 Run 生成器目前会写这些列,但验收分析器仍允许证据包被删列后继续判有效,故“缺列即无效”没有闭环。 |
| | | - `required_fix`:把 `task_pids`、`ffmpeg_command_lines`、`nvidia_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_cuvid`,`pix_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/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30A`;`transcribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8F`;`test_transcribe_media.py=23080/1BD0D8B1392BD69F72CBCE1A279BBEF2B36B813E03147E298D366FEBC4524E95`;`本地视频语音转写工具.md=6788/286F3395ADA8FCEC3DDA04185929D99A773E4A1B7250508254B2F645647804E5`,均与前序冻结哈希一致。 |
| | | - 本轮实物:`test_extract_ppt_slides.py=72307/425F4C5D2C00F2E7260343CD961DCE0DC635184AE93F79446D12A8D4D489B06C`;`monitor_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_pids`、`ffmpeg_command_lines`、`nvidia_smi_compute_task_rows` 已进入 `$RequiredColumns` 和扫描阶段非空门禁,四类缺列反例齐备。 |
| | | - 独立基础检查:py_compile=`PASS`;PowerShell parser=`PASS`;`mbx 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.exe`;`scan_ffmpeg_pid` 全部为空,`scan_phase_active` 全部为 false,`run_summary` 为 `scan_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/E5909D0E3A3DEA875755E054EB10F78A530A54D08946C6DFE18AFFA52E429DF2`;`test_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/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30A`;`transcribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8F`;`test_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.963s`;`py_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_UNDEFINED`:`refresh-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_complete`、`parsed_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_count` 与 `unparsed_node_count`,并规定 `visible_node_count=len(cards)+unparsed_node_count`、`complete_card_count=count(cards.parse_complete=true)`;或者明确 incomplete card 不进入 cards 并为每个 unparsed node 保存 bounded、无秘密、不可冒充身份的 ordinal/hash。同步修正 `parsed_card_count`、`parser_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-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,离线实现无法独立证明“已覆盖窗口且没有新增”。这也是 `no-new` 权威门,不能只靠 controller 自报。 |
| | | |
| | | 最小修复:冻结一个 bounded、无秘密、可重算的 `page_observation`/coverage-proof schema(包含 extractor contract version/hash、每次观察的 ordinal/visible-card stable IDs 或其 canonical hash、终止原因与 exact end-of-feed marker、observed/parsed/unparsed/limit counts);CLI 根据该证据自行推导 coverage booleans。明确任何 item/image/text/scroll/page/time 上限命中、重复页未推进、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 前退出,既无 transaction intent,也没有能够清理/终结 durable pending 的状态机;后续小时 begin 只能“先按第 11 节恢复”,实际没有适用分支,会永久被旧 pending 阻塞。五种业务终态也无法覆盖这条真实崩溃路径。 |
| | | |
| | | 最小修复:冻结 pre-transaction pending 的 phase/ownership/deadline/evidence identity 与 reopen 状态机。对过期且无有效 evidence、有效失败 evidence、有效 commit evidence、未知/篡改/未来 deadline 分别规定唯一终态、run-slot 写入、pending 清理/保留和 exit;相同 run 重放必须幂等。覆盖 begin 后立即中断、Chrome timeout/EOF、evidence 写一半/完整但 commit 未启动、下一小时恢复的公共入口故障注入。 |
| | | |
| | | #### F3 — `MIXED_HISTORY_CATALOG_CONTRACT_UNDERSPECIFIED` |
| | | |
| | | 现有正式清单 48 行包含同一 `stable_id/BVID` 的 SAVED、pending、blocked、download/transcription 等多状态历史;16 个 SAVED 实物当前均存在且哈希匹配。V001 仅写“从 stable_id/bvid/source_url 抽 token、同 token 合并”,没有冻结 token namespace/canonicalization、跨 token 的 union 规则、状态优先级、creator UID 缺失兼容、同一实体 source URL/dynamic/opus/BVID 交叉身份规则,以及何种历史 artifact 字段必须做 bytes/hash 校验。不同实现可把 blocked 当 active、把同一实体拆开或把冲突错误合并,直接影响 new/no-new 与重复正式写。 |
| | | |
| | | 最小修复:基于这 48 行冻结 schema 1 字段/状态分类表、namespaced token 生成与 union-find/冲突规则、creator 缺失的唯一兼容规则、SAVED artifact 实物校验矩阵和 schema 2 `dedupe_keys` exact canonical form;给出 48 行预期 unique-entity/catalog 摘要与冲突反例。新 state `CONTENT_SAVED`/video `TODO_QUEUED` 也须冻结 exact event schema 及 catalog 作用,避免旧命令对新事件解释漂移。 |
| | | |
| | | #### F4 — `DUAL_MANIFEST_COMMIT_HAS_LOST_UPDATE_RACES` |
| | | |
| | | begin 记录两份 manifest 前像,但事务顺序只在提交 state 前写“原子提交”,未要求在 artifact/state 发布前复核 state 仍等于 begin 前像;begin 与 commit 之间旧 `check/move-completed/handoff` 的合法 state 追加可能被新 candidate 覆盖。对 formal manifest 也只是步骤 5 复核后在步骤 6 replace,复核与 replace 间仍存在 TOCTOU;未定义所有正式 writer 共用的锁/CAS,另一 writer 可在两步之间追加并被覆盖。恢复矩阵只能检测已经发生在检查前的第三 hash,不能阻止检查后的 lost update。 |
| | | |
| | | 最小修复:冻结两份 manifest 的 exact candidate=`preimage + canonical lines`,并在任何 artifact/state 正式发布前同时复核两份前像。为 formal manifest 规定所有 writer 共享、跨进程、覆盖 check-through-replace 的锁或可证明的 CAS/no-clobber 协议;state 也须在 StateLock 内 compare-before-replace。前像漂移只允许 fail/rebegin,不得 rebase 或覆盖。补 begin 后合法 state 追加、formal writer 在 check 前/后竞争、锁持有者中断及两进程实测反例。 |
| | | |
| | | #### F5 — `BOUNDED_RUN_EVIDENCE_NOT_ATOMIC_WITH_TERMINAL_RESULT` |
| | | |
| | | V001 把 formal commit 定义为业务 commit point,而 final receipt、168-slot run evidence 和 pending cleanup 均在其后;no-new/blocked/unreadable/partial 又只写 run evidence。设计未冻结 run-slot 路径/slot collision(同一小时多个顺序 run)、`latest.json` 与 slot 的提交顺序和崩溃恢复,也未说明 slot 写失败时终态 stdout/exit。结果可能出现 formal 已成功但没有审计状态,或失败/no-new 已对外返回但唯一有界证据缺失/被同小时覆盖,不能满足小时证据可审计与重跑幂等。 |
| | | |
| | | 最小修复:冻结 run record exact schema、canonical bytes、slot 文件名与同小时多 run 规则,以及 latest/slot/receipt/pending 的提交和 reopen 矩阵。终态不得在 durable run record 成功前对外返回;formal 已提交后 run-slot/receipt 失败必须由 pending 明确恢复并保持业务成功,非业务终态则必须在清 pending 前 durable 记录。补每个持久化点 OSError/KeyboardInterrupt/SystemExit、同小时两 run、slot overwrite、latest/slot 任一失败和已提交 replay 测试。 |
| | | |
| | | ### 已通过且冻结的边界 |
| | | |
| | | 1. Chrome 控制面限定为 supported Codex Chrome、exact creator URL、单次 navigate/reload,禁止 CDP/profile/Cookie/header/412 绕过,方向正确;PASS 前及本审核新增真实动作均为 0。 |
| | | 2. 五终态的总体优先级、公开 discovery 永不提升为 no-new、两个真实样本分别解释为 `REFRESH_FAILED_PAGE_UNREADABLE` 与非权威 `BLOCKED_412` 均正确;但须随 F1/F2/F5 补齐可落地证据和崩溃语义。 |
| | | 3. 正式内容的全文/原图/video metadata+cover 边界、no-overwrite、secret-like key/raw error fail-closed、正式 no-new/失败不增长 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=`NO`;`mbx validate --project project-info --governance=OK / projects=1 / warnings=0`。 |
| | | - 独立反例全部只使用 `TemporaryDirectory`、脱敏 JSON 和数十字节非媒体文件;网络=`0`,浏览器=`0`,扩展=`0`,真实媒体=`0`,`F:\\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、自检和现有测试可作为隔离开发样例留在当前工作区;可在一次性 `TemporaryDirectory` 或 `dev/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/A53BA7CD9806028460CF60AE6025624EB9BFA42E209A991CF1DDE7E899785177`;`test_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/DCA04653CB349CB6DE449A6D291344E3E5788FB035F07A6BB2670EBE1F11D30A`;`transcribe_media.py=25245/0A485447578DB24DEA84CB887041F6D0CCB3E00F3F40745965228F2D06EEED8F`,与 sampler 修复前冻结值一致。 |
| | | - r1 保护核验只计算文件实物哈希、未读取媒体内容:`resource_samples.csv=162404/F85B2B90EF2F57245AC5BFD625AB7C3C09F09B3B06F11855D3E460561B58A839`;`resource_windows.csv=9264/E33DA3CF90AD23360183661E263E528185A13295BB5B7442D7E8D2FFC5E532C1`;`resource_summary.json=2650/4479CCB89A152693DCC39EF74569489E457440A896782BE7D0B02896545AAE29`;`run_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=`NO`;`mbx 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/interval`:`PreviousCounterTimestamp` 与 `FirstCounter` 只在 `$Samples.Add(...)` 成功后推进;扫描结束后注入的唯一一次提交前异常不会污染下一条已提交行。聚焦用例逐行复算并证明 `previous_valid_timestamp_utc` 等于上一条已提交 `timestamp_utc`,`interval_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-3a4d1f2dc5a5` 与 `case_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`;真实媒体=`0`;`F:\\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 0`;`VIDEO_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/1` 的 `F1_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`;真实媒体=`0`;`F:\\video`=`0`;正式 `ana-data`=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | #### F1-R1(阻断,设计/状态安全):V002 用“或没有移动终态”重新扩大了 `ACTIVE_MOVE` 状态集合 |
| | | |
| | | - V001 第 5 节已冻结的精确状态表只允许 `TODO_QUEUED / MOVE_FAILED` 进入实际移动,其他状态必须安全停止;该合同在上一轮已通过且本轮声明不重开。 |
| | | - V002 第 2.1 节第 4 项却把 `ACTIVE_MOVE` 定义为 `TODO_QUEUED`、`MOVE_FAILED`“或没有移动终态”,第 3 节矩阵再次写成 `TODO_QUEUED / MOVE_FAILED / 无终态`。这会允许实现者把 `PROCESSING_HANDOFF_CONFIRMED`、`PROCESSING`、`PROCESSING_FAILED`、缺失或未知状态等“尚无移动终态”的行误送入源/目标预检和移动事务,而不是沿 V001 的 `E_STATUS` 安全停止。 |
| | | - 该问题不是重开已通过状态合同,而是 V002 新增分类文字造成的真实回退;V001 原文没有该扩大项,因此上一轮无法报告。若不消除,终态分类先于源预检虽已闭环,状态准入仍存在两种相反实现。 |
| | | |
| | | ### 最小 required fix |
| | | |
| | | 1. 删除 `ACTIVE_MOVE` 定义和矩阵中的“或没有移动终态 / 无终态”;明确只有最新状态严格等于 `TODO_QUEUED` 或 `MOVE_FAILED` 才可进入阶段 B。 |
| | | 2. 明确 `PROCESSING_HANDOFF_CONFIRMED`、`PROCESSING`、`PROCESSING_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 projection`:`TERMINAL_MOVED` 与 `TERMINAL_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`;真实媒体=`0`;`F:\\video`=`0`;正式 `ana-data`=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | - 无阻断 finding。 |
| | | |
| | | ### F1-R1 闭环 |
| | | |
| | | 1. `PASS / 精确 allowlist`:V002 的“或没有移动终态 / 无终态”已显式废止;只有最新状态严格等于 `TODO_QUEUED` 或 `MOVE_FAILED` 才分类为 `ACTIVE_MOVE` 并进入阶段 B。 |
| | | 2. `PASS / fail-fast`:`PROCESSING_HANDOFF_CONFIRMED`、`PROCESSING`、`PROCESSING_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=`0`、`F:\\video`=`0`、正式 `ana-data`=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | #### F1(阻断,代码/状态证据):terminal projection 没有验证被称为“可信”的持久化字段 |
| | | |
| | | - `classify_move_mapping()` 只按 status 把 `VIDEO_MOVED / COMPLETE` 和 `VIDEO_MOVED_SOURCE_RETAINED` 归为终态;`move_completed()` 第 1086、1097 行随后用 `event.get()` 直接投影 `local_file`、`sha256` 和 `failure_reason`,没有检查这些字段是否存在、非空或符合状态合同。 |
| | | - 独立入口反例构造 schema version 正确、selector 可解析但 `VIDEO_MOVED` 的 `local_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_id`、`bvid`、`published_at` 等消费者字段。`handoff_markdown()` 第 1218—1220 行把这三个值原样插入行文本;只有 title、source URL 和 local path 使用 JSON 转义。 |
| | | - 独立入口反例保留合法本地视频和真实匹配 SHA-256,只把 manifest `bvid` 改为 `BV1SAFE00000\nstatus=FORGED`。`handoff` 实际返回 `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 s`;`py_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=`0`;`F:\video`=`0`;正式 `ana-data`=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | - 无阻断 finding。 |
| | | |
| | | ### F1/F2 闭环 |
| | | |
| | | 1. `PASS / F1`:`validate_terminal_manifest_evidence()` 在 `load_manifest()` 共同消费边界验证全部视频 `VIDEO_MOVED`、`COMPLETE` 与 `VIDEO_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 / F2`:`validate_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 s`;`needs_auth`、`premium_only`、`private`、`subscriber_only`、playlist 与 entries 六类状态均 fail closed。 |
| | | - 外部动作:network=`0`;Chrome=`0`;extension=`0`;download=`0`;real media=`0`;`F:\video`=`0`;正式 `ana-data`=`0`;schedule=`0`;cookie/token/credential access=`0`;实现/测试/fixture 修改=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | - 无阻断 finding。 |
| | | |
| | | ### 闭环结论 |
| | | |
| | | 1. `PASS / duration gate`:`validate_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_auth`、`premium_only`、`private`、`subscriber_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/48AF0F2277FC43D98480D330BE49A43173404EDEDC2AF3666CBA473AAD24699C`;`quick_check=ok`;外键错误=`0`;四业务表;`security=125`、`valuation_version=136`、`daily_price=0`、`daily_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 修改=`0`;`dev/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_id`;`INSERT 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.md`、`latest.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=`0`;`F:\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=0`;`market.py` 无 V2 导入/调用并通过只读连接读取 `trading_xuntou`;`database.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=`0`;`trading_xuntou` read/write=`0`;V2/provider=`0`;production daily=`0`;formal latest publish=`0`;schedule install=`0`;`tianxia`=`0`;`dev/ana-dev` 修改=`0`;实现/测试/fixture 修改=`0`。 |
| | | |
| | | ### Findings |
| | | |
| | | #### F4-R1(阻断,双文件提交失败清理):staging 写入/fsync 位于 BaseException 状态机之外 |
| | | |
| | | - `core.py:1006-1016` 先创建两份 `.pair-stage-*`、写入、flush、fsync;捕获/回滚 `BaseException` 的 `try` 直到 `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.md` 的 `os.replace` 注入三类异常,并且只比较旧正式 pair;没有注入 stage create/write/flush/fsync,也没有断言 stage/backup 零残留,因此提交的 `19/19` 不能排除该反例。 |
| | | |
| | | #### P1(阻断,冻结数据库原子性回退):单股判定失败会提交只有 daily_price 的半状态 |
| | | |
| | | - 权威需求第 197 行要求数据库失败不得留下“价格已更新但判定未更新”的半状态,工具说明第 75 行进一步冻结“个别行失败则该证券零写入,`daily_price` 与 `daily_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 判定;该 `LedgerError` 被 `core.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 `OSError`、`KeyboardInterrupt`、`SystemExit` 注入,逐例断言正式 pair、stage、backup 的完整终态和原异常。 |
| | | 2. `P1`:确保每只证券的 price 与 judgement 作为不可分割单元。最小做法可在任何 INSERT 前完成版本区间/V1 判定及所有会抛业务错误的校验,或为每只证券使用 savepoint 并在任一 `LedgerError` 时回滚该证券;同时在正式估值导入/schema 层拒绝非正的判定区间。增加 `base_low<=0` 等“价格插入后才会失败”的入口反例,断言该证券 `daily_price=0`、`daily_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_SNAPSHOT`:`apply_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 -> FFmpegFD`、`m3u8_native -> HlsFD`、`http_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=`0`;`F:\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 哈希=`PASS`;`compileall=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=`0`。`latest.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-05`、`trade_date=2026-08-04`、`window_end=2026-08-04`、`status=current/is_current=1`、`is_open=1`、`source=xtquant`、`updated_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_1d`、`dividend_type` 或 `cn_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=`0`;`F:\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_main` 在 `native_host.py:452-455` 清空整个环境后才读取 secret、加载配置并进入 `run_authenticated_task()`。 |
| | | - reviewer 在目标环境按实际清空顺序执行,得到 `LOCALAPPDATA_present False` 和 `fixed_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 -Force` 和 `Set-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-220` 的 `freshNativePrepare()` 使用全局 `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=2`、`prepareCount=3`(含前序失败 prepare)、`startCount=2`;两个 start 均已携带 Cookie secret,其中一个最终 `E_EXTENSION`。在真实 broker 中第二个 `start` 还会使 `WorkerTask.start()` 抛 `E_PREPARE`,`native_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-55` 与 `install_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 PASS`:`LOCALAPPDATA` 在环境清理前按绝对本地、既有链无 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_BUSY`、`cookieStoreReads=1`、`cookieReads=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.project` 或 `project.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` |
| | | 2. 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 全部复算一致。 |
| | | 3. receipt 的唯一 `files[0]` 精确绑定上述 EXE 的 name/bytes/SHA-256;reviewer 仅静态读取首两字节确认 `MZ`,未加载或执行 EXE。 |
| | | 4. source manifest 所列 15 个产品文件 bytes/SHA-256 复算 `15/15 PASS`,实际文件集无差异;source approval→source manifest→build receipt→EXE 链完整。 |
| | | 5. 开发执行日志、工具说明与 secondary worklog 分别为 `191404/2BE532490D536BD54521B560F1DE7EB5CDFDD7DA5794F3483A124A673135B9F5`、`18047/A338B2D75296181162DD7498879067C39D7A33B271A8D200044156D2E9392F95`、`4048/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-build`、`approved_by_role=dev.reviewer.project`、`status=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` 明确保留并拼接调用方原 `PYTHONPATH`;`225` 再以同一受污染解释器执行 `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-dlp`、`Version=2026.7.4`、`Tag=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`/伪 `pip` 的 `PYTHONPATH` 注入反例,必须证明伪模块未执行且不能形成 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=`0`。`build_host.ps1:36-53,82-121` 与 `install_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`/伪 `pip` 的 `PYTHONPATH` 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=1`、`marker_executed=true`、`output_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,或将所有对 `.deps` 的 `sys.path` 注入/模块导入严格移到 exact-tree、reparse、wheel 派生 bytes/hash、`RECORD`、`INSTALLER/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` 已删除。静态检索确认校验前不存在 `.deps` 的 `sys.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-manifest`,`approved_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 文件:`INSTALLER`、`METADATA`、`RECORD`、`REQUESTED`、`WHEEL`、`entry_points.txt`、`licenses/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-manifest`,`approved_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)` 提升的 `b`;`b` 不会扩展为任意路径、模块、脚本或其他数据许可。 |
| | | 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-manifest`,`approved_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=`0`,`RECORD=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=`0`,`dev/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-manifest`,`approved_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-build`、`approved_by_role=dev.reviewer.project`、`status=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-dev`、`dev-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 文档把 `description` 与 `icons` 列为 Chrome Web Store 所需键,官方 Web Store 准备文档也要求提交完整扩展 ZIP。因此当前 exact-five 包不能作为已具备发布条件的安全实施合同。证据:`https://developer.chrome.com/docs/extensions/reference/manifest`;`https://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.cookies`、`cookie_store_id`、`cookies` 和内存 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-331` 与 `install_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=1`、`audit_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_RECEIPT`、`E_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_RECEIPT`、`E_RECOVERY_AMBIGUOUS`、`E_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=417971`、`audit_sha256=392A9C468FD19E422B5150043B58DCB24252A1A2C9C9203FA14B25A556CE5F4C`。本轮审核开始时 reviewer 独立复算该绑定仍精确匹配。 |
| | | - `build_webstore_upload.ps1:148-169` 与 `install_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_UNDEFINED`:`refresh-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_nodes`;`complete_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_PLANNED`、`OLD_LOCK_QUARANTINED`、`CREATE_PLANNED`、`NEW_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_OPEN`:`load_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_lock` 在 `CREATE_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_PLANNED`、`OLD_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=HELD`、`takeover_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/1` 的 `F4_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.913s`;`py_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/1` 的 `F1_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_ERROR` 与 `POST_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` |