Devlog · U-M0-05 通道注册表单一事实来源 + docs-sync(2026-09-28,W2 轮)
Source:vignettes/articles/devlog-2026-09-28-M0-05.qmd
做了什么
-
data-raw/build_channels.R单一事实来源生成器(base R、无网络、无时间戳、幂等——sha256 逐字节):一次推导同时产出R/sysdata.rda(channel_tables:SBS96/192/384/1536/DBS78,labels+结构元数据+decomposition)与src/rust/catalog/src/channels.rs(5 个pub static ..._CHANNELS)。 - 规范序语义(research/04 §1 SPMG 金标准):非链表(SBS96/1536/DBS78)= 标签 ASCII 字典序;链表 = {T,U}/{T,U,B,N} bias_sort 块内嵌 SBS96 序;DBS78 = 嘧啶起始 + Q 型折叠按 SPMG 源码常量钉死(min/max 平局规则实测均不成立)。脚本内结构断言:长度/唯一性/正则/锚点、SBS1536→SBS96 无损投影、DBS78 的 144 双位点 revcompl 对覆盖契约(恰一 + 12 自互补 Q 型)。
-
三重上游锚定:① SPMG 自带 BRCA bench 输出矩阵逐位对拍;② SigProfilerPlotting reference_formats 逐位对拍;③ 终审时审核员当日实拉上游 pinned commit 复核全中 → 现已常驻入库
tools/channel-reference/{SBS96,SBS384,SBS1536,DBS78}.txt(BSD-2 全文+版权声明+commit 溯源随附)+test-channels-reference.R逐位断言(SBS192 无上游文件,由 SBS384 推导衔接)。 -
tools/docs-sync.R:CAPABILITY-MATRIX L-H API 表 ↔︎ ARCH/ROADMAP 用户 API 名单向 drift 检查(FFI 内部名*_rust除外),drift 即 exit 1;负向验证通过。CI 接线归 U-M0-07。 - 双端一致性测试:testthat 解析 channels.rs ↔︎ sysdata 逐位 identical + catalog crate 纯 Rust 长度/锚点测试。
关键决策(契约引用)
- 许可红线(D3 一致的保守姿态):research/05 §1 判 COSMIC T&C 再分发性法律模糊 → 不下载不缓存 COSMIC 文件;改锚定 BSD-2 的 SPMG/SPP 上游(终审采纳后 SPP 格式文件入库并附完整 BSD-2 文本)。
- Rust 常量用
pub static而非pub const(clippy::large_const_arrays,CI 门内);R 侧解析两种形式均兼容。 -
PI 集成修复:sysdata 在 R CMD check 语境不以文件存在(安装时惰性载入 namespace)→ 测试改
get("channel_tables", envir = asNamespace("msuiter"))(终审确认为正确模式);channels.rs/reference 的源树访问在 check 语境 skip——这些是仓库漂移守卫,CI 必须在 checkout 上跑仓库模式 testthat(已写入 U-M0-07 交接清单)。
审核(3 轮,联合)
第 1 轮 REVISE(RNG 相关 + SPP 未入库 + 注释)→ 修复;第 2 轮 REVISE(RNG 输出位,见 U-M0-06)→ 修复;第 3 轮 PASS。审核员独立复现:幂等 sha、当日实拉上游逐位全中、扰动单标签守卫即红(非恒真断言)。
遗留
- docs-sync/.github 接线 → U-M0-07;sysdata 消费方(R/catalog/tally)→ U-M1s-11。
- DESCRIPTION 未加
Suggests之外内容(U-M0-03 已统一处理);data-raw 已入 .Rbuildignore。