cuelgue headless: verificación A/B y evidencia — 98 segfaults contra 0

arnés viejo (sólo CONTENT)  98 segfaults · 1 colgada · 49/50 screenshots
  arnés nuevo (los cinco)      0 segfaults · 0 colgadas · 50/50 screenshots

Queda dicho en la cabecera qué prueba esto y qué no. El MECANISMO sí: 98 → 0, exactamente 2
por corrida, en el 100% de las corridas; un efecto determinista se refuta con pocas muestras.
El CUELGUE no: 1 contra 0 en 50 pares no es significativo — con la tasa medida (3 en 130 ≈
2,3%) ver cero en 50 tiene ~31% de probabilidad aunque nada hubiera cambiado, y harían falta
~200 corridas para un negativo convincente.

Lo que sí sostiene: las tres colgadas observadas tienen la MISMA huella exacta (7 fallos de
lanzamiento de pestaña, 1 de rdd, 6 messageManager is null, cero screenshot) y las tres
cayeron donde los ayudantes revientan. Ninguna apareció sin el mecanismo.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014QPJteswQvP1L7zSBrQQe2
This commit is contained in:
Sergio
2026-09-08 16:48:03 +00:00
co-authored by Claude Opus 5
parent 5247821455
commit 20a719f9c0
11 changed files with 228 additions and 0 deletions
@@ -0,0 +1,10 @@
presión lista: disponible=1977 MiB
Terminated sleep 1
10/50 · viejo segv=20 colg=0 · nuevo segv=0 colg=0
20/50 · viejo segv=38 colg=1 · nuevo segv=0 colg=0
30/50 · viejo segv=58 colg=1 · nuevo segv=0 colg=0
40/50 · viejo segv=78 colg=1 · nuevo segv=0 colg=0
50/50 · viejo segv=98 colg=1 · nuevo segv=0 colg=0
viejo segfaults=98 COLGADAS=1 screenshots=49/50
nuevo segfaults=0 COLGADAS=0 screenshots=50/50
@@ -0,0 +1,16 @@
── nivel CONTROL: sin presión
arranca con disponible=4402 MiB psi=0.02
....................
nivel 0: ok=20 COLGADAS=0 muertas=0 (disponible final 4291 MiB, psi 0.00 )
── nivel: apuntando a 2000 MiB disponibles
arranca con disponible=1944 MiB psi=0.00
.......X..X.........
nivel 2000: ok=18 COLGADAS=2 muertas=0 (disponible final 2210 MiB, psi 0.00 )
── nivel: apuntando a 1200 MiB disponibles
arranca con disponible=1184 MiB psi=0.54
....................
nivel 1200: ok=20 COLGADAS=0 muertas=0 (disponible final 1178 MiB, psi 3.45 )
── nivel: apuntando a 700 MiB disponibles
arranca con disponible=673 MiB psi=2.31
....................
nivel 700: ok=20 COLGADAS=0 muertas=0 (disponible final 681 MiB, psi 0.23 )
@@ -0,0 +1,24 @@
*** You are running in headless mode.
[60] Sandbox: writing /proc/self/uid_map: EPERM
[76] Sandbox: writing /proc/self/uid_map: EPERM
[Parent 2, IPC I/O Parent] WARNING: Failed to launch rdd subprocess @FSC::SFNS::Send2 (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[111] Sandbox: writing /proc/self/uid_map: EPERM
console.error: Region.sys.mjs: "Error fetching region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 750))
console.error: Region.sys.mjs: "Failed to fetch region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 394))
console.error: services.settings:
Remote Settings startup changesets bundle could not be extracted (TypeError: NetworkError: Network request failed)
console.error: Region.sys.mjs: "Error fetching region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 750))
console.error: Region.sys.mjs: "Failed to fetch region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 394))
@@ -0,0 +1,50 @@
--- pid 339 comm=bwrap
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=
rss=2188 kB
--- pid 351 comm=bwrap
state=S (sleeping)
wchan=do_wait
syscall=61 0xffffffffffffffff 0x7ffcdd14157c 0x0 0x0 0x0 0x0 0x7ffcdd141510 0x
rss=1292 kB
--- pid 352 comm=firefox
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7fa9f3a370e0 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fffeabda818 0x7
rss=156724 kB
--- pid 560 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f333656c840 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7ffc4b1a1238 0x7
rss=65212 kB
--- pid 590 comm=forkserver
state=S (sleeping)
wchan=unix_stream_read_generic
syscall=47 0x3 0x7fffff839580 0x0 0x0 0x0 0x0 0x7fffff839538 0x7f4b8d263b52
rss=39432 kB
--- pid 599 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f4b79f80e90 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fffff8392b8 0x7
rss=59444 kB
--- pid 600 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f4b79f69840 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fffff8392b8 0x7
rss=59792 kB
--- pid 604 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f4b79f81020 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fffff8392b8 0x7
rss=59432 kB
--- pid 30266 comm=bwrap
state=S (sleeping)
wchan=do_wait
syscall=61 0xffffffffffffffff 0x7fff48ae4d6c 0x0 0x0 0x0 0x0 0x7fff48ae4d00 0x
rss=1300 kB
--- pid 30267 comm=firefox
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f899dc8fdd0 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fff8116ba08 0x7
rss=150844 kB
@@ -0,0 +1,23 @@
PID PPID STAT RSS WCHAN COMMAND
339 20680 SN 2188 poll_schedule_timeout.co bwrap
351 339 SN 1292 do_wait bwrap
352 351 SNl 156724 poll_schedule_timeout.co firefox
560 351 SNl 65212 poll_schedule_timeout.co Web Content
599 590 SNl 59444 poll_schedule_timeout.co Web Content
600 590 SNl 59792 poll_schedule_timeout.co Web Content
604 590 SNl 59432 poll_schedule_timeout.co Web Content
3446 1 S 4 do_wait bwrap
5948 1 S 4 do_wait bwrap
7816 1 S 4 do_wait bwrap
12045 1 S 4 do_wait bwrap
15909 1 S 4 do_wait bwrap
15939 1 S 4 do_wait bwrap
29205 1 S 4 do_wait bwrap
30266 1 SN 1300 do_wait bwrap
30267 30266 SNl 150844 poll_schedule_timeout.co firefox
30441 30266 SNl 53432 poll_schedule_timeout.co Web Content
30473 30469 SNl 50204 poll_schedule_timeout.co Web Content
30475 30469 SNl 49888 poll_schedule_timeout.co Web Content
30477 30469 SNl 49952 poll_schedule_timeout.co Web Content
31269 1 S 4 do_wait bwrap
31821 1 S 4 do_wait bwrap
@@ -0,0 +1,4 @@
nivel=2000 corrida=11 COLGADA a 60s
al lanzar: disponible=1964 MiB psi_some_avg10=0.00 oom_kill=75
ahora: disponible=1983 MiB psi_some_avg10=0.00 oom_kill=75
--- ¿mató el kernel a alguien DURANTE esta corrida? delta=0
@@ -0,0 +1,24 @@
*** You are running in headless mode.
[61] Sandbox: writing /proc/self/uid_map: EPERM
[77] Sandbox: writing /proc/self/uid_map: EPERM
[Parent 2, IPC I/O Parent] WARNING: Failed to launch rdd subprocess @FSC::SFNS::Send2 (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
JavaScript error: resource://gre/modules/ExtensionParent.sys.mjs, line 2059: TypeError: can't access property "addMessageListener", messageManager is null
[Parent 2, IPC I/O Parent] WARNING: Failed to launch tab subprocess @FSC::SFNS::Failed (Error:0): file ipc/glue/GeckoChildProcessHost.cpp:822
[109] Sandbox: writing /proc/self/uid_map: EPERM
console.error: Region.sys.mjs: "Error fetching region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 750))
console.error: Region.sys.mjs: "Failed to fetch region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 394))
console.error: services.settings:
Remote Settings startup changesets bundle could not be extracted (TypeError: NetworkError: Network request failed)
console.error: Region.sys.mjs: "Error fetching region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 750))
console.error: Region.sys.mjs: "Failed to fetch region" (new Error("TIMEOUT", "resource://gre/modules/Region.sys.mjs", 394))
@@ -0,0 +1,40 @@
--- pid 30264 comm=bwrap
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=
rss=2196 kB
--- pid 30266 comm=bwrap
state=S (sleeping)
wchan=do_wait
syscall=61 0xffffffffffffffff 0x7fff48ae4d6c 0x0 0x0 0x0 0x0 0x7fff48ae4d00 0x
rss=1300 kB
--- pid 30267 comm=firefox
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f899dc8fdd0 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7fff8116ba08 0x7
rss=144436 kB
--- pid 30441 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f89fde9db50 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7ffde45e6c88 0x7
rss=53260 kB
--- pid 30469 comm=forkserver
state=S (sleeping)
wchan=unix_stream_read_generic
syscall=47 0x3 0x7ffe96c38cf0 0x0 0x0 0x0 0x0 0x7ffe96c38ca8 0x7f1af0a9bb52
rss=41200 kB
--- pid 30473 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f1ade0d8e10 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7ffe96c38908 0x7
rss=50212 kB
--- pid 30475 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f1ade0d8e10 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7ffe96c38908 0x7
rss=49872 kB
--- pid 30477 comm=Web Content
state=S (sleeping)
wchan=poll_schedule_timeout.constprop.0
syscall=7 0x7f1ade0d9390 0x2 0xffffffffffffffff 0x0 0x0 0x0 0x7ffe96c38908 0x7
rss=49936 kB
@@ -0,0 +1,17 @@
PID PPID STAT RSS WCHAN COMMAND
3446 1 S 4 do_wait bwrap
5948 1 S 4 do_wait bwrap
7816 1 S 4 do_wait bwrap
12045 1 S 4 do_wait bwrap
15909 1 S 4 do_wait bwrap
15939 1 S 4 do_wait bwrap
29205 1 S 4 do_wait bwrap
30264 20680 SN 2196 poll_schedule_timeout.co bwrap
30266 30264 SN 1300 do_wait bwrap
30267 30266 SNl 144436 poll_schedule_timeout.co firefox
30441 30266 SNl 53260 poll_schedule_timeout.co Web Content
30473 30469 SNl 50212 poll_schedule_timeout.co Web Content
30475 30469 SNl 49872 poll_schedule_timeout.co Web Content
30477 30469 SNl 49936 poll_schedule_timeout.co Web Content
31269 1 S 4 do_wait bwrap
31821 1 S 4 do_wait bwrap
@@ -0,0 +1,4 @@
nivel=2000 corrida=8 COLGADA a 60s
al lanzar: disponible=1989 MiB psi_some_avg10=0.00 oom_kill=75
ahora: disponible=1963 MiB psi_some_avg10=0.00 oom_kill=75
--- ¿mató el kernel a alguien DURANTE esta corrida? delta=0
@@ -83,6 +83,22 @@
# sí está probado es que el arnés viejo dejaba 2 ayudantes reventando en CADA corrida y que
# apagando los cinco sandboxes no queda ninguno.
#
# LA VERIFICACIÓN A/B (50 pares intercalados bajo presión, verificar-arreglo-sandbox.sh):
#
# arnés viejo (sólo CONTENT apagado) ...... 98 segfaults · 1 COLGADA · 49/50 screenshots
# arnés nuevo (los cinco apagados) ........ 0 segfaults · 0 colgadas · 50/50 screenshots
#
# ⚠ QUÉ PRUEBA Y QUÉ NO, porque la tentación de leer de más acá es grande:
# · El MECANISMO está eliminado y eso sí es concluyente: 98 → 0, exactamente 2 por corrida, en el
# 100 % de las corridas. Un efecto determinista se refuta con pocas muestras.
# · El CUELGUE no. 1 contra 0 en 50 pares no es significativo por sí solo: con la tasa medida
# (3 colgadas en 130 corridas del arnés viejo ≈ 2,3 %), ver cero en 50 corridas tiene ~31 % de
# probabilidad AUNQUE NADA HUBIERA CAMBIADO. Para un negativo convincente harían falta ~200.
# Lo que sí se puede decir: las TRES colgadas observadas tienen la misma huella exacta —7 fallos
# de lanzamiento de pestaña, 1 de rdd, 6 `messageManager is null`, cero screenshot— y las tres
# cayeron en configuraciones donde los ayudantes revientan. Ninguna apareció sin el mecanismo.
# Evidencia en docs/evidencia/cuelgue-headless/.
#
# EL ARREGLO, para cualquier firefox headless de la distro dentro de bwrap — el sandbox de Gecko no
# aporta nada acá, porque bwrap YA es la jaula, y lo único que hace es fallar y dejar cadáveres:
#