第二部分 — 文献:领域现状
文献综述四:流水线、可复现性与标准
SCE 归根结底,是一条负有职责的流水线。本章回顾这个领域为让流水线 可复现而发展出的机制——以及将塑造未来五年的那场标准对话。
流水线工具的谱系
"工作流应当知道自己的依赖图"这一思想——跳过已是最新的步骤、让过时 的步骤失效——可以上溯到 GNU Make,而它最成熟的 R 原生表达是 Will Landau 的 {targets}(ropensci),即 {drake} 的继任者。它的表述值得 逐字引用的关注:当所有目标都是最新时,"这就是结果与底层代码和数据 相符的证据",这使流水线本身成了一件信任工具。{targets} 属于探索 性传统——但这个洞见可以分毫不差地迁移到受监管的工作中:一条能证明 自己处于最新状态的流水线,已经生成了它一半的审计追踪。
临床生态把同一个洞见裹进了合规的外衣:{whirl} 执行流水线脚本,带 结构化日志与日志验证;{logrx} 在执行时刻捕获锁定的软件包版本与代码 哈希;{envsetup} 把环境供给标准化。它们各自都不是一个 SCE,合在一起 则勾勒出了一个。
锁定世界
R 中的可复现性,在依赖图之外还有第二层含义:环境可复现性,即把 "语言加软件包"的世界钉住。标准做法——{renv} 锁文件、CRAN 快照仓库, 以及据此构建的容器镜像——在 R Validation Hub 的可复现性讨论与 PHUSE 开源指南(如姊妹论文所援引)中均有记载,在受监管的 R 部署中实际上已 是通行做法。本书倡导的实践者式精进是:把容器镜像摘要本身当作一件工件 ——一个自我举证的参照环境——从而让"这次运行身在哪个世界?"变成一次 哈希查询,而不是一场重建仪式。
标准的对话
有三条标准化线索,将在本十年余下的时间里塑造 SCE 的架构:
- 分析结果数据。 pharmaverse 中的 cards/cardx 软件包实现了 ARD 理念——把分析结果做成结构化的、与呈现方式无关的数据对象——将计算 与呈现解耦。这个方向与 CDISC 的 ARD 倡议一致;一旦汇合,信任层便有 了一个可供核验的标准中间层,而那正是核验应当在的位置(在数字被 排版之前核验它们)。
- Dataset-JSON。 传输格式正在从 XPT 迁向基于 JSON 的交换,生态 的 I/O 软件包已经支持。对流水线契约而言,JSON 是母语——工件图的 理念与递交格式的理念正在合流。
- 流水线证据。 目前尚不存在任何有分量的候选,可以作为流水线证据 ——清单、比对记录、核验结论——的标准格式;这正是本书的平台 (第四部分)为自己的契约做版本化的原因。这里第一个可信的开放标准 会被迅速采纳,因为每个建造者眼下都在发明同样的三个 JSON 文件。
这场综述意味着什么
把四章文献叠起来,一个形状浮现了。监管框架说:证据,与风险相称。 验证文献给出:筛查,然后预期用途证据,然后受治理的 AI。 平台文献 给出:部件、目录,以及诚实的免责声明。 流水线文献给出:依赖图、 锁,以及正在汇合的标准。 其中没有任何一处给出那个绑定:一个组合的 环境,其每一次执行都把三种证据——准确性、可复现性、可追溯性——作为 副产品一并发出。第三部分陈述这个绑定的原则,第四部分把它造出来。
检验。 以受监管的规模,问任何一条流水线那个 {targets} 式的问题: "如果自上次运行以来什么都没有变,你能否不重跑就证明输出仍与输入 相符?" 必须重新执行才能自安的流水线是在记忆;能从自己的图里作答的 流水线,才是在记录。