tawasuyu

sergio/takana

> Una distribución Linux construida con un laboratorio funcional y hermético en el > sótano, y una terminal mutable, clásica y anárquica en el piso de arriba — diseñada > desde el suelo para que una IA programadora entienda, modifique y co…

TOML 1572Shell 203Rust 109Markdown 993728 Definitions

⎇ 7c794568a963b18b68d747959e6bbd07cf2ebff7 scripts/cosmic/tasa-primera-pintura.sh Shell · 43 lines · 2.6 KB History raw

atuq: la serie con UNA sola tarjeta — 2 de 10, y el hueco resulta real 21381b598 · Sergio ·

1#!/bin/sh
2# tasa-primera-pintura.sh — corre N veces `atuq-en-imagen.py` y saca la TASA, no una anécdota.
3#
4#   scripts/cosmic/tasa-primera-pintura.sh [N]      (def 10)
5#   VGA=0 scripts/cosmic/tasa-primera-pintura.sh 10   una sola salida (así se usa la imagen de verdad)
6#
7# ── POR QUÉ UNA TASA ───────────────────────────────────────────────────────────────────────────
8# El §6.10.sexies del SDD 26 midió cinco corridas sobre la MISMA imagen: pintó en tres (+197, +197,
9# +204 s) y no pintó en dos, siendo las dos últimas el MISMO comando. Con un fallo intermitente una
10# corrida no decide en ningún sentido —ni el ✓ ni el ✗—, así que lo que hay que publicar es cuántas
11# de cuántas. Cada corrida deja su entrada en `docs/state/primera-pintura.json` (el guion ACUMULA) y
12# `scripts/vigia-imagen.py` informa la tasa.
13#
14# ⚠ Una corrida ABORTADA no es un ✗. Si la VM muere por fuera —este repo es compartido y hay sesiones
15# que matan todos los `qemu` de la máquina— el guion no llega a anotar nada; acá se detecta mirando
16# que la salida traiga el veredicto, y se cuenta aparte. Un aborto contado como fallo infla la tasa
17# de fallo con algo que no es del producto.
18set -u
19ROOT="$(cd "$(dirname "$0")/../.." && pwd)"; cd "$ROOT"
20N="${1:-10}"
21WAIT="${WAIT:-480}"; CADENCE="${CADENCE:-30}"
22# ⚠ Con `VGA=1` hay DOS salidas y la ventana cae en cualquiera (§6.10.octies): la serie de diez del
23# 2026-09-14 midió con eso puesto y su «2 de 10» era dónde apuntaba la cámara. Con `VGA=0` hay una
24# sola salida y la captura es completa ⇒ el ✗ sí significa «no está».
25VGA="${VGA:-1}"
26ok=0; fallo=0; aborto=0; i=1
27echo "== $N corridas · --as-user · VGA=$VGA · ventana ${WAIT}s · cadencia ${CADENCE}s"
28while [ "$i" -le "$N" ]; do
29  log="work/tasa-vga$VGA-$i.txt"
30  VGA="$VGA" MEM="${MEM:-2560}" SMP="${SMP:-2}" timeout 2400 \
31    python3 scripts/cosmic/atuq-en-imagen.py --as-user --until-paint \
32      --wait "$WAIT" --cadence "$CADENCE" --out "work/tasa-corrida-vga$VGA-$i" > "$log" 2>&1
33  if grep -qa "PRIMERA PINTURA" "$log"; then
34    t=$(grep -a "primera pintura:" "$log" | head -1)
35    ok=$((ok+1));    echo "  [$i/$N] ✓ ${t#*✓ }"
36  elif grep -qa "el navegador NO pintó" "$log"; then
37    fallo=$((fallo+1)); echo "  [$i/$N] ✗ no pintó en ${WAIT}s"
38  else
39    aborto=$((aborto+1)); echo "  [$i/$N] ⚠ corrida abortada (no hay veredicto) — $log"
40  fi
41  i=$((i+1))
42done
43echo "== TASA: $ok pintaron / $((ok+fallo)) corridas válidas   (abortadas: $aborto)"