docs: estructura del repositorio y validación E2E previa a v0.3.0 - #110
Merged
Conversation
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.
Estructura del repositorio y validación E2E previa a
v0.3.0Sin issue asociado: es documentación de trabajo ya hecho, no una unidad de
trabajo. Los hallazgos que sí requieren acción salieron de aquí y tienen su
propio sitio — #107, #108 y #109.
Cierra los dos huecos que quedaban antes de tagear H2: el sistema nunca se había
ejercitado de punta a punta desde que existe la API REST, y no había ningún
documento que dijera dónde debe vivir cada cosa.
Qué incluye
docs/estructura.md(nuevo): qué contiene cada carpeta y, sobre todo, quécualifica a una pieza para vivir en ella. Tabla por fichero dentro de
backend/.README.md: la validación E2E con sus tres hallazgos y el caso estrella.backend/config/settings.py: el comentario demcp_execute_timeout, queafirmaba «~20 s» cuando lo medido son 51,6. Único cambio en código, y no
altera comportamiento.
Criterios de pertenencia, no descripciones
La distinción no es retórica. Una descripción se escribe mirando lo que ya hay
dentro, así que por construcción lo legitima: «
api/contiene endpoints,esquemas y la orquestación del análisis» es cierta, y habría dado por bueno que
la lógica de veredictos viviera ahí.
Un criterio es una pregunta que se contesta sí o no sobre una pieza concreta, y
puede delatar a algo que ya está dentro:
api/core/integrations/config/evaluation/Aplicarlos destapó cuatro tensiones y dos bugs sin ejecutar una línea. La
primera —la orquestación en
api/— resultó tener consecuencia de diseño y seanaliza en #107: el servidor MCP no expone ninguna herramienta que contraste
señales, así que el agente conversacional no puede reproducir el veredicto del
formulario.
También se borró
backend/tools/, resto de la estructura anterior al patrónintegrations/*/tool.py: contenía sólo un__pycache__y git no rastreaba nada.La validación E2E
Los 175 tests mockean la red y el protocolo, así que nada había probado la cadena
real con el servidor MCP levantado por HTTP. Se corrió con los dos backends
NLP y con el historial apuntado a un fichero temporal.
GET /healthok, tres integracionesGET /toolsdegraded: falseexecuteválido / 404 / 422POST /analyzelocalPOST /analyzeremotoGET /history+ 10 filtrosTodo funcionó. Y aun así salieron tres cosas.
1 · El timeout de ejecución no tiene arreglo por número.
detect_clickbaitcontra un servidor MCP en frío tardó 51,6 s con un corte de 60, y con el
modelo ya descargado. Subirlo no lo arregla: con caché fría el tiempo depende del
ancho de banda y no está acotado. La solución es que cargar no ocurra dentro de
una petición — calentamiento al arrancar, que es tarea de H4.
2 ·
NLP_BACKEND=remoteno hace remoto el sistema. Sólo conmuta dos de lascinco señales; incoherencia, léxico y lineal son siempre locales. Por eso el
«remoto en frío» tardó 38,9 s: era MiniLM cargándose en local, no la red.
Consecuencia para H4: la imagen Docker necesita torch aunque se despliegue en
modo remoto.
3 · Los ~20 s del arranque en frío son ~105 s con el backend local y las
cinco señales.
El caso estrella, en vivo
El primer análisis reprodujo el listicle de ejemplo:
La dimensión
formatenía 2 contra 1 y el sistema se negó a resolverlo:declaró la discrepancia en vez de votar. El tono no votó. Y la jerarquía hizo el
resto.
Pero los dos que coincidieron son justo los que comparten extracción de
rasgos, y el que discrepó es el único independiente. Ese «2 contra 1» es un
par acoplado contra una vista independiente: con agregación por mayoría se
habría dictaminado
forma = clickbaitapoyándose en dos señales que ven lomismo.
El diseño resultó más robusto de lo que sabía ser — y por eso el caso observado
tranquiliza más de lo que debería: protege cuando las señales acopladas
discrepan, y es vulnerable cuando coinciden, que es lo que hacen casi
siempre. Abierto como #109.
Notas
documentación, y quedan declarados como límites conocidos de
v0.3.0.1,6 GB y lo que permite que el CI corra sin torch. No se sustituye: se
complementa con un disparo deliberado en el arranque.
documento en un refactor encubierto es cómo se queda a medias.
HuggingFace (
HF_HUB_OFFLINE=1). Es barato y va con H4.