6.7 KiB
STRING PPI 生产接线纠偏:Task 0 基线与 RED 证据
范围:只采集基线并增加失败测试。未修改生产代码,未重启 Web/worker,未提交真实分析任务。
Gate 0 结论
Gate 0 通过:三个根因均可稳定、独立重现,可以进入后续实现任务。这里的“通过”只表示失败基线成立,不表示功能已修复。
| Gate 0 项 | 判断 | 证据 |
|---|---|---|
| 9010 指向计划目标目录 | 通过 | Web/worker /proc/<pid>/cwd、环境变量和模块 __file__ 一致 |
| Redis/队列隔离 | 通过 | Redis DB 11,队列前缀 plantai_4090_9010 |
| 真实 Sv 问题定位 | 通过 | job、conversation、scope 和 03:21 消息链已锁定 |
| Sv/科学名未接 resolver | 通过 | RED 1 因缺 species_resolution 失败 |
| registry-only 执行被旧 map 拒绝 | 通过 | RED 2 对 TaxID 3708 抛出 ValueError |
| 无参考仍要求 Ortholog | 通过 | RED 3 得到 required_next_stage=ortholog |
9010 运行身份
- 主机:
planai5090/xzq-Rack-Server - 目标根目录:
/home/xzq/5090/PlantAI-dev4090-7/PlantAI-dev - systemd:没有发现匹配
plantai/9010/celery的 unit;9010 由 shell 父进程 PID2391849启动。 - Web:PID
2391890,命令为python -m uvicorn apps.web.vue3.main:app --host 0.0.0.0 --port 9010。 - worker 主进程:
2391860/2391866/2391873/2391880/2391891,对应 default/heavy/medium/light/rnaseq。 - 所有上述进程 cwd 均为目标根目录。
- Web/worker 环境均包含:
BBAV5_PROJECT_ROOT=/home/xzq/5090/PlantAI-dev4090-7/PlantAI-devPLANTAI_PROJECT_ROOT=/home/xzq/5090/PlantAI-dev4090-7/PlantAI-devBBAV5_QUEUE_PREFIX=plantai_4090_9010BBAV5_REDIS_URL=redis://localhost:6379/11
celery_app.app.conf.broker_url和result_backend均为 DB 11。- 进程同上下文 import probe 确认
main.py、pipeline_backend.py、ppi_string_policy.py、skills/ppi/run.py、celery_app.py全部来自目标根目录。
/api/celery/overview 同时看到了一个不属于 9010 的 GWAS worker;本任务只把五个 plantai_4090_9010_* worker 计入 9010 基线。
真实 03:21 请求
- conversation:
memory_storage/conversations/202607/conv_20260720_210554_default.json - job:
job_1784552755238_b8762f - 用户消息:
2026-07-21 03:21:36.987480,执行ppi分析 - target scope:
workspace/job_1784552755238_b8762f/final/Sv.HKL.HKL.target-Sv.target_only.scope.json - scope identity:
HKL.target-Sv.target_only,target=Sv,reference=[]。 - job config 的真实身份行:
Species_Code=Sv、Species_Name=Setaria_viridis、Species_Role=target。
消息链:
03:21:40.525445:前端宣称“前置数据检查通过”,自动插入 Ortholog。03:21:50.359623:提交 Ortholog。03:21:56.230245:随后又报告参考物种未选择、缺 PEP、无近源推荐。03:21:58.536206:Ortholog/PPI 均暂停,ppi_reference_data_missing。
真实 9010 API 只读重放:
{
"status": "needs_reference_data",
"issue_code": "ppi_reference_data_missing",
"target_species": ["Sv"],
"target_string_supported": false,
"selected_taxon_id": "",
"reference_species": "",
"required_next_stage": "ortholog",
"decision": "needs_reference_species",
"reference_recommendations": []
}
生产 data/string/v12.0 当前不存在。
registry-only TaxID 到执行层的断点
具体链路与断点:
gfa_core/string_species_registry.py:320-382的 resolver 已能返回数字selected_string_taxon_id;fixture 中Brassica napus → 3708。apps/web/pipeline_backend.py:1764-1765生产预检仍调用旧species_to_string_code()和 Ft 静态推荐,没有调用新 resolver。apps/web/pipeline_backend.py:2024-2042响应没有species_resolution或 target tree/selection mode。apps/web/pipeline_backend.py:8839-8843真正 PPI 执行先用旧species_to_string_code()校验显式值,数字3708会被拒绝。apps/web/pipeline_backend.py:9070,9080ID map 路径和 CLI--species均继续传旧 code 槽位。skills/ppi/run.py:102-107的StringAPI.resolve_species_id()调用string_taxon_id()。gfa_core/ppi_string_policy.py:126-128又将输入通过旧 code map 查询,非旧表 TaxID 返回空。skills/ppi/run.py:618,649-652因此在真正 STRING mapping/network 请求前已经失败。
硬验收点:fixture registry member 3708 必须按同一个数字依次通过 preflight → execute/task params → backend run_stage → CLI --species → StringAPI.species_id → STRING request species → Manifest。任一层回到旧三字母 map,Gate 4 失败。
RED 测试与失败输出
新增文件:tests/unit/test_string_ppi_production_wiring_red.py。
运行环境:9010 目标主机,目标目录,/home/xzq/miniconda3/envs/test4py311/bin/python -m pytest。
RED 1:Sv/Setaria 未接 snapshot resolver
tests/unit/test_string_ppi_production_wiring_red.py::test_setaria_scientific_name_reaches_snapshot_resolver
E KeyError: 'species_resolution'
1 failed
失败原因正确:backend 预检响应仍无 snapshot resolver 决策对象。
RED 2:registry-only TaxID 被执行层旧 map 拒绝
tests/unit/test_string_ppi_production_wiring_red.py::test_registry_only_numeric_taxon_reaches_string_execution
skills/ppi/run.py:106
E ValueError: Unsupported or empty STRING species: '3708'
1 failed
失败原因正确:resolver fixture 已证明 3708 是 registry member,但 StringAPI 仍要求旧 code 映射。
RED 3:无确认参考仍请求 Ortholog
tests/unit/test_string_ppi_production_wiring_red.py::test_preflight_without_confirmed_reference_never_requests_ortholog
E AssertionError: assert 'ortholog' == ''
1 failed
失败原因正确:reference_species 和 mapping 均为空,API 却返回 required_next_stage=ortholog。
Sources / confidence / gaps
高置信 sources:/proc 进程信息、9010 live API、conversation JSON、job scope、config.xlsx、实际 pytest failure、关键源码和 SHA256。
剩余 gaps:
- Web access log 不记录请求 JSON,真实 preflight payload是依据 conversation/job/scope重放;原始 UI 请求体无法从现有日志逐字恢复。
- 计划要求的完整 STRING snapshot 尚未部署,因此当前不能判定完整 v12 数据中 Setaria viridis 最终是
exact_string还是tree_nearest;RED 测试刻意允许两者,但不允许 unresolved。 - 本地共享目录不是完整 Git repository(
.git仅含info/),因此无法给出可靠 commit/dirty-state;已改用目标主机绝对路径与 SHA256 冻结基线。 - 本轮未做生产修改、服务重启或真实 PPI 提交,符合 Task 0 边界。