{ "schema_version": "string_ppi_task1_snapshot_v1", "captured_at": "2026-07-21T04:26:31+08:00", "mode": "snapshot_deployment_and_validation_only", "deployment": { "ssh_host": "planai5090", "project_root": "/home/xzq/5090/PlantAI-dev4090-7/PlantAI-dev", "snapshot_path": "data/string/v12.0", "backend_modified": false, "ppi_execution_modified": false, "service_restarted": false }, "script_audit": { "path": "scripts/prepare_string_species_snapshot.py", "changed": false, "conclusion": "existing implementation satisfies Task 1 requirements", "features_verified": [ "fixed STRING v12.0 HTTPS source URLs", "temporary download followed by atomic replacement", "strict registry and tree parsing", "parent completeness and non-root cycle validation", "registry/tree STRING membership equality", "required Viridiplantae 33090 and Arabidopsis 3702 checks", "file sizes, SHA256, snapshot_id and source manifest" ] }, "red_baseline": { "fixture_tests": { "command": "/home/xzq/miniconda3/envs/test4py311/bin/python -m pytest -q tests/unit/test_string_species_snapshot.py", "exit_code": 0, "result": "9 passed" }, "full_snapshot_test": { "command": "/home/xzq/miniconda3/envs/test4py311/bin/python -m pytest -q tests/unit/test_string_species_registry.py::test_full_snapshot_supports_registry_only_species_and_second_non_ft_target", "exit_code": 1, "result": "failed as expected", "failure": "StringSnapshotError: STRING snapshot manifest unavailable: data/string/v12.0/source_manifest.json", "failure_classification": "required production snapshot missing; not syntax or fixture error" } }, "download": { "command": "/home/xzq/miniconda3/envs/test4py311/bin/python scripts/prepare_string_species_snapshot.py --version 12.0 --destination data/string/v12.0", "exit_code": 0, "transfer_mode": "download", "string_version": "12.0", "downloaded_at": "2026-07-20T20:24:44.605781+00:00", "snapshot_id": "ede47d546d853d0ec30ee75066976a35c08fd2412e6e5fc7866bbd205fc2eeb3", "source_urls": { "species.v12.0.txt": "https://stringdb-downloads.org/download/species.v12.0.txt", "species.tree.v12.0.txt": "https://stringdb-downloads.org/download/species.tree.v12.0.txt" }, "files": { "species.v12.0.txt": { "size": 1023159, "sha256": "4bb4c99c14db8d695decadf3b403a5b87ac490b468a842cbc54ec2e412400fec", "actual_matches_manifest": true }, "species.tree.v12.0.txt": { "size": 97357335, "sha256": "54cf2e3378cbcabc38e355b044336813b7c0e76292ef34d70f8c8debc2e49ee1", "actual_matches_manifest": true } } }, "validation": { "test_command": "/home/xzq/miniconda3/envs/test4py311/bin/python -m pytest -q tests/unit/test_string_species_snapshot.py tests/unit/test_string_species_registry.py", "test_exit_code": 0, "test_result": "19 passed", "registry_species_count": 12535, "tree_node_count": 2212178, "tree_string_species_count": 12535, "registry_tree_membership_equal": true, "parent_graph_complete": true, "non_root_cycle_absent": true, "root_taxon_id": "1", "required_nodes": { "33090": { "in_tree": true, "parent_taxon_id": "2759" }, "3702": { "in_registry": true, "in_tree": true, "parent_taxon_id": "3701", "is_string_species": true } } }, "setaria_viridis": { "scientific_name": "Setaria viridis", "taxon_id": "4556", "in_tree": true, "tree_parent_taxon_id": "4554", "in_string_registry": false, "is_direct_string_species": false, "name_resolution_source": "scientific_name", "taxid_resolution_source": "explicit_tree_taxon_id", "selection_mode": "tree_nearest", "requires_user_confirmation": true, "issue_code": "ppi_reference_confirmation_required", "candidates": [ { "taxon_id": "4555", "name": "Setaria italica", "lca_taxon_id": "4554", "lca_name": "Setaria", "tree_distance": 2 }, { "taxon_id": "4540", "name": "Panicum miliaceum", "lca_taxon_id": "147428", "lca_name": "Paniceae", "tree_distance": 6 }, { "taxon_id": "888268", "name": "Dichanthelium oligosanthes", "lca_taxon_id": "147428", "lca_name": "Paniceae", "tree_distance": 6 } ], "name_and_taxid_queries_agree": true }, "files_changed": [ "data/string/v12.0/species.v12.0.txt", "data/string/v12.0/species.tree.v12.0.txt", "data/string/v12.0/source_manifest.json", "docs/validation/2026-07-21-string-ppi-task1-snapshot.json", "docs/validation/2026-07-21-string-ppi-task1-snapshot.md" ], "gate_1": { "red_missing_snapshot_reproduced": true, "preexisting_script_accepted_without_change": true, "official_fixed_snapshot_deployed": true, "manifest_and_sha256_verified": true, "full_snapshot_and_registry_tests_pass": true, "setaria_file_fact_recorded": true, "scope_respected": true, "status": "pass" } }