arnés de la imagen: el piso del sello se COMPRUEBA — un piso que falla callado no existe

Los 180 s de `PISO_SELLO` son de esta máquina (TCG sin KVM y con la carga que tenga el anfitrión,
igual que los +97/+120/+137 de la pintura). Con el anfitrión cargado el mismo arranque puede no
llegar al gancho que sella el éxito, y entonces la corrida suma al contador de caídas y envenena la
siguiente EN SILENCIO — que es exactamente como empezó todo esto.

Ahora que `toolkit.startup.last_success` se lee antes y después, eso se puede decir, así que se dice:

  ✓ el arranque SELLÓ el éxito (last_success X → Y): esta corrida no envenena la siguiente
  ⚠⚠ el sello NO se movió: este arranque no terminó ⇒ la corrida SUMA al contador. Subí PISO_SELLO

Es la diferencia entre un piso confiado y un piso comprobado, y cuesta cuatro líneas porque el dato
ya estaba medido y guardado.
This commit is contained in:
Sergio
2026-09-15 19:24:50 +00:00
parent 5b47cd596c
commit db24d206dc
+14
View File
@@ -649,6 +649,20 @@ def main():
% perfil_d, 60)
estado["recent_crashes_despues"] = leer_contador_de_caidas(volcado)
estado["last_success_despues"] = leer_sello_de_exito(volcado)
# ⚠ EL PISO SE COMPRUEBA, NO SE CONFÍA. `PISO_SELLO` son 180 s medidos EN ESTA
# máquina (TCG sin KVM, con la carga que tenga el anfitrión): con el anfitrión
# cargado el mismo arranque puede no llegar al gancho, y entonces esta corrida
# SUMA al contador y envenena la siguiente — en silencio, que es como pasó la
# primera vez. Con el sello leído antes y después, eso se puede DECIR.
if estado["last_success_despues"] is not None and \
estado["last_success_despues"] == estado.get("last_success_antes"):
print(" ⚠⚠ el sello NO se movió (%s): este arranque no terminó ⇒ la corrida "
"SUMA al contador de caídas. Si usaste --until-paint, subí PISO_SELLO"
% estado["last_success_despues"])
elif estado["last_success_despues"] is not None:
print(" ✓ el arranque SELLÓ el éxito (last_success %s%s): esta corrida "
"no envenena la siguiente"
% (estado.get("last_success_antes"), estado["last_success_despues"]))
print("---- el contador de caídas, DESPUÉS ----")
print(volcado.strip())
# ⚠ SÓLO LA FASE BASE SE ANOTA. La serie de `primera-pintura.json` es una TASA del