Repository navigation
Las secuencias retiradas vienen de UniParc, y reviewed se queda sin inventar - #1000
Merged
github-actions[bot] merged 2 commits intoOct 10, 2026
Merged
github-actions[bot] merged 2 commits into
github-actions[bot] merged 2 commits into
Conversation
…nventar Una pasada completa dejo 28.868 accesiones sin secuencia. La operacion ya avisaba de que podia pasar: una accesion que UniProtKB deja de servir sale ausente del endpoint por lotes mientras X-Total-Results la cuenta, y su propia URL responde 200 con el cuerpo vacio. Lo que no estaba dicho es que esas secuencias siguen existiendo en UniParc, que guarda todas las que UniProtKB ha tenido alguna vez. Sobre una muestra aleatoria de 600 de esas 28.868, la ruta nueva resolvio 600. POR QUE MERECE UN PASE Y NO ES UN FLECO. Las que faltan no faltan al azar. Por nivel de evidencia sobre las 74 releases, no tiene secuencia el 9,2% de las proteinas que ALGUNA VEZ llevaron evidencia experimental y el 7,8% de las de inferencia curada, contra el 0,07% del resto. En un corte antiguo eso es el 7,5% del banco de donantes y en el ultimo es el 0%: un gradiente de visibilidad que se disfraza exactamente de crecimiento del banco, que es una de las dos cosas que un dataset longitudinal existe para medir. LAS DOS DECISIONES QUE UNIPARC OBLIGA A TOMAR, y por que se toman asi. Una accesion responde una fila por version de secuencia que haya tenido: 670 filas para 600 accesiones. Se toma la de `last_seen` mas reciente, que es la que tenia al desaparecer, porque todas las demas proteinas del almacen llevan la secuencia que UniProt sirve HOY y asi el almacen entero queda bajo una sola convencion en vez de hacer de estas 28.868 las unicas con una segunda regla. Las fechas quedan guardadas para que una pasada posterior pueda revisarlo sin volver a preguntar. Y una fila responde por todas las accesiones que comparten esa secuencia exacta, asi que solo se escriben las del lote: las demas pueden estar perfectamente vivas. REVIEWED SE QUEDA EN NULL. UniParc guarda secuencias, no estado de entrada, y la accesion es una que UniProtKB ya no sirve, asi que no hay estado que leer. Escribir False seria indistinguible de una entrada que UniProt llamo no revisada, y NULL ya significa lo que es cierto: nadie pregunto, o nadie pudo contestar. De ahi el `asserts_reviewed` del store, opt-in, con los dos llamantes que SI leen el estado de una cabecera FASTA intactos. Y de paso, dates_pending deja de mentir en seco. El informe declara en su propio docstring que un seco devuelve None y no 0 "porque cero recuperable y no intentado no son lo mismo", y ese campo rompia la regla: devolvia 0 con 644.659 filas esperando, porque el pase que las cuenta es justo el que un seco salta. Un seco es donde alguien decide si la corrida real merece la pena, asi que el unico campo que decia "nada que hacer" era el que no podia saberlo.
`poetry install` fallaba con "pyproject.toml changed significantly since poetry.lock was last generated", y con el se caian ocho comprobaciones que no tenian nada que ver: test, lint, docs, mutation y pip-audit instalan dependencias antes de hacer su trabajo. Regenerado y comprobado linea a linea: cambian la referencia de protea-sources, su resolved_reference y el content-hash. Nada mas. El torch +cpu sigue donde estaba, que es lo unico que daba miedo de tocar este fichero.
Codecov Report❌ Patch coverage is
Additional details and impacted files@@ Coverage Diff @@
## develop #1000 +/- ##
===========================================
+ Coverage 87.85% 88.02% +0.17%
===========================================
Files 306 330 +24
Lines 23414 25494 +2080
===========================================
+ Hits 20570 22442 +1872
- Misses 2844 3052 +208
🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Usa protea-sources#39, ya fusionado; sube el pin a
fc43ab9.El hueco
Una pasada completa de esta operación sobre el universo de la campaña limpia dejó 28.868
accesiones sin secuencia. Su docstring ya avisaba de que podía pasar, y acertaba: una accesión
que UniProtKB deja de servir sale ausente del endpoint por lotes mientras
X-Total-Resultslacuenta, y su propia URL responde 200 con el cuerpo vacío. Lo que no estaba dicho es que esas
secuencias siguen existiendo, en UniParc.
Medido el 2026-10-11 sobre una muestra aleatoria de 600 de esas 28.868: 600 resueltas.
Por qué es un pase y no un fleco
Las que faltan no faltan al azar. Por nivel de evidencia, a lo largo de las 74 releases:
Y por corte, sobre el banco de donantes experimental:
Un gradiente de visibilidad del 92,5% al 100% se disfraza exactamente de crecimiento del banco,
que es una de las dos cosas que el dataset longitudinal existe para separar. Y es del mismo orden
que el crecimiento real, que va del 84,3% de admisiones en la 156 al 100% en la 235: sin corregirlo
no son distinguibles.
Las dos decisiones que UniParc obliga a tomar
Están en
_newest_per_accession, juntas y con su razón, porque las dos son decisiones y notransporte. El plugin devuelve en crudo justamente para que se tomen aquí.
Qué fila. Una accesión responde una fila por versión de secuencia que haya tenido: 670 filas
para 600 accesiones. Se toma la de
last_seenmás reciente, la que tenía al desaparecer. Laalternativa —la versión vigente en cada corte— sería una respuesta mejor y un corpus distinto:
todas las demás proteínas del almacén llevan la secuencia que UniProt sirve hoy, así que tomar
la más nueva deja el almacén entero bajo una sola convención en vez de hacer de estas 28.868 las
únicas con una segunda regla. Las fechas quedan guardadas para poder revisarlo sin volver a
preguntar.
Qué accesiones. Las secuencias idénticas comparten UPI, así que una fila responde por entradas
que nadie pidió. Sólo se escriben las del lote: las demás pueden estar perfectamente vivas.
reviewedse queda en NULLUniParc guarda secuencias, no estado de entrada, y la accesión es una que UniProtKB ya no sirve:
no hay estado que leer. Escribir
Falsesería indistinguible de una entrada que UniProt llamó norevisada, y NULL ya significa lo que es cierto, que nadie preguntó o nadie pudo contestar.
De ahí el
asserts_revieweddestore_records, opt-in: los dos llamantes que sí leen el estadode una cabecera FASTA siguen escribiéndolo, y hay un test que lo fija. Importa porque el corpus ya
tiene 407.697 proteínas admitidas por haber sido Swiss-Prot en su día cuya evidencia es automática;
un
reviewedequivocado encima de eso no se recupera después.Y
dates_pendingdeja de mentir en secoresolution_reportdeclara en su propio docstring que un seco devuelveNoney no0, "porquecero recuperable y no intentado no son lo mismo". Ese campo rompía la regla: devolvía 0 con
644.659 filas esperando, porque el pase que las cuenta es justo el que un seco salta. Un seco es
donde alguien decide si la corrida real merece la pena, así que el único campo que decía "nada que
hacer" era el que no podía saberlo.
Comprobado
Suite completa en verde salvo
test_settings::test_load_settings_reads_yaml, que falla igual en elárbol sin tocar.
ruff,mypyy el presupuesto de complejidad limpios.Los tests tienen dientes: quitando el guardia de
asserts_reviewedfallan dos. Y el orden de lospases está fijado, porque invertirlo tiene consecuencia: preguntar al archivo primero recuperaría
una secuencia para una accesión que UniProtKB habría resuelto como fusión, y la fusión lleva una
identidad que el archivo no tiene.
Lo que falta después de esto
Mover
DECLARED-REVISION.txty lanzar el job. La precondición se cumple: cero jobs en QUEUED oRUNNING.