Skip to contents

U-M1s-12 审核(REVISE 1×P1 → 已修)

  • 代码行为全部验证正确:转置契约三重防线(双侧非对称冒烟 + 标签装配 + 负元 i/j 坐标穿透)、展示归一装配层切分(WH 重构漂移 1.47e-16)、注册表 certified 落实、D16 默认路径诚实标注。
  • P1(已修):布局契约恒等式三处写错(extract.rs / lib.rs / ffi-surface.md 冻结协议)——data[j*m+i] 应为 data[i*n+j](对 t(counts) 的 n×m 列主序缓冲)。代码正确,纯文档缺陷,但书面契约在冻结工件里会误导后来者实现出它本欲防止的转置 bug。实证反例:m=2,n=3 时 counts[1,0] 实存 data[0*3+1]。

U-M1s-13 夹具正式化

  • helper 双份拷贝收拢至共享 helper-tally.R(行为零变化,testthat 全绿);tools/refresh-fixtures.sh 一键再生成入口(channel 表/kl-crosscheck 输入实测字节级幂等,MSUITER_FIXTURES_ONLY=1 门控加入 run_experiment.R 且默认行为逐字节不变)。

M1s 验收门 bench(bench/m1s/,一键复跑)

正确性锚(最重要):10⁶ 合成变异 SPMG vs ms_tally SBS96 矩阵逐格差 = 0。

预算行 判据 实测 结论
SBS96 目录 10⁶ ≥50× SPMG 且 <5s 2.6×(3.73s vs 9.82s);<5s ✓ 速度 FAIL
NMF KL 96×1000 k=10 T=100 ≥100× R NMF 2.3×(205ms vs brunet 0.47s C 核) FAIL
批量 NNLS 101×10³ ≥10× scipy 1.8×(解正确 3.8e-11) FAIL

根因(PI 复核):预算倍数写于未实测基线——R NMF brunet 是 C 内核、scipy 是原生 C、SPMG 1.3.6 干净输入是 numpy 向量化。“对 C 内核再快 100×”从不是可辩护声明;“比参考 C 内核快 2.3×”本身即是强结果。50× 口径或对真实基因组+全管线 SPMG 成立(dense 臂 SPMG 46s),但合成干净输入口径下不成立。→ 预算口径重校准待作者裁决(触及 ROADMAP 验收措辞,PI 不单方面改宪法级文档)。

P0 级发现(M1c 裁决项)

  1. DBS 成员计入 SBS96:审计所锚上游 master 行为不符 【2026-09-30 ID83 备忘勘误】 函数级 diff 证明 master 与 v1.3.6 均双重计入(SBS 循环对 SNV 全量计数、无 dinuc 排除)——我方的排除是对所有 SPMG 版本的 deliberate divergence(更合理、有审计依据),文档声明即 parity 口径;除该策略外路由双侧完全一致。另 ID83 备忘发现 PR #256 修复了 v1.3.6 的 SBS bias 索引 bug(真实基因组 + 转录注解下 SBS192/384 与 1.3.6 分叉;M1s bench 平注解合成基因组掩盖了该项)——真实基因组 bench 列入 M1c/M7 清单。详见 vignettes/articles/devlog-2026-09-30-ID83-design-memo.qmd。
  2. SPMG 1.3.6 丢弃完全重复记录(sample 盲整行比较)——我方无去重语义,M1c 定策略。
  3. SPMG CHECKSUMS 白名单使自定义基因组不可用 → 运行时注册本地 md5 绕过(零上游文件改动)——真实 SPMG 基线成立,无外推数字。
  4. SPMG <vcf_dir>/input/ 转换缓存静默复用陈旧记录——spmg_run.py 已每次清除。

状态

  • 电池:Rust 12 套件双工具链绿、testthat 1342+、check 0/0/1NOTE。
  • M1s:13/14 单元 + bench 已跑;验收门 = 预算口径裁决 + (可选)并行 tally 优化 + sigminer/MP 玩具交叉验证。

PI 裁决(2026-10-05):方案 A 采纳

速度预算口径按实测 C 基线重校准(目录 2.6× SPMG / NMF 2.3× brunet / NNLS 1.8× scipy);原 50×/100×/10× 修辞移至朴素 R/Python 实现口径(全管线 dense 臂 SPMG 46s 口径 50× 或成立,钉硬件 bench 复核)。M1s 14/14 关闭。