gioser

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…

⎇ main scripts/harkaq/fase2-barrido.sh Shell · 78 siq'ikuna · 3.3 KB Ñawpa willay ch'uya

takana etapa 5c: comentarios de scripts, MOTD, y un BUG que introdujo la etapa 4 476168bb0 · Sergio ·

1#!/bin/sh
2# Fase 2 — barrer el catálogo y medir la tasa de excepciones (SDD 16 §6).
3#
4#   fase2-barrido.sh <receta.toml> [<receta.toml>...]
5#
6# El criterio de viabilidad del SDD (§7): "si el 30% de los builds necesita excepción manual,
7# harkaq se desactiva y queda como decoración". Métrica: <5%.
8#
9# Pero "excepción" no es "denegación" (§4.5). Una deuda que el store YA PROVEE no es una
10# excepción: es una línea en `[deps]` que falta, y el arreglo es mecánico. Sólo la deuda
11# IRREDUCIBLE —nadie la provee— cuenta contra el <5%. Sin esa distinción la métrica mide
12# ansiedad, no viabilidad.
13#
14# `takana build` pega en la caché si el artefacto ya está sellado (no correría nada y el
15# veredicto saldría vacío sin que sea un fallo). Se fuerza un build real copiando la receta con
16# otro `name` — cambia hash_inputs sin tocar el store real ni la receta del repo.
17set -eu
18cd "$(dirname "$0")/../.."
19
20BIN="${HARKAQ_BIN:-$HOME/.cache/harkaq}"
21BASE="${HARKAQ_BASE:-$BIN/base.policy}"
22OUT="${OUT:-work/harkaq-fase2}"
23mkdir -p "$OUT"
24
25export HARKAQ=1 HARKAQ_BIN="$BIN" HARKAQ_BASE="$BASE"
26export HARKAQ_TIMEOUT="${HARKAQ_TIMEOUT:-120}"
27
28total=0; limpias=0; solo_declarable=0; con_irreducible=0
29: > "$OUT/deuda-cruda.txt"
30
31for receta in "$@"; do
32    n=$(basename "$receta" .toml)
33    total=$((total + 1))
34    # La copia va AL LADO del original: las `deps.build` se resuelven relativas al directorio
35    # de la receta, así que copiarla a otro sitio rompe `cmake.toml` y compañía — y descartaba
36    # en silencio justo las recetas CON deps, que son las interesantes. Se limpia al salir.
37    tmp="$(dirname "$receta")/.harkaq-$n.toml"
38    sed "s/^name *= *\"$n\"/name = \"$n-hk\"/" "$receta" > "$tmp"
39    trap 'rm -f "$tmp"' EXIT
40
41    log="$OUT/$n.log"
42    timeout "${POR_RECETA:-300}" ./target/debug/hammer build "$tmp" --store "$PWD/store" \
43        > "$log" 2>&1 || true
44
45    # Un veredicto por fase (configure/compile/install son bwraps distintos ⇒ dominios distintos).
46    rm -f "$tmp"
47    grep '^\[harkaq\] {' "$log" | sed 's/^\[harkaq\] //' > "$OUT/$n.verdicts" || true
48    if [ ! -s "$OUT/$n.verdicts" ]; then
49        echo "?? $n — sin veredicto (¿caché? ¿fetch falló? ver $log)"
50        continue
51    fi
52
53    irr=0; dec=0
54    while IFS= read -r v; do
55        echo "$v" > "$OUT/.v.json"
56        s=$(scripts/harkaq/harkaq-suggest.py "$OUT/.v.json" "$BASE" "$PWD/store" 2>/dev/null || true)
57        echo "$s" | grep -q 'IRREDUCIBLE' && irr=1
58        echo "$s" | grep -q 'DECLARABLE' && dec=1
59        echo "$s" | sed -n 's/^    \(\/[^ ]*\)$/\1/p' >> "$OUT/deuda-cruda.txt"
60    done < "$OUT/$n.verdicts"
61
62    if [ "$irr" = 1 ]; then
63        con_irreducible=$((con_irreducible + 1)); echo "!! $n — deuda IRREDUCIBLE"
64    elif [ "$dec" = 1 ]; then
65        solo_declarable=$((solo_declarable + 1)); echo "~~ $n — sólo deuda declarable (falta [deps])"
66    else
67        limpias=$((limpias + 1)); echo "ok $n — Hermetico"
68    fi
69done
70
71echo
72echo "════ FASE 2 — $total receta(s)"
73echo "  Hermetico ................... $limpias"
74echo "  sólo deuda DECLARABLE ....... $solo_declarable   (arreglo mecánico: una línea en [deps])"
75echo "  con deuda IRREDUCIBLE ....... $con_irreducible   ← lo que cuenta contra el <5%"
76echo
77echo "  paths de deuda más frecuentes:"
78sort "$OUT/deuda-cruda.txt" | uniq -c | sort -rn | head -12 | sed 's/^/    /'