Zum Inhalt

Trazabilidad del protocolo para el mock guiado EPPA

Propósito y límite

Este documento gobierna el mock educativo, la imagen sintética maestra y el E2E de sistema. Distingue evidencia técnica reproducible de reglas clínicas que deben ser confirmadas por Cristina. No es una validación clínica.

La transcripción autorizada del recorrido se usa para justificar el orden y las acciones del mock. No tiene marcas de tiempo; por lo tanto, las citas de este documento son citas de líneas de transcripción, no timestamps del video. No se debe convertir una cita de transcripción en una afirmación de precisión anatómica, diagnóstico o validación sobre personas.

El goal solicitó trabajar con workflow-orchestrator. Ese skill no está instalado en este entorno; se aplica su equivalente local team-lead: fases secuenciales, evidencia por requisito y revisiones independientes antes de cerrar el trabajo.

Fuentes y acceso

Fuente Evidencia disponible Uso permitido Estado
Video de presentación MATLAB Drive id 1zgTLiY7W-Ok2XrO7InXoW8QLCFTz2VcG; nombre Presentación Posturografía.mp4; SHA-256 2b3d6a26ab44185b0ed0b91f1b4f9dca05a9370595cff58206841cdab7d99101; duración 00:08:42.97, 1918 × 1080, H.264/30 fps. El hash coincide con docs/source-manifest.tsv. Secuencia visual, encuadre, mapeo de vistas, calibración y referencias. Auditado fuera del repo; no se materializó el pointer LFS ni se copió el MP4 al proyecto.
Transcripción autorizada del recorrido Archivo local externo, no LFS: /Users/luis/personal/research/investigacion-labis/med-posturography-systems-master/datos/resultados-analisis/crislabis.txt; SHA-256 afea4d0d7bf156a475cf88726b4c73a07aeae580873dd964eefa9571952dad81. Secuencia operativa, precondiciones, marcación, calibración, referencia, análisis y exportación. No contiene timestamps; las referencias son líneas de transcripción.
Email de Cristina, 2026-07-05 Gmail id 19f32907574aafdf, asunto probando EPPA Python... van comentarios. Decisiones de UX/operación listadas en la matriz de correos de este documento. Evidencia de requisitos de producto; no es una validación clínica.
Follow-up de Cristina, 2026-07-11 Gmail id 19f5294d1fe3b932. Control de cambios del listado C1–C15. Sólo coordinó una reunión y no agregó correcciones; C15 es el último ítem del email completo del 2026-07-05.
Decisión B de calibración, confirmada el 2026-08-01 Feedback directo de Luis después de la reunión y contraste con el video MATLAB histórico. Fondo blanco reglado; cuadrados pequeños de 5 × 5 cm; dos cuadrados contiguos forman 10 cm; segmento horizontal a la izquierda de pantalla, junto al cuerpo y cerca de la cadera, en las cuatro vistas; recalibración por fotografía. Decisión cerrada. Reemplaza cualquier descripción geométrica previa incompatible, incluida la propuesta lateral candidata.
Aprobación de correcciones de ángulos Gmail id 19eb99f6d945b864 (2026-06-11) y confirmación de signo id 19ebd6f833483374 (2026-06-12). Correcciones cerradas de codo y rodilla para ambos perfiles, descritas en la matriz MATLAB. Aprobación acotada; no habilita otras excepciones.
Catálogo de marcadores src/app/data/marker-definitions.ts. IDs, nombres canónicos, vistas y orden técnico actual. Confirmado para mock sintético.
Protocolo funcional actual docs/testing/GUIDED-LANDMARK-TESTING.md. Captura sintética, revisión, procedencia, calibración y límites. Decisión B implementada; atlas, oracle, hashes y gates regenerados y revalidados.
Contrato MATLAB técnico docs/testing/TEST_CASES.md y docs/matlab-python-validation.md. Fórmulas, calibración y paridad raw/Python versionada. Confirmado técnico; las convenciones clínicas se tratan por separado.

