Cada corrección de un solver estructural cambia un número que alguien quizás ya usó. Un factor de pandeo que salía demasiado alto ahora es menor; un modelo que antes se resolvía ahora se rechaza. Una corrección que llega a la aplicación en silencio deja el número viejo en cálculos ya entregados, y el ingeniero que los hizo no tiene motivo para volver a mirarlos.
Este artículo describe qué hace Stabileo al respecto, desde el momento en que se encuentra un defecto hasta el momento en que se publica su corrección. Los ejemplos son reales: el 4 y el 5 de noviembre de 2026 llegaron a stabileo.com catorce versiones de resultados, de la 16 a la 29.
Qué es una versión de resultados
Una versión de resultados es un número entero, independiente de la versión de la aplicación. Aumenta en uno cada vez que llega al sitio un cambio que hace que el mismo modelo guardado dé números distintos, o que rechaza un modelo que antes se resolvía. Cada cambio de ese tipo se registra con:
- la versión con la que entró, su fecha y sus pull requests;
- a qué modelos afecta, escrito como características del modelo: un modelo plano con restricciones, un análisis de pandeo 2D con cargas a lo largo de las barras, una barra de hormigón verificada según CIRSOC 201;
- un título y una explicación para el ingeniero en cada uno de los seis idiomas de la aplicación, con qué volver a verificar;
- un enlace a la descripción completa: un aviso de seguridad, una nota de cambio de resultados o el registro de cambios.
Cada cálculo sella el proyecto con la versión de resultados que lo produjo, junto con la versión de la aplicación, el commit, la versión del motor, un hash del binario del motor y los análisis que se ejecutaron. El sello viaja con el proyecto: un archivo guardado, un guardado automático, una pestaña abierta o un enlace compartido lo llevan.
Por qué cambia una versión
La mayoría de los cambios son correcciones: un resultado estaba mal y ahora está bien. Algunos son rechazos: un modelo que antes daba un número ahora da en su lugar un mensaje claro, porque el número no significaba nada. Y una versión también puede deshacer: la versión 15 retiró tres cambios de la versión 14 cuyas correcciones de revisión no habían llegado al sitio con ellos, y las versiones 27 a 29 los trajeron de vuelta, revisados. A un proyecto resuelto con la versión 14 se le informan ambas cosas.
| Versión | Cambio | Tipo |
|---|---|---|
| 16 | Aluminio: se verifica el corte en el eje débil | Corrección |
| 17 | Uniones de acero: los momentos en el eje débil ya no se ignoran | Rechazo |
| 18 | ACI 318 y EN 1992: las barras de hormigón con torsión se marcan como no verificadas | Rechazo |
| 19 | Las columnas de hormigón armado también se verifican con su compresión mínima (SA-2026-041) | Corrección |
| 20 | Generador de cargas: un piso que queda en parte bajo estructura de techo baja conserva sus cargas de área (SA-2026-033) | Corrección |
| 21 | Las figuras de láminas exportadas muestran el campo y la escala de la pantalla | Corrección |
| 22 | 2D: se rechaza un mecanismo detrás de un vínculo rígido o un diafragma | Rechazo |
| 23 | Pandeo 2D de barras cuyo esfuerzo axil varía a lo largo de ellas (SA-2026-042) | Corrección |
| 24 | Análisis corrotacional 3D con grandes rotaciones alrededor de varios ejes (SA-2026-037) | Corrección |
| 25 | Restricciones de un modelo 2D cortado de un plano Y–Z o X–Y (SA-2026-036) | Corrección |
| 26 | El valor determinante de una barra y la envolvente 2D leen el pico real | Corrección |
| 27–29 | Vuelven, revisados, tres cambios de Básico retirados por la versión 15: colapso plástico, P-Δ y el signo de las líneas de influencia de momento | Corrección |
El aviso de nueva verificación
Cuando se abre un proyecto, la aplicación compara su sello con el registro y lista los cambios hechos desde entonces que afectan a ese modelo. A un pórtico plano con un análisis de pandeo se le informa la corrección de pandeo 2D; a un pórtico de acero sin hormigón no se le informa la verificación de columnas de hormigón armado. La lista no es una notificación que desaparece: el aviso no tiene botón de cerrar, ignora Escape y los clics fuera de él, y sólo se descarta marcando “Leí estos cambios” y eligiendo continuar o volver a correr.

