atuq: el reloj del sello es el del LANZAMIENTO, no el de la pintura — y el piso va en el arnés
Leyendo el perfil en cada captura, el sello (`toolkit.startup.last_success`) y la limpieza del contador llegan al disco entre +100 s y +137 s DESDE EL LANZAMIENTO, no desde el primer cuadro. Y es UN gancho y no dos: el mismo arranque que limpia escribe el sello, con su propia hora de arranque. Las dos cotas salen de corridas independientes, que es lo que hace al intervalo creíble: · a los +100 s NO había sellado — la corrida S1 vivió 100 s desde el lanzamiento (primer cuadro a +97 s, fin del proceso tres segundos después, medido con los tiempos de sus propios ficheros); · a los +137 s YA había sellado — la corrida con `--watch-prefs` lo ve aparecer en esa captura. S1 parecía la excepción del modelo y resulta ser su cota inferior: si el reloj fuera el de la pintura tendría que haber sellado, y no selló. La consecuencia es contraintuitiva y es la que muerde: cuanto MÁS RÁPIDO pinta, más fácil es envenenar el perfil, porque `--until-paint` corta antes. La serie de ayer no se rompió por ser larga sino por ser rápida. Por eso la regla va en el arnés y no en un runbook: `PISO_SELLO = 180`, margen sobre la cota alta, y `--until-paint` no corta antes de ese piso. El comentario del piso lleva los dos números medidos al lado — un piso que se lee como elegido lo baja el próximo que lo vea. Las corridas `cierre-1`/`cuanto-1`, el mando `--watch-prefs` y el piso los midió y escribió la otra sesión del frente; acá van con la cota de S1 que los cierra por abajo.
This commit is contained in:
@@ -50,6 +50,23 @@ SMP = os.environ.get("SMP", "2")
|
||||
# `screendump` de QMP fotografía UN dispositivo y hay que poder pedir cada uno por su nombre: con dos
|
||||
# salidas, el compositor puede poner la ventana en la que la captura por defecto NO muestra, y eso se
|
||||
# ve exactamente igual que «la ventana no aparece».
|
||||
# Segundos desde el lanzamiento del navegador antes de los cuales NO se puede matar la VM sin
|
||||
# envenenar el perfil: el sello del arranque (`last_success` + borrado de `recent_crashes`) aparece
|
||||
# en disco entre +100 s y +137 s (medido 2026-09-15, `work/cuanto-1.txt`). 180 deja margen sobre la
|
||||
# cota alta; es un piso del INSTRUMENTO y no una medida del producto.
|
||||
# ⚠ EL PISO DEL SELLO, Y EL NÚMERO QUE LO JUSTIFICA — si esto se lee como elegido, el próximo que
|
||||
# lo vea lo baja. Gecko da por bueno un arranque un rato DESPUÉS DEL LANZAMIENTO (no de la primera
|
||||
# pintura) y ahí escribe `toolkit.startup.last_success` y limpia `recent_crashes`. Medido el
|
||||
# 2026-09-15, leyendo el perfil en cada captura, y acotado por dos corridas independientes:
|
||||
#
|
||||
# el sello NO estaba a los +100 s (la corrida S1 vivió 100 s desde el lanzamiento y no selló)
|
||||
# el sello YA estaba a los +137 s (la corrida `cuanto-1`: last_success pasó a su propia hora)
|
||||
#
|
||||
# ⇒ el hito cae entre +100 y +137 s, y el 180 es margen sobre la cota alta. Y la consecuencia es
|
||||
# contraintuitiva: **cuanto más rápido pinta, MÁS fácil es envenenar el perfil**, porque
|
||||
# `--until-paint` corta antes. Una serie sin este piso se rompe sola a la cuarta corrida.
|
||||
PISO_SELLO = int(os.environ.get("PISO_SELLO", "180"))
|
||||
|
||||
DOS_PANTALLAS = os.environ.get("VGA") == "1"
|
||||
VGA_ARGS = (["-vga", "none", "-device", "VGA,id=vga0"] if DOS_PANTALLAS else ["-vga", "none"])
|
||||
PANTALLAS = ["gpu0", "vga0"] if DOS_PANTALLAS else ["gpu0"]
|
||||
@@ -576,8 +593,21 @@ def main():
|
||||
if primera is None and px and px > 100_000:
|
||||
primera = t
|
||||
print(f" +{t}s ██ PRIMERA PINTURA — {px} px de la página EN {donde}{vigilancia}", flush=True)
|
||||
if a.until_paint and not a.watch_prefs:
|
||||
# ⚠ NO SE CORTA ANTES DEL SELLO, Y ESTO ES MEDIDO (2026-09-15). Gecko
|
||||
# marca el arranque como bueno —escribe `toolkit.startup.last_success` y
|
||||
# BORRA `recent_crashes`— y eso llega al disco entre los +100 s y los +137 s
|
||||
# desde el lanzamiento (`work/cuanto-1.txt`, leyendo el perfil en cada
|
||||
# captura). El reloj es el del ARRANQUE, no el de la pintura: `cierre-1`
|
||||
# pintó a +120 s y selló, y la S1 de la serie pintó a +97 s, se cortó con
|
||||
# `--until-paint` y dejó el contador en 1. Cortar en la pintura mata la VM
|
||||
# antes del sello, y CADA corrida así suma uno: cuatro y el perfil abre el
|
||||
# diálogo en vez del navegador. El piso es la diferencia entre medir el
|
||||
# producto y medir el daño que hace el instrumento.
|
||||
if a.until_paint and not a.watch_prefs and t >= PISO_SELLO:
|
||||
break
|
||||
if a.until_paint and t < PISO_SELLO:
|
||||
print(f" (sigo hasta +{PISO_SELLO}s: antes de eso el arranque no está "
|
||||
f"sellado y matar la VM envenena el perfil)", flush=True)
|
||||
else:
|
||||
vivos = ser.cmd("for c in /proc/[0-9]*/comm; do cat $c 2>/dev/null; done | grep -c atuq")
|
||||
v = vivos.splitlines()[1].strip() if len(vivos.splitlines()) > 1 else "?"
|
||||
|
||||
Reference in New Issue
Block a user