Fecha: 2026-09-18. Esta entrega es v1.0.2. Se ha validado localmente su código,
pero no se ha desplegado v1.0.2 en SmartOS, no se ha activado armed y no se
han enviado señales reales. El paquete conserva dos barreras de fábrica:
ACTION_MODE dry-run y --force-dry-run en SMF; además no contiene reglas de
zona allow y la instancia SMF está inicialmente deshabilitada.
Nota cronológica: CHECKPOINT.md, añadido posteriormente al mismo paquete
v1.0.2, conserva la evidencia de la validación nativa y operativa que se realizó
después de este corte local. Esa evidencia posterior completa los pendientes de
compilación, probe y logging continuo descritos aquí, pero mantiene armed como
NO GO y no modifica el código de la entrega.
En el nodo real o6hsmartos10, v1.0.1 validó correctamente mediante
--probe --force-dry-run las fuentes nuevas:
swap_committed_pages coincidió con allocated + reserved de swap -s.swap_physical_used_bytes coincidió con la suma de (blocks-free)*512 de
swap -l: 67024888 - 58931824 = 8093064 bloques = 4.143.648.768 bytes.anon_pageout_pages coincidió exactamente con la suma de
cpu:*:vm:anonpgout: 6.553.284 páginas. No se sumaron también los duplicados
cpu_stat:*:cpu_stat*:anonpgout.La ejecución persistente de v1.0.1 bajo SMF permaneció estable, muestreó cada
segundo y clasificó correctamente state=NORMAL, action_pressure=0, floor=0
con nscan=0 y entre unas 589.193 y 602.818 páginas libres, muy por encima de
lotsfree=130875. Sus deltas de 5 y 15 segundos fueron coherentes; por ejemplo,
una caída rápida de libre y aumento de compromiso virtual no se confundieron
con presión real mientras el scanner permaneció inactivo.
Esa prueba descubrió el defecto corregido aquí: el daemon continuo v1.0.1 aún
mostraba la nomenclatura antigua (swap_ok, swap_alloc_pages,
swap_reserved_pages, swap_available_pages, metric=swap_used_pages) y no
exponía swap_physical_used_bytes, anon_pageout_pages ni sus deltas. Por tanto,
la evidencia real valida las lecturas nativas y la estabilidad básica, pero no
el nuevo contrato de logging v1.0.2. Antes de armar nada debe repetirse la prueba
continua en SmartOS.
make test ejecuta pruebas de configuración, política y la ruta real del
daemon con backend simulado. La prueba de logging genera 61 muestras a cadencia
de 1 s y exige los tres pares de valor/flag, los deltas exactos 5/15/60 s de
swap_committed_pages, swap_physical_used_bytes y anon_pageout_pages, y
que no aparezca swap_used_pages.freemem >= lotsfree no corroboran presión. Juntas sólo pueden
corroborarla bajo lotsfree; no autorizan acciones por sí mismas.WOULD_ACTION y realiza cero
solicitudes de señal real. También cubre protecciones, revalidación, warmup,
caché, fallos de muestra/log/identidad, límites y parada.make test-sanitize ejecuta ambas suites con AddressSanitizer y
UndefinedBehaviorSanitizer. En entornos donde LeakSanitizer no pueda operar
por restricciones de ptrace se usa ASAN_OPTIONS=detect_leaks=0 y se deja
constancia explícita; esto no equivale a una comprobación de fugas.make portability aplica C99 estricto, warnings como errores, -fanalyzer a
cada unidad, sintaxis shell y XML bien formado. Los tests/api-sketch sólo
comprueban consistencia C en Linux; no sustituyen cabeceras, ABI, enlace ni
ejecución nativos de illumos.system, popen, exec* ni
kill(2). Las pruebas no enlazan el backend nativo y no pueden enviar señales.Los resultados exactos de esta ejecución se guardan en logs/policy-tests.log,
logs/runtime-tests.log, logs/sanitizers.log y logs/portability.log.
gmake CC=gcc), ejecutar gmake test CC=gcc
y comprobar ELF de 64 bits y dependencias con file/ldd.svccfg validate nativo. Instalar/importar sólo siguiendo el
procedimiento del README y mantener --force-dry-run; no añadir UUID allow.--probe --force-dry-run y contrastar las tres fuentes con swap -s,
swap -l y kstat cpu::vm:anonpgout.event=sample:
swap_committed_ok/swap_committed_pages,
swap_physical_used_ok/swap_physical_used_bytes y
anon_pageout_ok/anon_pageout_pages. Confirmar líneas event=delta con los
tres nombres exactos y ventanas 5/15/60; buscar y exigir cero apariciones de
swap_used_pages./proc, identidades de zona, lock, rotación y
recuperación del servicio durante carga natural. No generar presión artificial
en producción.La atribución por RSS es heurística y sobrecuenta memoria compartida. Una señal
puede no liberar memoria de inmediato y un supervisor puede recrear procesos.
El presupuesto /proc es cooperativo; libkstat, libc, ZFS y el logging pueden
bloquear. No hay fsync por muestra, por lo que un panic puede perder las últimas
líneas. Las protecciones y presupuestos prevalecen incluso al floor. Este guard
no constituye una garantía de evitar pageout_deadman ni un certificado para
activar acciones en producción.