8.0 KiB
Executable File
Task 5 — Ft→soe 真实证据与 PPI ID 代码收敛验证报告
状态
- 状态:完成验证与报告;本任务未修改生产代码、测试、前端、CLI、Reset、manifest 或契约。
- 验证级别:live。真实本地证据解析完成,且通过现有
PpiSkill/StringAPI路径完成真实 STRING mapping 与 network 请求。 - 真实 job:
job_1783583324146_c5cb74。仓库逻辑路径为/data/project_roots/PlantAI-dev/workspace/job_1783583324146_c5cb74;realpath为/data_old/home/xia-lab/plantai-dev-data/workspace/job_1783583324146_c5cb74。
真实输入
| 输入 | 绝对逻辑路径 | SHA-256 | 计数 |
|---|---|---|---|
| Ft canonical members | /data/project_roots/PlantAI-dev/workspace/job_1783583324146_c5cb74/final/Ft.SPL.curated_members.id |
5dac836cdbdeec2ab40645e62fd8bc30f78a723870b79796556d9c42de70c57d |
24 members |
| PPI source IDs(与 canonical 文件逐字节同 hash) | /data/project_roots/PlantAI-dev/workspace/job_1783583324146_c5cb74/ppi/analysis/Ft.SPL.SPL.target-Ft.ref-soe.target_plus_reference.ppi_source_ids.txt |
5dac836cdbdeec2ab40645e62fd8bc30f78a723870b79796556d9c42de70c57d |
24 members |
| Ft→soe exact Ortholog mapping | /data/project_roots/PlantAI-dev/workspace/job_1783583324146_c5cb74/final/Ft.SPL.orthologs.txt |
7e78baba5c2550d2a2d313df340fc1cb60346d449f17e7b3dcb49363c2643ccc |
24 data rows(26 physical lines) |
| soe PEP/CDS ID map | /data/project_roots/PlantAI-dev/input/job_1783583324146_c5cb74/soe/soe.pep_cds_idmap.tsv |
98492d6f7a721dd000e9a4a12011aeae95ef2d0654562eba2f57f90f31149534 |
40,779 data rows(40,780 physical lines) |
| soe reference bundle manifest | /data/project_roots/PlantAI-dev/input/job_1783583324146_c5cb74/soe/soe.reference_bundle_download.manifest.json |
53a63d3ccc13132798210144c1451d766a890c4d2f3957ac5bc3fb6235514e18 |
40,779 PEP + 40,779 CDS; overlap 40,779 |
Manifest 证据选择 species code soe、物种 Spinacia oleracea、STRING taxon 3562,NCBI assembly GCF_020520425.1。上述逻辑路径的 realpath 均落在 /data_old/home/xia-lab/plantai-dev-data/...;manifest 中同时存在逻辑路径和物理路径,这是现有存储映射,不影响本次文件 hash 一致性。
本地解析结果
通过公开 parse_ortholog_mapping(...) 与 ReferenceAliasIndex.from_tsv(...).candidates(...) 对真实文件验证:
- canonical member:24。
- 精确 Ft→soe relationship:24。
- 唯一 reference query:12。
- 原始 accession 候选:12/12。
- 数字 NCBI GeneID fallback 候选:12/12。
- 每个 query 另有 1 个 LOC gene-symbol 候选。
- 本地 alias 歧义/解析错误:0;本地缺失候选:0。
数字 GeneID 依次为:110806180, 110788990, 110779551, 110785706, 110785720, 110783582, 110775292, 110788819, 110777789, 110804028, 110775875, 110789221。
Live STRING 结果
调用现有公开接口:
PpiSkill().run(
gene_ids_file=canonical_members,
species="soe",
prefix="Ft.SPL.task5",
output_dir=Path("/tmp/plantai_ppi_task5_20260710"),
required_score=200,
mapping_file=ortholog_mapping,
id_map_file=soe_id_map,
)
真实 mapping 结果:12/12 unique queries resolved,24/24 canonical members resolved;0 unresolved,0 ambiguous。当前 STRING 响应中 raw accession 成功数为 0,12 个查询全部经数字 GeneID fallback 成功。该结果与早期计划中的示例形状“5 raw + 7 GeneID”不同;这里记录本轮真实外部响应,不把示例/历史计数当作真实结果。
| STRING ID | preferredName |
|---|---|
3562.A0A0K9RQ59 |
SOVF_041020 |
3562.A0A0K9R9E3 |
SOVF_092060 |
3562.A0A0K9RUQ7 |
SOVF_032420 |
3562.A0A0K9QHU3 |
SOVF_183860 |
3562.A0A0K9R8X4 |
SOVF_098310 |
3562.A0A0K9QRG9 |
SOVF_149370 |
3562.A0A0K9QKM8 |
SOVF_172970 |
3562.A0A0K9RZG7 |
SOVF_011410 |
3562.A0A0K9QIV6 |
SOVF_174320 |
3562.A0A0K9QU54 |
SOVF_140790 |
3562.A0A0K9QFD7 |
SOVF_192040 |
3562.A0A0K9QA89 |
SOVF_202090 |
随后直接通过同一 StringAPI.get_network(...) 再次检查返回 payload:stable API 为 https://version-12-0.string-db.org/api,payload 的实际 Python 表示为 []、类型 list、row count 0。因此本轮结果为正常空网络:manifest status=success、metrics.network_status=empty_network、interaction count 0,而不是 API 失败伪装成零互作。
Live 产物位于 /tmp/plantai_ppi_task5_20260710:
Ft.SPL.task5_id_resolution.tsv:25 lines(header + 24 relationship rows),SHA-25660cac33454ba1999f3e089dc81ca3b3aa13cb1c6d7a0c1cdc0e001583802bf2f。Ft.SPL.task5_network.tsv:仅 header,SHA-256ac7aa34599182ed2356e882ea600716f8401a5dc51e3ea81ceca18905bc47a3e。Ft.SPL.task5.manifest.json:SHA-256362a5dc51b794ec9439554f276e2836752862724ba6f9c7914e0217ec9be8b71。Ft.SPL.task5_report.md:SHA-25611317b66b93fc5b757678790640579575fc704d4e0c9ebfe37fd389e57b44cfc。Ft.SPL.task5_url.txt:SHA-25651684884119b429f95898de2524794aa9f4e3a46bd09a07cc0e2204e72757cfc。
/tmp 是隔离且临时的验证目录,未覆盖 job 的历史 PPI 产物。
CLI/backend wiring
- 内部公开 Python API
PpiSkill.run(..., id_map_file=...)支持传递真实 ID map。 - 当前
skills/ppi/run.pyCLI parser 只有--mapping,没有--id-map/等价参数;CLI 对PpiSkill.run的调用不能传id_map_file。 - 当前
apps/web/pipeline_backend.pyPPI 命令仅追加--mapping,也不能把 reference bundle 中的soe.pep_cds_idmap.tsv传给 skill。 - 结论:本地解析和 live 路径已通过现有 Python public interface 验证,但当前标准 CLI/backend 端到端尚未接通
id_map_file。按本任务冻结约束未增加 CLI 参数,也未修改 backend。
回归证据
最终回归命令:
/home/xia-lab/miniconda3/envs/test4py311/bin/python -m pytest \
tests/unit/test_id_resolution.py tests/unit/test_ppi_id_resolution.py \
tests/unit/test_ppi_string_policy.py \
tests/unit/test_pipeline_backend_execution_env.py -q
结果:exit 0;collected 70;70 passed in 6.60s。其中行为测试覆盖正常 [] → success/empty_network,以及 HTTP 异常 → external API failure,不会写成假零互作。
编译命令:
/home/xia-lab/miniconda3/envs/test4py311/bin/python -m py_compile \
gfa_core/id_resolution.py gfa_core/string_rate_gate.py \
gfa_core/ppi_string_policy.py skills/ppi/run.py apps/web/pipeline_backend.py
结果:exit 0,无输出。
Blockers / concerns
- 唯一产品路径 blocker 是 CLI/backend 未传
id_map_file;因此不能把本轮 direct-Python live 结果表述为标准 backend 端到端验证。 - 本轮 STRING mapping 为 0 raw + 12 GeneID fallback,区别于计划中的 5 + 7 示例计数;外部数据库映射会随版本变化,应以 resolution TSV 为准。
- 网络结果为有效空网络,只证明当前 12 个已解析蛋白在 score 200、functional、
add_nodes=0条件下返回 0 条边,不证明生物学上不存在任何互作。 - live 产物在
/tmp,系统清理后可能消失;hash 和精确结果已写入两份项目报告。 - 测试运行持续出现
requests依赖版本 warning(urllib3/chardet/charset_normalizer),未影响本轮请求或测试,但环境依赖兼容性值得后续单独处理。
Self-review
- 使用 manifest 定位 job、canonical member、ortholog mapping、species/taxon 和历史 PPI 产物;没有猜路径或构造生物学 fixture。
- 实际检查了 live mapping 产物、preferredName、network TSV、manifest,并打印验证了真实 network payload
[]。 - 未把历史 2026-07-10 11:38 PPI manifest 当成本轮 live 证据。
- 未修改任何生产/测试文件;仅写入本报告和项目验证记录。
- 未重启服务或 Celery:本任务没有修改启动时加载的 backend/worker 代码。检查时存在 Celery worker,但没有
apps/web/vue3/main.py进程;本轮无需重启。 - diagnosis record 未修改:本轮没有生产失败,且任务限制只允许写两份报告。