Files
PlantAI-dev/.superpowers/sdd/convergence-task-5-report.md
2026-08-03 18:42:47 +08:00

8.0 KiB
Executable File
Raw Permalink Blame History

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-256 60cac33454ba1999f3e089dc81ca3b3aa13cb1c6d7a0c1cdc0e001583802bf2f。
  • Ft.SPL.task5_network.tsv:仅 header,SHA-256 ac7aa34599182ed2356e882ea600716f8401a5dc51e3ea81ceca18905bc47a3e。
  • Ft.SPL.task5.manifest.json:SHA-256 362a5dc51b794ec9439554f276e2836752862724ba6f9c7914e0217ec9be8b71。
  • Ft.SPL.task5_report.md:SHA-256 11317b66b93fc5b757678790640579575fc704d4e0c9ebfe37fd389e57b44cfc。
  • Ft.SPL.task5_url.txt:SHA-256 51684884119b429f95898de2524794aa9f4e3a46bd09a07cc0e2204e72757cfc。

/tmp 是隔离且临时的验证目录,未覆盖 job 的历史 PPI 产物。

CLI/backend wiring

  • 内部公开 Python API PpiSkill.run(..., id_map_file=...) 支持传递真实 ID map。
  • 当前 skills/ppi/run.py CLI parser 只有 --mapping,没有 --id-map/等价参数;CLI 对 PpiSkill.run 的调用不能传 id_map_file。
  • 当前 apps/web/pipeline_backend.py PPI 命令仅追加 --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

  1. 唯一产品路径 blocker 是 CLI/backend 未传 id_map_file;因此不能把本轮 direct-Python live 结果表述为标准 backend 端到端验证。
  2. 本轮 STRING mapping 为 0 raw + 12 GeneID fallback,区别于计划中的 5 + 7 示例计数;外部数据库映射会随版本变化,应以 resolution TSV 为准。
  3. 网络结果为有效空网络,只证明当前 12 个已解析蛋白在 score 200、functional、add_nodes=0 条件下返回 0 条边,不证明生物学上不存在任何互作。
  4. live 产物在 /tmp,系统清理后可能消失;hash 和精确结果已写入两份项目报告。
  5. 测试运行持续出现 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 未修改:本轮没有生产失败,且任务限制只允许写两份报告。