No materializar sources/**, .tmp/** dentro del alcance versionado ni objetos LFS. El video se descargó sólo a /tmp para la auditoría de lectura y no alteró el pointer del repositorio. Luis autorizó el 2026-08-01 el uso local interno de las fotos enviadas por Cristina, pero no fue necesario versionarlas para la evidencia funcional. Ninguna imagen de paciente se copió, exportó ni versionó. El atlas schema 2 regenerado incorpora la decisión B; sus assets WebP lossless permanecen fuera del filtro LFS. Las fuentes privadas se citan por identificador, fecha y requisito autorizado, nunca reproduciendo contenido personal o datos clínicos identificatorios.

Matriz paso a paso

Paso del mock Comportamiento que debe mostrar Evidencia verificable Estado clínico
Alcance Herramienta de investigación; fixture no es paciente ni validación diagnóstica. GUIDED-LANDMARK-TESTING.md. Confirmado.
Preparación por experto Explicar que el evaluador palpa antes de fotografiar y coloca stickers/semiesferas; el sistema no decide el punto anatómico desde la foto. Transcripción crislabis.txt:66-75. Requisito de método observado; el mock no lo valida clínicamente.
Tamaño y fotografía Mostrar marcadores de 1 cm; pedir flash, cámara/foto calibrada y un fondo blanco reglado cuyos cuadrados pequeños midan 5 × 5 cm. Transcripción crislabis.txt:118-130,170; decisión B de Luis, 2026-08-01. Montaje confirmado; no equivale a validación clínica.
Elegir vista y orden Capturar en este orden: anterior, posterior, lateral derecha, lateral izquierda. El mock debe explicar que izquierda/derecha son del paciente al nombrar landmarks. Transcripción crislabis.txt:48-52,108-110,142-144,60; catálogo marker-definitions.ts:9-100. Orden operativo confirmado por la transcripción; catálogo técnico actual confirmado.
Seleccionar y colocar Elegir landmark, confirmar el nombre, hacer zoom, activar cursor y clicar. Mostrar X/Y y círculo verde sólo como confirmación de captura. Transcripción crislabis.txt:50-52,142,254; MATLAB posturografiaMARAJulio2024 (1).m:172-213. Confirmado como comportamiento legado; no mide precisión de palpación.
Corregir error Permitir borrar la fila errónea y remarcarla; el mock debe explicar el riesgo de mezclar nombre y marcación. Transcripción crislabis.txt:58,198-202; MATLAB posturografiaMARAJulio2024 (1).m:283-318. Confirmado funcionalmente.
Punto no visible y alternativa Si un punto no es visible, mostrar Punto no visible y 0 cm/0° sin bloquear el resto. Usar lóbulo sólo cuando el tragus no pueda utilizarse. Transcripción crislabis.txt:112-116,146-148. Regla operativa observada; diagnóstico asociado sigue sujeto a revisión clínica.
Puntos de superficie Explicar que los ápex cervical/lumbar se marcan como superficie/punto de inflexión, no como sticker previo. Transcripción crislabis.txt:148-158. Confirmado como instrucción del recorrido.
Guardar cada vista Guardar un snapshot/archivo canónico por vista y verificar las cuatro vistas. Un nuevo guardado de la misma vista reemplaza el anterior y lo comunica; nunca deja dos versiones ambiguas. C9; transcripción crislabis.txt:108-110,142-144,368-392; MATLAB posturografiaMARAJulio2024 (1).m:222-238. Confirmado funcionalmente.
Cargar e importar Para el análisis, abrir imagen e importar el archivo de la vista para machear las X/Y; no cubrir la foto con overlays innecesarios. Transcripción crislabis.txt:202-254. Confirmado como flujo legado.
Calibración Hacer zoom y seleccionar dos cruces exactos separados por dos cuadrados pequeños contiguos de 5 cm. El segmento de 10 cm es horizontal, se ubica a la izquierda de pantalla, junto al cuerpo y cerca de la cadera, en las cuatro vistas. Recalibrar cada fotografía y calcular FC = 10 / D12. Decisión B de Luis, 2026-08-01; coincidencia visual con el video MATLAB histórico; fórmula MATLAB anterior InterfazMedicionFrenteJulio2024v2 (1).m:1372-1413. Regla confirmada, implementada y revalidada en atlas, oracle y gates.
Referencia anterior y posterior Después de calibrar, ampliar y activar la herramienta; seleccionar los dos maléolos de izquierda a derecha en la pantalla. Mostrar la horizontal y la vertical automática por el punto medio. Conservar el mismo orden en pares de superficie sensibles a x2-x1 —cóndilos, gemelos y extremos poplíteos—; no reutilizarlo para decidir la lateralidad de la calibración. Transcripción crislabis.txt:264-266,300-316; MATLAB anterior InterfazMedicionFrenteJulio2024v2 (1).m:348-408,1080-1113; posterior InterfazMedicionEspaldaJulio2024v2 (1).m:272-323,1343-1709. El legado no valida que los clicks sean maléolos: el mock/E2E debe nombrarlos y verificarlos explícitamente.
Referencia lateral Mostrar que la vertical pasa por el marcador importado Borde anterior de Maléolo del perfil; pedir dos clicks para la horizontal. MATLAB InterfazMedicionPerfilDerechoJulio2024 (1).m:321-385 y variante izquierda equivalente. Semántica técnica comprobada en código; no declarar validación clínica adicional.
Tangentes laterales Elegir cabeza, dorsal y sacro; clicar el punto más posterior. Para sacro, explicar que se usa el borde óseo posterior y no masa glútea. Transcripción crislabis.txt:324-346; MATLAB perfil derecho InterfazMedicionPerfilDerechoJulio2024 (1).m:562-612. Confirmado como comportamiento legado.
Resultados y signos Mostrar región, variable, tipo, unidad, medición y diagnóstico; presentar a dos decimales y explicar derecha positiva/izquierda negativa. Transcripción crislabis.txt:272-282. Convención de presentación observada; rangos/diagnósticos clínicos requieren el oracle aprobado.
Exportar por vista Descargar el CSV técnico de la vista, capturar imagen según el flujo legado y comprobar tabla, marcadores y overlays persistidos. Transcripción crislabis.txt:290-296,318-322,364,368-392; workflow Playwright. Confirmado como flujo operativo; el mock no persiste datos de pacientes.
Excel consolidado Descargar desde la app real un único workbook con anterior, posterior, perfil derecho y perfil izquierdo; marcar faltantes u obsoletos como Pendiente. C15; consolidated-analysis-export.spec.ts. Confirmado funcionalmente y separado del CSV educativo del mock.

Matriz de observaciones y consumidor del mock

La siguiente matriz registra solamente el requisito o decisión autorizada, no el cuerpo de correos privados. Las filas del 2026-07-05 provienen del email 19f32907574aafdf; el follow-up 19f5294d1fe3b932 se debe conservar como evidencia de seguimiento. Ninguna fila amplía el alcance hacia validación clínica.

Comentario autorizado Consumidor previsto Criterio para mock/E2E Estado
Logo Entrada y encabezado del mock. Usar identidad aprobada disponible; no sustituirla por una identidad clínica inventada. Requisito de UX.
Disclaimer y decisión legal Primera pantalla y despliegue. Conservar el disclaimer; no ocultarlo ni convertirlo en afirmación diagnóstica. Requisito obligatorio.
Planos Explicación de vistas y resultados. Distinguir frontal/coronal, perfiles/sagital y horizontal sólo donde el flujo lo soporte. Requisito de contenido.
Layout y zoom Captura, calibración, referencia y tangentes. Mantener imagen legible, zoom antes de clicks de precisión y controles no superpuestos. Requisito de UX.
Fondo y calibración Preparación, mock y E2E. Fondo blanco reglado; cuadrados pequeños de 5 × 5 cm; dos cuadrados contiguos para el segmento horizontal de 10 cm; izquierda de pantalla, junto al cuerpo y cerca de la cadera, en las cuatro vistas; recalibración por fotografía. Decisión B confirmada, implementada y revalidada.
Sin números Mock y artefacto visual. No convertir el mock educativo en una numeración clínica no autorizada; los IDs técnicos pueden vivir en leyenda/test, separados de la interfaz explicativa. Requisito de presentación.
Guardado por vista Snapshot y archivo de marcadores. El último guardado de una vista reemplaza el anterior y lo comunica, según C9. Requisito funcional aprobado.
Reemplazo de captura Sustitución de imagen, puntos o resultados. Pedir confirmación, invalidar calibración, referencias, superficie y resultados dependientes; una redetección nunca pisa silenciosamente una corrección humana de la misma captura. Requisito de seguridad de flujo.
Líneas finas Calibración, referencia y análisis. Dibujar líneas visibles pero finas, sin ocultar anatomía ni el material sintético. Requisito visual.
Acceso local y banner Ruta de demo y despliegue. El mock sintético sin pacientes no requiere login clínico en localhost, pero exige EPPA_ENABLE_GUIDED_DEMO=1 y un EPPA_ENV test/dev/development/local; staging y producción fallan cerrados. Conservar el banner de prueba. Requisito de despliegue.
Rename Rutas, controles y textos. Aplicar únicamente los nombres aprobados en el inventario de UX; no usar el rename para cambiar semántica clínica. Requisito de terminología.
Secciones obligatoria/opcional Flujo guiado y resultados. MEDICIÓN EN SUPERFICIE contiene cóndilos, gemelos y tangentes obligatorios. MEDICIÓN MANUAL A ELECCIÓN contiene el plus opcional y mantiene su título visible. C13; requisito de terminología y guía.
Persistir overlays Recarga, análisis y exportación. Persistir puntos, calibración, referencias y líneas de análisis que sean parte del estado guardado; invalidar los que dependan de datos reemplazados. Requisito funcional.
Export por vista Cierre técnico de una vista. Verificar CSV y estado guardado; comparar contenido con el oracle técnico. Requisito funcional.
Excel consolidado Cierre de evaluación. Verificar un único workbook de cuatro vistas y estados Pendiente. C15; requisito funcional.
Duda: autenticación repetida o error al medir una región Sesión y todos los análisis regionales. Un 401 intenta exactamente un refresh, conserva la vista solicitada y no vuelve a pedir credenciales; si refresh no deja una cookie utilizable termina en un solo re-login; ante outage muestra reintento. Resuelto: auth-gate.spec.ts, 5/5 PASS el 2026-08-01.
Duda: un único Excel con las cuatro vistas Cierre de evaluación desde inicio. Un workbook contiene las cuatro vistas vigentes; las faltantes/stale quedan explícitamente pendientes y una sesión vacía produce cuatro filas pendientes. Resuelto: consolidated-analysis-export.spec.ts, 3/3 PASS el 2026-08-01.

Decisiones que no pueden inferirse

No hay una corrección posterior conocida al listado C1–C15: el follow-up del 2026-07-11 sólo coordinó una reunión. Si aparece un correo nuevo, se debe registrar identificador, fecha, alcance y consumidores antes de cambiar el atlas o el oracle. C11 y C15 son no-regresiones resueltas, no dudas abiertas.

La ubicación de calibración tampoco es una duda abierta: la decisión B fija el segmento a la izquierda de pantalla en las cuatro vistas, junto al cuerpo y cerca de la cadera. El video MATLAB histórico aporta trazabilidad visual coincidente, y Luis confirmó la regla explícitamente el 2026-08-01.

Antes de afirmar fidelidad clínica al video de Cristina se debe registrar una respuesta autorizada para cada decisión que la transcripción y el MATLAB no puedan resolver por sí solos:

  1. Orden manual clínico definitivo de los landmarks cuando difiera del catálogo técnico actual.
  2. Preparación física final de persona, cámara, encuadre y stickers, salvo el contrato ya resuelto de fondo cuadriculado y calibración horizontal.
  3. Ratificación clínica de las rectas/anclajes de posterior y ambos perfiles; el procedimiento técnico legado ya está citado en la matriz paso a paso.
  4. Signos, rangos y etiquetas diagnósticas.
  5. Cualquier corrección angular adicional a las cuatro filas ya aprobadas en 2026-06-11/12, con variable, vista, convención MATLAB original y salida EPPA esperada.

Hasta resolverlas, el mock puede enseñar el flujo sintético y debe etiquetar cualquier paso afectado como pendiente de ratificación clínica. El E2E no puede permitir excepciones implícitas: una diferencia no incluida en el manifiesto de excepciones debe fallar.

Gate de entrada para la implementación completa

La fase de mock puede avanzar como demostración técnica aislada. La fase de paridad integral de cuatro vistas y el cierre del goal requieren una tabla adicional, mantenida junto a este documento:

Regla Fuente autorizada Resolución Consumidor de código/test Estado
Orden/criterio de marcación Transcripción crislabis.txt:48-52,60,142-170; catálogo técnico actual Operativo para mock; contraste clínico de cada landmark aún pendiente. mock + Playwright funcional, no clínicamente validado
Fondo y calibración Decisión B de Luis, 2026-08-01; video MATLAB histórico Fondo blanco reglado, cuadrados pequeños de 5 × 5 cm y segmento horizontal de 10 cm que abarca dos cuadrados, a la izquierda de pantalla, junto al cuerpo y cerca de la cadera, en las cuatro vistas; recalibración por fotografía. atlas + mock + Playwright + oracle MATLAB decisión confirmada; atlas, oracle, hashes y gates regenerados y PASS técnico
Referencia anterior/posterior Transcripción crislabis.txt:264-266,300-304; MATLAB anterior/posterior citado en matriz Horizontal de maléolos y vertical derivada implementables; ratificación clínica separada. análisis + Playwright funcional, no clínicamente validado
Referencia lateral MATLAB de perfiles citado en matriz Vertical por maléolo anterior importado y horizontal manual de dos clicks. análisis + Playwright funcional, no clínicamente validado
Excepciones de ángulo Emails 19eb99f6d945b864, 19ebd6f833483374; baseline MATLAB corregido Sólo codo y rodilla de ambos perfiles según matriz; ninguna excepción implícita. oracle MATLAB aprobado y acotado

Matriz de paridad MATLAB y excepciones acotadas

El baseline técnico reproducible es el MATLAB empaquetado para Cristina en el commit fcf5a016a2ccbb3387c51ec2a56c20170c262b21, que incorpora la corrección de 62b5e498938243891a017f569c3c58ebe93f582a. No se deben comparar los resultados clínicos de EPPA contra el MATLAB legacy anterior y llamar a esa diferencia una excepción genérica: el baseline corregido es el esperado. La siguiente lista es exhaustiva solamente si se audita contra el baseline raw anterior:

Variable Vista MATLAB raw anterior EPPA / MATLAB corregido esperado Motivo y referencia Estado
Ángulo de codo Lateral derecha Ángulo geométrico, extensión ≈ 180° 180 - raw; extensión = 0° 62b5e498, matlab-para-cristina/LEEME.txt excepción individual documentada
Ángulo de rodilla Lateral derecha Ángulo geométrico; extensión ≈ 180° 180 - abs(raw), signo negativo para recurvatum 62b5e498, matlab-para-cristina/LEEME.txt excepción individual documentada
Ángulo de codo Lateral izquierda Ángulo geométrico, extensión ≈ 180° 180 - raw; extensión = 0° 62b5e498, matlab-para-cristina/LEEME.txt excepción individual documentada
Ángulo de rodilla Lateral izquierda Ángulo geométrico; extensión ≈ 180° 180 - abs(raw), signo negativo para recurvatum 62b5e498, matlab-para-cristina/LEEME.txt excepción individual documentada

LEEME.txt afirma que las demás mediciones no cambiaron. Esto identifica una fuente técnica y reproducible; no habilita a declarar la convención como validación clínica ni a agregar una quinta excepción.

Alcance MATLAB vigente Fuente versionada Cobertura Estado para este goal
Anterior Oracle MATLAB R2026a versionado 15 métricas soportadas PASS 15/15 sobre el atlas B regenerado
Posterior Oracle MATLAB R2026a versionado 16 métricas, incluidos cuatro clicks poplíteos, dos midpoints y dos calcáneos PASS 16/16 sobre el atlas B regenerado
Laterales Oracle MATLAB R2026a versionado 15 métricas por perfil, incluidas tangentes, ápex, traslaciones, codo y rodilla PASS 15/15 por perfil con mapeo B confirmado
Flujo de sistema guided-landmark-workflow.spec.ts 61/61 métricas; nombres, unidades, signos, dos decimales, diagnósticos y exactamente 4 excepciones PASS 4/4 sobre el stack aislado B; detector y API reales

Por lo tanto, el E2E de sistema acepta sólo esas cuatro transformaciones desde rawMatlab hacia la salida corregida; toda otra diferencia falla. El expected conserva ambos valores para que el baseline legacy y la corrección aprobada sean auditables, sin convertirlas en una tolerancia global.

Evidencia vigente posterior a la decisión B

La tabla siguiente registra la evidencia ejecutada después de implementar la decisión B. Acredita técnicamente la nueva grilla, el segmento a la izquierda de pantalla y la recalibración por fotografía sobre el fixture sintético. No acredita precisión anatómica ni validación clínica sobre pacientes.

Gate Evidencia Resultado
Atlas compartido python/test_synthetic_capture_fixture.py carga src/fixtures/guided-landmark-atlas.v1.json; verifica 64 IDs, 18 superficies, cuerpo, grilla, stages, cuatro assets WebP lossless, gate del perfil explícito y detector real en cuatro vistas. 72 PASS; focal calibration or grid 13/13 PASS con 59 deseleccionados; Vitest atlas + calibración clínica 14/14 PASS; detector sintético 17/19/11/11; atlas SHA 57ea00d7c5f357b98e4c5532cba59669eec03ff79fd8ae497315070414fc0fc4
Perfil de detector Una llamada sin perfil conserva byte por byte los priors productivos del baseline; guided-synthetic-v2 sólo viaja con la identidad del fixture y falla cerrado fuera del gate no-productivo. PASS: default productivo, nombre desconocido, deny/allow por entorno, redetección, stale identity, traslación, escala y crop; thresholds sin cambios
Compatibilidad API lateral Payloads point-only para cuatro regiones contra /api/lateral/... y /api/v1/lateral/..., comparados con side: right explícito. 16/16 regional parity PASS; ocho casos omit-side preservan estructura y valores legacy
Oracle MATLAB real MATLAB R2026a Update 4 genera expected y corrida externa; schema, provenance con commit base + snapshot canónico de siete inputs, proyección atlas y digest completo se validan. 61/61 métricas, 4 excepciones exactas y 12/12 tests del validador PASS (10 negativos de adulteración + 2 positivos); expected SHA c04d37771590dfea2d3e10cd287c47a5509205da6415103de9101ccc12bb07b6
Mock navegable playwright/e2e/guided-landmark-demo.spec.ts contra build de producción aislado con EPPA_ENABLE_GUIDED_DEMO=1 y storage state vacío. 5/5 PASS: acceso localhost sin login clínico, alcance sintético honesto, progresión por etapas, inventarios, cuatro vistas, responsive, accesibilidad y ES-only; unit test niega staging/producción
Flujo funcional UI + backend guided-landmark-workflow.spec.ts con build fresco, SQLite temporal, auth test-only y detector/API reales. 4/4 PASS y 61/61 métricas contra el oracle MATLAB; sin 5xx ni fallos de transporte
Dudas del último email auth-gate.spec.ts + consolidated-analysis-export.spec.ts, inmediatamente después del flujo guiado y sin reiniciar servidores. 8/8 PASS: 5 estados de auth/refresh y 3 contratos Excel de cuatro vistas
Unitarias frontend npm run test:unit. 42 archivos, 367 PASS
Calidad y build frontend npm run typecheck, npm run lint, build de producción Next y git diff --check. PASS; lint con 0 errores y 8 warnings heredados; 60/60 páginas estáticas
Backend no-LFS PYTHONPATH=python python3.11 -m pytest -q python -k 'not cargar_archivos_reales'. 500 PASS, 15 skip, 4 casos .mat LFS deseleccionados deliberadamente
Browser final aislado posterior a B Snapshot /tmp/eppa-screen-left-acceptance-final-20260801.K4qN5q, build gxSIiC3C50tXd62C3nqPN y stack persistente localhost:19518/18518. 17/17 PASS en 49.2 s sin reinicio: 9 guiados + 8 auth/Excel; mismos PIDs Next 84768 y API 84762 antes/después, ambos HTTP 200; 0 respuestas 5xx, ERR_FAILED o CONNECTION_REFUSED
Revisiones independientes anteriores a B /tmp/eppa-guided-final-code-rereview.md y /tmp/eppa-guided-final-verification.md. Evidencia histórica pre-B: code review APPROVED y completion verifier PASS técnico. Su pregunta lateral quedó resuelta después; estos informes no se presentan como una revisión independiente nueva del delta B
Exposición de demo/fixture curl -L sobre inicio, /es/demo/guided-landmark-workflow y /api/testing/synthetic-capture?view=anterior. Inicio 200 → /es; demo 404; fixture API 404 en el smoke de sólo lectura del 2026-08-01

La prueba de despliegue fue sólo lectura: no autenticó, no subió imágenes y no creó sesiones de evaluación. La ruta demo permanece denegada sin el flag autorizado. La aceptación técnica vigente de esta lane es localhost; el smoke desplegado es complementario y no reemplaza el build aislado ni MATLAB nativo. Atlas, mock, expected y gates corresponden a la decisión B y están revalidados. Esta aceptación técnica sintética tampoco constituye validación clínica.