# Task 2 Report — Reference-bundle ID evidence schema ## Status DONE_WITH_CONCERNS ## Root cause `_fasta_header_index()` preserved the complete FASTA header but extracted only `gene` and `protein_id` metadata. Consequently, numeric NCBI GeneID evidence in `[db_xref=GeneID:]` was not represented as a structured record field, and `_build_reference_bundle_id_map()` had no `ncbi_gene_id` TSV column. ## Changes - `apps/web/pipeline_backend.py` (reference-bundle parsing/schema) - Parse the exact numeric annotation form `[db_xref=GeneID:]` into a separate `ncbi_gene_id` record field. - Add `ncbi_gene_id` to `pep_cds_idmap.tsv`, using the existing CDS-first, PEP-fallback precedence. - Leave the existing `gene_id` extraction and selection unchanged, so `LOC110806180` remains the `gene_id` value. - Emit an empty string when neither FASTA record supplies numeric GeneID. - `tests/unit/test_pipeline_backend_execution_env.py` (focused regression) - Add a real parser/schema test whose CDS header contains both `[gene=LOC110806180]` and `[db_xref=GeneID:110806180]`. - Assert the TSV retains `gene_id=LOC110806180` and separately emits `ncbi_gene_id=110806180`. - No manifest count was added because Task 2 does not require one and the parser/schema behavior is sufficient. ## TDD evidence ### RED Command: ```bash /home/xia-lab/miniconda3/envs/test4py311/bin/python -m pytest tests/unit/test_pipeline_backend_execution_env.py -k reference_bundle_id_map -q ``` Result before production edits: exit code `1`; `1 failed, 30 deselected`. The expected assertion path failed with: ```text KeyError: 'ncbi_gene_id' ``` The preceding `gene_id == "LOC110806180"` assertion passed, confirming the failure was specifically the missing numeric GeneID schema field. ### GREEN — focused regression The same command after the minimal production edit exited `0` with: ```text 1 passed, 30 deselected in 0.08s ``` ### GREEN — required focused suite Command: ```bash /home/xia-lab/miniconda3/envs/test4py311/bin/python -m pytest tests/unit/test_pipeline_backend_execution_env.py -k 'reference_bundle or ppi' -q ``` Result: exit code `0`; `25 passed, 6 deselected in 1.83s`. ### Syntax compilation Command: ```bash /home/xia-lab/miniconda3/envs/test4py311/bin/python -m py_compile apps/web/pipeline_backend.py ``` Result: exit code `0`; no output. ## Scope review The complete diffs against `/tmp/ppi-id-resolution-task2-baseline/` contain only: - the two parser record lines and two TSV schema/row lines in `_fasta_header_index()` / `_build_reference_bundle_id_map()`; - one `csv` test import and the focused regression test; - this report. PPI querying, Ortholog logic, frontend behavior, canonical IDs, contracts, manifests, and unrelated stages were not changed. No service or Celery restart was performed because Task 2 validation directly imports the current module and does not exercise a running service. No diagnostic record was updated because the failure is covered by the new regression test and does not add runtime diagnostic behavior. No real-data/API execution was run because the accepted Task 2 brief explicitly scopes validation to the local reference-bundle parser and focused unit suite. ## Concerns - Pytest emitted the pre-existing `RequestsDependencyWarning` that installed `urllib3`/character-detection package versions do not match the version range expected by `requests`. It did not cause test failures, but the environment dependency skew remains outside Task 2 scope.