Hasta que el modelo se vuelve a resolver, sus resultados quedan marcados como desactualizados: un cartel lo indica, y cada informe, planilla y CSV exportado mientras tanto imprime una advertencia DESACTUALIZADO en su procedencia. “Volver a correr análisis y diseño” vuelve a resolver y, en PRO, vuelve a verificar las barras de hormigón con la armadura ya elegida; no las vuelve a diseñar, porque eso sobrescribiría las barras del ingeniero.
Desde el 4 de noviembre (#1406) el aviso explica cada cambio en el idioma del lector en los seis idiomas de la aplicación. Antes, los lectores en alemán, francés y turco recibían el título y la explicación en inglés: 66 de los 72 cambios registrados no tenían texto en esos idiomas. Cada traducción se verificó traduciéndola de vuelta al inglés sin el original y comparando el significado: números, signos, qué carga, qué verificación, lado seguro o inseguro. Esa verificación corrigió frases en los tres idiomas y mostró que cuatro explicaciones en inglés eran ambiguas en el origen; esas se corrigieron en los seis idiomas.
Antes de la corrección: advertir o rechazar
Un defecto suele encontrarse antes de corregirse, a veces días antes. Durante ese tiempo el resultado que afecta sigue en pantalla. La regla que seguimos es contenerlo primero y corregirlo después (issue #447): cada defecto abierto que puede dar un resultado equivocado recibe, en cada punto de entrada que afecta, una advertencia o un rechazo.
- Una advertencia conserva el resultado y muestra, junto a él, qué problema conocido puede afectarlo y qué verificar a mano.
- Un rechazo retiene el resultado y dice por qué, cuando el número puede estar equivocado por un factor grande sin forma de notarlo en la salida, como un factor que pasa a ser varias veces mayor o menor según la numeración de las barras.

La contención se lleva en un inventario que lista cada problema de seguridad abierto, su advertencia o rechazo, la condición que lo dispara y el test que muestra que se dispara, o la evidencia de que no hace falta contención. Un test mantiene de acuerdo el inventario y la lista de problemas conocidos del motor, y un trabajo programado compara el inventario con los issues abiertos en GitHub. Las condiciones son estrechas a propósito: en los 39 modelos del corpus de resultados, cada advertencia se dispara como mucho en dos. El pull request que completa este inventario para cada issue abierto (#807) se integró el 5 de noviembre, antes de la versión 0.5.0.
Una contención termina cuando entra su corrección, y termina en el mismo pull request. Esta semana #1295 quitó el rechazo de los cortes de 3D a 2D que flexionaban barras alrededor del eje equivocado, porque el corte ahora está bien; #1301 reemplazó una advertencia en cada cálculo corrotacional 3D por una que se dispara sólo cuando el extremo de una barra gira más de 0,02 rad respecto de su cuerda, donde la aproximación que queda puede importar.
Las correcciones de esta semana
Pandeo 2D con cargas axiales a lo largo de las barras (#1324, versión 23). La rigidez geométrica de cada barra usaba su esfuerzo axil medio. Donde la compresión crece hacia el extremo que más gira, como bajo gravedad en un cabio o con una carga axial puntual dentro del tramo, el factor de pandeo salía demasiado alto y nada advertía sobre eso. Ahora cada barra integra su esfuerzo axil variable.
| Caso | Exacto | Antes | Ahora |
|---|---|---|---|
| Ménsula, compresión que crece de 0 en el apoyo hasta P en la punta | 3,477 | 4,972 (+43 %) | 3,542 (+1,9 %) |
| Ménsula, empuje P en la punta y una carga axial opuesta P a mitad de la luz: compresión P sólo desde la mitad hasta la punta | 2,961 | 4,972 (+68 %) | 3,056 (+3,2 %) |
| Columna pesada de Euler, compresión mayor en el apoyo | 7,837 | 4,972 (−37 %) | 7,889 (+0,7 %) |
Los pocos puntos porcentuales que quedan son el error de discretización habitual de un elemento por barra, y bajan al dividir la barra. P-Delta sigue usando el esfuerzo axil medio, y el pandeo 3D con cargas a lo largo de las barras conserva su advertencia hasta su propia corrección.
Análisis corrotacional 3D (#1301, versión 24). Las rotaciones de los extremos de las barras se restaban como vectores de rotación, lo que es exacto sólo cuando todas las rotaciones comparten un eje. La curva a 45° de Bathe–Bolourchi daba un 1,3 % fuera de su solución publicada, y refinar la malla la alejaba de las referencias, en lugar de acercarla. Ahora las rotaciones se componen como matrices de rotación: la misma curva queda a menos de 0,4 % de dos soluciones publicadas independientes y converge entre ellas. Se rechaza una barra cuyos extremos giran más de 0,9π uno respecto del otro, porque el resultado no puede decir de qué vuelta completa se trata.
Un mecanismo oculto en 2D (#1298, versión 22). Un vínculo rígido o un diafragma desde un nudo cuyas barras están todas articuladas hasta el extremo de una barra de reticulado es un mecanismo, pero el solver lo sostenía con un resorte artificial minúsculo y devolvía desplazamientos de cientos de kilómetros, que el certificado luego certificaba. Ahora un modelo así se rechaza. La corrección no propuso aviso de seguridad para este: en los casos encontrados los desplazamientos eran absurdos, del orden de 10⁵ m, y venían con la advertencia de la aplicación de un probable mecanismo. Es un juicio sobre esos casos, no una prueba de que ningún resultado afectado pareciera razonable. Lo que estaba mal era la afirmación del certificado, y la entrada de la versión se lo informa a los proyectos que afecta. Después se encontró un caso similar a través de un conector en lugar de un vínculo rígido (#1414); su corrección (#1415) se integró el 5 de noviembre.
Corte de un modelo 3D a 2D (#1295). El corte usaba la inercia del eje fuerte de cada sección para todas las barras, así que las columnas en un corte Y–Z, las vigas en un corte X–Y y las barras giradas 90° flexionaban alrededor del eje equivocado: un pórtico de IPN 300 en el plano Y–Z se desplazaba lateralmente 0,96 mm en 2D contra 13,0 mm en 3D. Ahora cada barra flexiona en 2D alrededor del eje en que flexiona en 3D, y se rechazan los cortes que un modelo plano no puede representar. Esta corrección no tiene versión de resultados, y es deliberado: un modelo 2D guardado se resuelve exactamente igual que antes, porque lo que estaba mal era el modelo que producía el corte. El aviso de nueva verificación no puede llegar a esos archivos, así que el aviso de seguridad (SA-2026-035) es el canal: volvé a cortar el modelo desde 3D, o resolvelo en 3D.
Después de la corrección: avisos de seguridad
Un defecto que pudo producir un resultado equivocado o del lado inseguro en una versión publicada recibe un aviso de seguridad: qué estaba mal, qué modelos afecta, cómo reconocerlos, qué volver a verificar en los resultados ya entregados y el caso que lo reproduce. Los avisos de las correcciones de esta semana ya están redactados como borradores en el repositorio y se publican con la versión 0.5.0, como SA-2026-001 a 024 lo fueron con 0.3.0 y 0.4.0.
| Aviso | Qué estaba mal | Severidad |
|---|---|---|
| SA-2026-033 | El generador de cargas omitía las cargas de área de un piso cuando una barra baja quedaba sobre parte de él | Alta |
| SA-2026-034 | La verificación de equilibrio daba coincidencia en casos cuya verificación dejaba cargas afuera | Media |
| SA-2026-035 | El corte de 3D a 2D flexionaba barras alrededor del eje equivocado de la sección | Alta |
| SA-2026-036 | El corte de 3D a 2D en Y–Z o X–Y leía las restricciones como si el pórtico estuviera en X–Z | Alta |
| SA-2026-037 | El análisis corrotacional 3D restaba vectores de rotación | Media |
| SA-2026-040 | Las verificaciones ACI 318 y EN 1992 aprobaban barras de hormigón sin verificar su torsión | Alta |
| SA-2026-041 | La verificación de columnas de hormigón armado combinaba el momento máximo sólo con la compresión máxima | Alta |
| SA-2026-042 | El pandeo 2D sobrestimaba el factor de las barras cuya compresión crece a lo largo de ellas | Alta |

Lo que esto no hace
- El aviso sólo conoce los cambios registrados. Un defecto que todavía no se encontró no está en ningún registro; para eso está la verificación detrás del solver, y eso es lo que cubre la contención una vez que se encuentra algo.
- Lee las características del modelo desde el archivo guardado, y cuando no puede determinarlas, cuenta la característica como presente: un aviso de más es mejor que un cambio oculto al modelo que afecta.
- No puede seguir un número una vez que sale de la aplicación, en un plano, una planilla o un informe ya entregado. Para eso está el aviso de seguridad.
- Contenido, rechazado o corregido, verificar el resultado antes de firmarlo sigue siendo responsabilidad del ingeniero.