Un programa de cálculo estructural puede dar un número equivocado sin ninguna señal visible. En las últimas semanas pusimos a prueba cada parte de Stabileo de varias maneras independientes, encontramos decenas de errores reales, muchos del lado inseguro, y corregimos la mayoría. Cada uno se evalúa y, si pudo afectar resultados ya usados, se publica como aviso, con qué hacer mientras tanto; algunos siguen en evaluación. Este artículo cuenta cómo buscamos esos errores, qué demuestran los certificados que acompañan a los resultados y, con la misma claridad, qué queda fuera de toda verificación.
Un solo motor de cálculo
El solver está escrito en Rust y se compila a WebAssembly: corre en la computadora de quien lo usa, sin instalación y sin enviar el modelo a ningún servidor. Es el mismo código que se prueba en la integración continua. En octubre de 2026 quitamos los cálculos paralelos en TypeScript que reemplazaban en silencio al motor cuando éste no estaba disponible: ahora la aplicación lo dice, en lugar de calcular con una copia no verificada.
Cinco formas de buscar errores
Ninguna prueba encuentra todos los errores, así que usamos varias que fallan de maneras distintas:
- Comparación con otros programas. Los mismos modelos, fijos y generados al azar cada noche, se resuelven con OpenSees, Code_Aster, Frame3DD, PyNite, MYSTRAN, Kratos y CalculiX. Cada diferencia se investiga hasta saber si el error es nuestro o si los dos programas modelan distinto.
- Referencias publicadas. Un conjunto de casos de aceptación con resultados publicados por sus autores, no por otro programa comercial, con tolerancias fijadas por la precisión impresa en la fuente. Las verificaciones de diseño se comparan con ejemplos resueltos publicados (INTI-CIRSOC, AISC y otros).
- Invariantes físicos. Rotar, reflejar o renumerar un modelo, o cambiar sus unidades, tiene que cambiar la respuesta exactamente como dice la física; la superposición, la reciprocidad y el balance de energía tienen que cumplirse. Estas pruebas no necesitan ningún valor de referencia.
- Derivaciones. Las matrices de las barras se derivan simbólicamente desde los principios y se comparan término a término con las del código; para los demás elementos hay derivaciones escritas para que otro ingeniero pueda revisarlas.
- Fuzzing y pruebas de mutación. Millones de entradas generadas automáticamente buscan caídas y resultados no finitos, y se introducen errores a propósito en el código para comprobar que las pruebas los detectan.
| Qué | Cantidad |
|---|---|
| Programas de elementos finitos independientes en la comparación | 7 |
| Casos de aceptación con resultados publicados | 12 |
| Valores de referencia publicados en esos casos | 105 |
| Teoremas de Lean cuyos axiomas revisa la integración continua | 37 |
Certificados: un resultado con cota de error
Para los resultados que lo admiten, Stabileo intenta además, en segundo plano, un certificado: una cota, calculada con aritmética de intervalos, que contiene la solución exacta del sistema que resolvió. Si no lo logra, el resultado queda marcado como no certificado, con el motivo. La cota es del error numérico, no del error de discretización de la malla o del paso de tiempo. Para el análisis lineal, las combinaciones, el modal y el colapso plástico, la matemática central de esa cota está demostrada en Lean, un asistente de demostración en el que cada paso lo verifica la computadora; algunos pasos (las restricciones, una condición del modal) todavía no están formalizados. El P-Delta, el espectral, el armónico y el dinámico también tienen certificados, pero su matemática todavía no está formalizada en Lean. La integración continua rechaza cualquier demostración incompleta o axioma agregado, y para algunos tipos de certificado el verificador que se ejecuta es el mismo código de Lean sobre el que están las demostraciones.
Lo que los certificados no dicen
- Un certificado acota el error de resolver el sistema tal como se armó. No prueba que ese sistema represente el modelo: el armado de la matriz de rigidez y de las cargas está probado de las formas de arriba, pero no certificado. Cuando faltaba el pandeo torsional (SA-2026-007), el certificado certificaba el problema equivocado. Desde la 0.3.0, los certificados de punta a punta vuelven a armar el sistema de forma independiente para pórticos y reticulados y verifican el resultado contra el modelo mismo; láminas, sólidos y conectores todavía no están cubiertos.
- Lean demuestra la matemática; que el código Rust implemente exactamente ese algoritmo no está demostrado, salvo en los verificadores que son código de Lean.
- Las verificaciones certificadas de las normas evalúan sus fórmulas con aritmética de intervalos, pero las fórmulas en sí no están formalizadas: se comparan con ejemplos resueltos publicados donde los hay, y la cobertura de cada norma (qué cláusulas, qué ejemplos) está en la matriz de madurez. Mampostería, uniones, fundaciones y servicio no están certificadas.
- Ninguna verificación del programa verifica el modelo. Las cargas, los apoyos y la idealización son decisiones del ingeniero; la revisión del modelo avisa de errores comunes, pero no reemplaza el criterio.
- Todavía no hubo una revisión independiente por un ingeniero estructural matriculado. Los resultados de CIRSOC 301 siguen marcados como experimentales.
La IA redacta y revisa; no calcula
El asistente de IA arma borradores de modelos a partir de una descripción y revisa modelos existentes, pero no calcula resultados: los números los calculan el solver y los módulos de verificación de la aplicación. Sus explicaciones son texto de un modelo de lenguaje y pueden equivocarse; los valores que valen son los de los resultados. Antes de aplicar un cambio se muestra qué va a modificar, y se puede deshacer en un paso. Las funciones de IA envían la descripción y el modelo a un servidor que consulta un modelo de lenguaje; el solver, los resultados y las verificaciones no lo necesitan y funcionan sin conexión.
Cuando algo falla
Los errores que pueden haber afectado resultados ya usados los publicamos como avisos de seguridad, con cómo reconocer un modelo afectado y qué hacer mientras tanto; otros defectos de seguridad están en evaluación y se agregan cuando corresponde. Los avisos abiertos se cierran cuando la corrección está publicada en stabileo.com.