Skip to content

feat(sprint-10): excelencia UI/UX (auditoría 10/10) y paridad Windows/Linux - #12

Merged
robertofabiot merged 10 commits into
mainfrom
feature/sprint-10-excelencia-ui-ux
Oct 12, 2026
Merged

robertofabiot merged 10 commits into
mainfrom
feature/sprint-10-excelencia-ui-ux

Conversation

@robertofabiot

Copy link
Copy Markdown
Owner

Resumen de Cambios

Este PR introduce la implementación completa del Sprint 10, correspondiente al cierre exhaustivo de todas las brechas heurísticas, casos límite y restricciones ergonómicas documentadas en la auditoría maestra de UI/UX (Módulos 1 al 7), garantizando un estándar de calidad 10/10 en cada flujo y logrando una apariencia idéntica y predecible en Windows y Linux. Los cambios abarcan ampliaciones aditivas en el motor (prettycalc.core), componentes transversales y refinamiento integral de los seis módulos interactivos en la interfaz de escritorio (prettycalc.ui).

Objetivos Cumplidos

  • Paridad Multiplataforma Windows/Linux: Fuentes empaquetadas (Inter, Fira Code, DejaVu Sans) registradas al arranque, forzado de estilo Fusion, tamaños exclusivamente en píxeles (no puntos ni dependencia de DPI lógico), iconos vectoriales dibujados por la app y eliminación total de dependencias de fuentes y emojis del sistema.
  • Tokens de Accesibilidad WCAG AA y Sistema de Temas: Paletas con contraste garantizado ≥ 4.5:1 (text_muted #C9C3D6, surface_elevated #4A4257), tres temas completos (oscuro, alto contraste y claro) seleccionables en Apariencia (Ctrl+,) y cálculo dinámico de texto legible en badges.
  • Interacción Preventiva, No Modal y Deshacible: Eliminación de diálogos modales para validación de entrada en favor de feedback en línea contextual; soporte integral de Deshacer/Rehacer (Ctrl+Z, Ctrl+Y) para cambios masivos (pegar, reiniciar, cargar ejemplos, intercambiar operandos); auto-completado de celda vacía a 0 al desenfocar; y ejecución universal con Ctrl+Intro.
  • Excelencia Pedagógica en los 6 Módulos: Atajos inteligentes y guía contextual en Cramer/Gauss-Jordan, desglose de contradicción 0 = c con salto al paso, inspección interactiva celda a celda en productos matriciales, traza componente a componente en vectores u ± v y k·v, solución particular destacada en SCI, sincronización gráfica de diagonales de Sarrus, sugerencia de línea óptima en Laplace y clasificación completa con filas permutadas en PLU.
  • Suite de Pruebas Automatizadas: 448 pruebas pasando en verde (113 nuevas pruebas en Sprint 10 cubriendo paridad de layout con 96/144 ppp, aislamiento sin fuentes del sistema, diagnóstico de entradas y flujos completos de los 6 módulos), preservando el 100% de la suite previa sin regresiones.

Detalles de Implementación por Módulo

1. Motor Matemático (prettycalc/core/)

  • Diagnóstico de Entradas (input_diagnostics.py): diagnose_scalar_text() para explicar en lenguaje natural errores comunes de digitación (coma decimal, letra 'O'/'o' por cero, división entre cero a/0, signos duplicados o caracteres inválidos) y decimal_hint() para ofrecer aproximaciones decimales útiles de fracciones.
  • Trazador de Pasos (tracer.py): CalculationStep ampliado con soporte de alert_rows (resaltado de contradicción/filas críticas) y highlight_cells (coordenadas de celdas involucradas).
  • Determinantes (determinants.py): Cierre explícito de triangulación con producto de la diagonal principal \det(A) = (-1)^k \prod u_{ii}, diagonales individuales en Sarrus, marcado de fila/columna en Laplace, función best_expansion_line() para sugerir la línea con más ceros y scaling_breakdown() para la ley k^n \det(A).
  • Clasificador de Sistemas (classifier.py): Incorporación de inconsistent_value en SystemAnalysis para identificar el valor de la fila 0 = c.
  • Operaciones Vectoriales (vector_ops.py): Trazadores pedagógicos trace_vector_sum() y trace_vector_scale() con explicación aritmética elemento por elemento.
  • Exposición pública (__init__.py): Contratos del núcleo matemáticamente exactos con fractions.Fraction intactos; los nuevos diagnósticos y trazadores se consumen limpiamente por sus módulos.

2. Capa de Presentación (prettycalc/ui/)

  • Alineación y Plataforma (platform_setup.py, assets/fonts/): Carga y registro de familias Inter, Fira Code y DejaVu Sans; configuración de escalado PassThrough; renderizado consistente sin depender de tipografías del SO.
  • Sistema de Diseño y Temas (theme.py, preferences_dialog.py): Soporte de temas (oscuro, alto contraste, claro) y selector de escala de interfaz accesible mediante Ctrl+,.
  • Cuadrícula Interactiva (matrix_grid.py, book_matrix.py): Historial de deshacer/rehacer por matriz, explicación en línea de celda errónea en badge inferior, relleno automático de vacíos con 0, atajos Ctrl+Supr y Ctrl+Mayús+Supr, pegado no modal con confirmación y restauración del fondo de celdas destacadas.
  • Controles Comunes y Responsive (feedback.py, scalar_field.py, size_control.py, responsive.py, export.py): Sistema de Toasts no modales con acción, estado «Calculando...», selector directo MatrixSizeControl m × n, ScalarField con chips y pistas decimales, ResponsiveRow y CurrentPageStack que eliminan barras de scroll horizontales a 1366×768, y exportación a PDF, HTML, LaTeX y texto desde el carrusel (stepper_carousel.py).
  • Módulos 1 y 2 (linear_systems_view.py, applied_models_panel.py, matrix_operations_view.py): Spinboxes directos, desactivación instructiva de Cramer con botón para igualar o resolver vía Gauss-Jordan, sumas en vivo en Leontief, botón único de cálculo con Ctrl+Intro, inspector interactivo de entradas $C_{ij}$ y atajos de adaptación de dimensiones.
  • Módulos 3 y 4 (vectors_view.py, vector_set_editor.py, matrix_equations_view.py): Editor de conjuntos vectoriales en FlowLayout, botón deshacible u ↔ v, advertencia previa si $k > n$, inspector de producto exterior $uv^T$, insignia de solución particular en SCI y vínculo de dimensiones de $u$ y $v$ a las columnas de $A$.
  • Módulos 5 y 6 (determinants_view.py, sarrus_diagram.py, lu_factorization_view.py): Sarrus con botón deshacible «Ajustar a 3×3» y diagrama dinámico de diagonales; Laplace con sugerencia visual de ceros; pestañas para adjunta e inversa con opción «Enviar $A^{-1}$ a Matrices»; y visualización LU con filas permutadas en ocre y clasificación completa de $Ax = b$ ante pivote nulo.

3. Pruebas Automatizadas (tests/)

  • tests/core/test_input_diagnostics.py: Pruebas unitarias de detección de coma decimal, 'O' por cero, divisiones entre cero y notación científica.
  • tests/ui/test_cross_platform.py: Cobertura de glifos en fuentes empaquetadas, ausencia total de fuentes del SO y emojis, y paridad geométrica estricta de 113 widgets a 96 y 144 ppp.
  • tests/ui/test_sprint10_ui.py: Pruebas de integración de componentes UI, atajos, desbordamiento, tokens de contraste WCAG AA, y flujos de Módulos 1 y 2.
  • tests/ui/test_sprint10_vectors.py: Flujos del Módulo 3 (desglose de componentes, intercambio de vectores, advertencia $k > n$, pegado de columnas).
  • tests/ui/test_sprint10_equations.py: Flujos del Módulo 4 (solución particular, reporte de fila en SI, propiedades de transformación lineal).
  • tests/ui/test_sprint10_det_lu.py: Flujos de Módulos 5 y 6 (ajuste de orden en Sarrus, sugerencia en Laplace, filas permutadas por $P$ y resolución en LU).

4. Documentación

  • Docs/Sprints/Sprint10/README.md: Memoria técnica completa del Sprint 10 con detalle de requerimientos, decisiones de arquitectura y registro de commits.
  • Docs/design-rules.md: Actualización de tokens cromáticos, especificación de tipografías empaquetadas y reglas de interacción no modal.
  • README.md: Inclusión de la tabla de atajos de teclado globales y soporte de visualización.
  • .github/workflows/tests.yml: Matriz de integración continua en Ubuntu y Windows con Python 3.10 y 3.13.

Casos de Prueba Verificados

Caso Tema Comportamiento esperado Estado
Paridad DPI y fuentes Multiplataforma Geometría idéntica de widgets entre 96 y 144 ppp y sin fuentes del SO Aprobado
Tokens de diseño Accesibilidad Ratio de contraste ≥ 4.5:1 (WCAG AA) en temas oscuro, alto contraste y claro Aprobado
Diagnóstico escalar Validación Explicación en línea para 3,5, 1O, 5/0 y aceptación de 1e5 Aprobado
Contradicción SI Sistemas lineales Salto automático a la fila crítica y reporte exacto de $0 = c$ en dashboard Aprobado
Cramer rectangular Sistemas lineales Deshabilitación instructiva con acciones «Igualar a n×n» y «Usar Gauss-Jordan» Aprobado
Inversa singular Matrices Salto al paso crítico en reducción y bloqueo de acciones de reinversión Aprobado
Desglose vectorial Vectores Pasos elemento por elemento para $u \pm v$ y $k \cdot v$ con trazador exacto Aprobado
Sarrus fuera de 3×3 Determinantes Bloqueo no modal con acción deshacible «Ajustar a 3×3» y diagrama dinámico Aprobado
Laplace óptimo Determinantes Resaltado visual en cuadrícula y recomendación de línea con más ceros Aprobado
Desglose de escala Determinantes Explicación detallada de $k^n \det(A)$ (ej. $2^2 = 4 \Rightarrow 4 \cdot 9 = 36$) Aprobado
Factorización PLU LU Filas permutadas marcadas en ocre sobre $A$ y clasificación en caso singular Aprobado
Resolución 1366×768 Responsive Cero barras de desplazamiento horizontal con ejemplos cargados Aprobado

Instrucciones de Ejecución

Ejecutar la aplicación gráfica

pip install -r requirements.txt
python run.py
  • En cualquier módulo, presione F1 para abrir la hoja completa de atajos de teclado o Ctrl+, para ajustar el tema y escala.
  • En la cuadrícula matricial, edite celdas y use Ctrl+Z / Ctrl+Y para verificar deshacer/rehacer, o Ctrl+Intro para calcular directamente.
  • En Determinantes, ingrese un orden $4 \times 4$ y seleccione Sarrus para comprobar la sugerencia interactiva «Ajustar a 3×3».

Ejecutar la suite de pruebas

pytest

En un entorno sin pantalla:

QT_QPA_PLATFORM=offscreen pytest

Checklist de Revisión

  • El motor nuevo usa solo Python estándar y fractions.Fraction.
  • Cada algoritmo pedagógico deja pasos en StepTracer cuando el sprint lo exige.
  • La interfaz cubre el caso correcto y los errores de dominio sin cerrar la aplicación.
  • Los casos numéricos de clase coinciden componente a componente.
  • pytest pasa, incluida la suite que ya existía antes del sprint.

robertofabiot and others added 10 commits October 12, 2026 14:28
- Fuentes empaquetadas (Inter, Fira Code y DejaVu Sans para simbolos) que
  cubren todos los caracteres de la interfaz; nunca se usan fuentes del sistema.
- Estilo Fusion forzado, tamanos en pixeles (no puntos), politica de escalado
  PassThrough e iconos de dialogo dibujados por la app.
- Sin emojis (Segoe UI Emoji y Noto Color Emoji se ven distintos).
- color-text-muted y la superficie elevada ajustados a 4.5:1; temas de alto
  contraste y claro; badge_style elige el texto legible.
- Pruebas: cobertura de glifos, sin puntos ni emojis, y geometria identica con
  otro DPI logico y sin ninguna fuente del sistema. CI en Windows y Linux.
…licito de det(A)

- diagnose_scalar_text explica coma decimal, letra O por cero, a/0, signos y
  caracteres extranos; decimal_hint da la aproximacion de una fraccion.
- CalculationStep admite alert_rows y highlight_cells.
- La triangulacion cierra con det(A) = (-1)^k (u11)(u22)... = valor y resalta
  la diagonal.
- SystemAnalysis guarda el valor c de la fila contradictoria 0 = c.
- DynamicMatrixGrid: deshacer/rehacer, mensaje en linea de la celda invalida,
  vacio -> 0 al salir, Ctrl+Supr / Ctrl+Mayus+Supr, Ctrl+Intro para calcular,
  aviso con Deshacer y destello al pegar, resize_to.
- Toasts no modales con accion y estado de carga (busy).
- ScalarField/ScalarInput: borde rojo, explicacion, aproximacion decimal y chips.
- MatrixSizeControl: dimensiones directas; ResponsiveRow para pantallas angostas.
- Carrusel: salto a cualquier paso, teclado, alertas de fila nula y exportacion
  a PDF, HTML, LaTeX o texto.
- Dashboard: aviso con boton de accion, copia de resultados y solucion en LaTeX.
- Ventana: atajos (F1), apariencia (Ctrl+,), escala de interfaz y pestanas con
  rotulos cortos cuando el ancho no alcanza.
- Dimensiones directas, estado de carga y Ctrl+Intro al resolver.
- Reiniciar y cargar casos se pueden deshacer; el caso activo queda marcado.
- Cramer deshabilitado con explicacion si el sistema no es n x n, con atajos
  para igualar a n x n o pasar a Gauss-Jordan; det(A) = 0 ofrece clasificar.
- Contradiccion concreta (fila y valor) en el carrusel y en el dashboard.
- Leontief en cuadricula con suma de columnas en vivo; dieta y trafico
  editables; ejemplos quimicos; la vista lleva al usuario a la matriz cargada.
- Un solo boton Calcular, ajuste de dimensiones de B y muestras por pagina.
- Inspector de celdas con badge, escalar con chips y diagnostico inline.
- Transpuesta con B opcional, propiedades ternarias con intermedios.
- Inversa singular salta al paso critico; reutilizar A^-1 como entrada.
- TMI con tarjeta clave y filtros; comparacion de identidades AB vs BA.
- CurrentPageStack: las paginas ocultas no reservan altura.
- Pruebas de Sprint 10 para infraestructura, Modulo 1 y Modulo 2.
Modulo 3 (vectores en R^n):
- u +/- v y k.v con operador visible, intercambio u<->v deshacible y
  carrusel componente a componente (core: trace_vector_sum/scale).
- Metricas con selector segmentado y un solo Calcular; inspector de u v^T
  que resalta u_i y v_j.
- Conjuntos {v1..vk} en varias filas (FlowLayout), pegado de matriz como
  columnas o [v1 .. vk | b], quitar vector con Deshacer, aviso k > n.
- Validacion en linea (sin modales), fila y valor de la contradiccion en
  el SI con salto al paso, ejemplo SCI, veredictos marcados como
  desactualizados al editar, dialogo de teoremas del Modulo 3.

Modulo 4 (A x = b y propiedades de A x):
- Un solo boton Resolver/Verificar, control m x n con Hacer cuadrada,
  ajuste de b, errores en linea y reinicio deshacible.
- Insignia de solucion particular con variables libres resaltadas en SCI
  y fila contradictoria concreta en SI.
- Vincular u y v a las columnas de A, LHS/RHS en una fila (apilables),
  escalar c con pista decimal y chips, nota pedagogica para c = 0.

Transversal: casillas con marca de verificacion, temporizadores ligados a
la vida del widget (evita RuntimeError al cerrar).
Modulo 5 (determinantes):
- Orden n con spinbox directo; errores en linea sin dialogos modales.
- Sarrus fuera de 3x3 ofrece "Ajustar a 3x3" (badge y aviso deshacible);
  un paso por diagonal y esquema grafico que sigue al carrusel.
- Laplace resalta la fila o columna de expansion en A y sugiere la de
  mas ceros (core: best_expansion_line).
- Menores, cofactores, adjunta e inversa en pestanas; "Usar A^-1 como A"
  y "Enviar A^-1 a Matrices" (abre el Modulo 2 en la inversa).
- Propiedades con B al lado de A, escalar k comun y desglose
  k^n = 2^2 = 4 => 4 . 9 = 36 (core: scaling_breakdown).

Modulo 6 (LU):
- Tamano m x n con spinboxes, panel de A que se ensancha con matrices
  anchas, filas permutadas marcadas en ocre con leyenda.
- Etapas en pestanas y clasificacion de A x = b (SCI/SI con variables
  libres) cuando U tiene un pivote nulo o A no es cuadrada.

Transversal: el resaltado de celdas vuelve a verse (la hoja de estilo de
la cuadricula ya no lo tapaba), carrusel con senal stepChanged y opcion
para ocultar cabeceras x1..xn fuera de sistemas, forma vectorial
parametrica que salta de linea a 1366 px.
- Docs/Sprints/Sprint10/README.md con requerimientos por modulo,
  decisiones tecnicas y commits.
- design-rules.md: tokens vigentes (WCAG AA, tres temas), tipografia
  empaquetada y patrones de interaccion del sprint.
- README: tabla de atajos comunes; tooltips unificados en "Ctrl+Intro"
  como en la hoja de atajos.
@robertofabiot
robertofabiot merged commit 7ffb3d1 into main Oct 12, 2026
6 of 8 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant