SRCADM-01:ADC_surfaceome_reference@0.3.0 来源准入审计(结论:有条件可纳入) - #63
Open
leezx wants to merge 1 commit into
Open
Conversation
Carries out the nine-item audit PR #59 froze and approved, which is the authority for this work. The builder source, the raw manifest, the checksum file, the licence declarations and the three processed tables were read rather than described, and every verdict records a recheckable basis. Conclusion: admissible with conditions. No item failed. Four items pass with a finding, each with its impact bounded. AUD-05 is the item the reviewer singled out, and it passes for a specific reason. The three families map to curated_knowledge from goa_human and uniprot_reviewed_human, imaging from hpa_subcellular_location, and cell_surface_capture_ms from cspa. GOA human is produced by the UniProt curation pipeline, so those two are the same origin - and the builder collapses them into one family rather than counting two. GUCY2C is the worked example: both sources support, family_count stays 1. That is exactly the double-counting failure mode the reviewer named, and the builder avoids it. Two reinforcing checks: family counting keys on supporting evidence, verified by counterexample over the 11,334 genes with an HPA row but hpa_plasma_membrane false, of which zero had imaging counted; and because curated_knowledge is the only family two sources can feed while counting once, family_count of two or more always includes an experimental family, so RQ-01's bar is not a formality. AUD-04 finds six sources with ambiguous licences - four cellphonedb files, cellchatdb under a GPL-3.0 repository licence, and omnipath retaining per-resource terms - and then bounds it: none of the six appears in source_evidence.tsv at all. They feed only the cci_receptor fields, which PR #59 already bars. The three sources that do reach it are CC BY 4.0. That conclusion is load-bearing on the field whitelist, so widening the whitelist voids the admission, recorded as COND-02. AUD-09 verifies all 19 raw files against checksums.sha256 and finds the builder deterministic apart from a timestamp field, but uniprot_reviewed_human and goa_human carry current_at_download rather than a release, so re-downloading cannot reproduce the snapshot byte for byte. Admission therefore rests on the archived snapshot, recorded as COND-03. AUD-06 finds no explicit dedup routine and 6 plus 5 duplicate keys, none of which touches the 41 targets, and family counts derive from consensus booleans rather than row counts, so duplicates cannot inflate RQ-01. AUD-01 records honestly that builder_version comes from config rather than a constant, so the 0.3.0 label cannot be confirmed by the script itself. This PR grants nothing. Status stays pending_review, admission_record_ref stays null in both files, and EVGAP-01's extraction stays unauthorised. 351 tests pass. Eleven mutations caught and rolled back exactly. Two of them escaped the first pass because my assertions matched substrings that survived a partial deletion; the assertions were tightened to require the substantive content and the escapees were re-tested and caught. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
这个 PR 是什么
PR #59 冻结并获批的九项审计
AUD-01..AUD-09的实际执行结果。那份冻结范围本身就是本次审计的授权依据。读了 builder 源码、raw manifest、checksums、license 声明与三个 processed 表,而不是描述它们。 每一项 verdict 都附可复核依据。
结论:
admissible_with_conditions——有条件可纳入。无一项FAIL。本 PR 不授予准入。
status: pending_review、两份文件的admission_record_ref都仍为null、EVGAP-01的authorises_extraction_run仍为false。main基线8aa7e87,5 个文件 +607/-0,Ran 351 tests全部通过。九项结论
AUD-01AUD-02raw_manifest_sha256AUD-03AUD-04AUD-05AUD-06AUD-07discordance_flags规则AUD-08AUD-09AUD-05:独立性成立,而且恰好避开了你点名的失效模式三家族的来源映射:
goa_human与uniprot_reviewed_human是同源的——GOA human 由 UniProt 策展流程产出。builder 把二者收进同一个curated_knowledge家族,因此不会计成两个独立家族。这正是你说的「同源数据重复计数」,builder 避开了它。实例:
GUCY2C两个来源都supported,family_count仍为 1。两条加强验证:
hpa_plasma_membrane = false的基因共 11,334 个,其中imaging被计入的为 0 个。family_count >= 2必然包含至少一个实验型家族——curated_knowledge是唯一可由两个来源喂养但只计一次的家族,要凑到 2 就必须再有imaging或cell_surface_capture_ms。所以RQ-01的门槛不是形式门槛。AUD-04:license 歧义存在,但不触及 EVGAP-01 读取的任何字段19 个来源全部声明 license,六个有歧义:
cellphonedb_gene/protein/complex/interaction(not declared)、cellchatdb_human(GPL-3.0 repository licence)、omnipath_intercell_receptor(per-resource retained)。决定性检查:这六个没有任何一个出现在
source_evidence.tsv中。 它们只喂cci_receptor_*,而该字段已被 PR #59barred_fields禁用。进入的四个来源中三个是 CC BY 4.0。这个结论是承重的——依赖 #59 的字段白名单。白名单一扩大,准入即失效(
COND-02),测试也断言cci_receptor_role确实在 #59 的barred_fields中。顺带记一处命名不一致:processed 用
source_id = cspa,manifest 用cspa_validated_surfaceome与cspa_cell_type_matrix,无法直接 join。AUD-09:完整性可验,可复现性有边界shasum -a 256 -c checksums.sha256对 19 个 raw 文件全部 OK。builder 唯一的时间依赖是第 268 行datetime.now()用于processed_at_utc时间戳字段,不参与计算;无random、无shuffle。给定同一 snapshot,构建确定。但
uniprot_reviewed_human与goa_human的 release 是current_at_download,不是版本号。 从上游重新下载并重建不能保证逐字节复现。可复现性成立的前提是使用已归档的 raw snapshot(COND-03)。四项准入条件
COND-010.3.0/2026-07-29-quant-topology-mm这一个 snapshot(23 个校验和钉住),不覆盖其他版本或后续重建COND-02cci_receptor_*即失效COND-03COND-04另两项 finding
AUD-03:manifest 的release字段全部为 null,release 字符串由 builder 另行赋值(processed 表中确有实义取值如HPA 25.1; Ensembl 109);但四个在用来源中两个是current_at_download。AUD-06:builder 中检索不到显式去重例程;实测source_evidence.tsv6 个重复键、membrane_topology_evidence.tsv5 个。受影响基因HERC3/MATR3/NPIPA9/PINX1/POLR2J3/PRODH/ERVK-7/NRXN1/NRXN2/NRXN3/SIRPB1,没有一个属于 41 个靶点;且 family 计数取自 support 布尔值而非行数,故重复行结构上不可能抬高RQ-01(41 靶点的family_count与families列表实测 100% 一致)。AUD-01的一处如实记录builder_version由 config 传入而非脚本内常量,故「0.3.0」这个版本号依赖build_manifest自述、不能由脚本自身独立确证。不构成阻断(snapshot 由校验和钉住,版本号只是标签),但记录在案。验证
Ran 351 tests通过(基线 338 + 新增 13);boundary check 通过。测试把结论钉在 #59 冻结的范围上:九项 ID 必须与required_audit_items完全相等;无FAIL;每项必须有可复核依据(PASS_WITH_FINDING必须写出 finding);AUD-02摘要必须是 64 位十六进制且与 #59 引用前缀一致;AUD-05必须点名同源来源对并引用实测反例数;AUD-06影响界定必须写明「没有一个属于 41 个靶点」并列出受影响基因;本审计不得授予准入。11 个变异全部被捕获后精确回滚:自行授予准入、自填
admission_record_ref、删掉一项审计、AUD-05去掉同源说明、AUD-05声明「有行即计」、结论改为无条件可纳入、删掉COND-02、抹去AUD-09的可复现性限制、AUD-06影响界定改成含糊表述、删掉受影响基因清单、把某项判FAIL却不改总结论。其中两个首轮逃逸,是我断言太松——
assertIn("current_at_download", ...)与assertIn("41", ...)在部分删除后仍命中残留文本。已改为要求实质内容,重测全部捕获。没有做什么
evgap_01_surface_localization_extraction.yaml(admission_record_ref仍null,authorises_extraction_run仍false)。EVGAP-01抽取;没有执行 Level 01;没有解除任何 EVGAP。SRCADM-02..05。后续顺序
APPROVE,在logs/留审核记录admission_record_ref指向该记录、authorises_extraction_run转trueEVGAP-01抽取 → 结果 PR → binding,解除EVGAP-01EVGAP-02结果审核在 PR EVGAP-02 CRC linkage 抽取结果审核(Tier 1 已执行,20 条验证全通过) #62;获批后另开 PR 解除EVGAP-02ADC_POOL_LEVEL_01_ACCEPTED本 PR 不适用
AGENTS.md「审核豁免」,须经 ChatGPTAPPROVE。批准代表接受这份审计及其四项条件,并据此准入该单一 snapshot;不授权执行EVGAP-01抽取(须另开 PR 填admission_record_ref),不解除任何证据缺口,不批准该数据集的其他版本。