Files
takana/docs/state/keystones.json
T
sergioandClaude Opus 4.8 85b5a9bc46 yupana: instrumentar duración de build en el worker → camino crítico PESADO
El peso que le faltaba a las ondas: sin él, critical-path = nº de pasos; con él,
ETA real en segundos.

INSTRUMENTACIÓN (worker):
  scripts/farm/build-timed.sh envuelve `hammer build` midiendo la pared y la
  registra en $STORE/.times/<hash>-<host>.json — un SIDECAR del store, NUNCA
  dentro del artefacto. La duración es no determinista (varía por máquina/carga)
  ⇒ no puede tocar el ArtifactHash. Keyed por hash (CAS-safe: dos workers no se
  pisan) + host (varias muestras por receta). Viaja al hub con el rsync de store
  que ya hace la cosecha; ninguna herramienta del store lo confunde con artefacto.
  Sólo builds REALES (pared ≥ UMBRAL 3s) — los cache-hits no envenenan la mediana.
  campana-deuda.sh ahora construye vía build-timed.sh (transparente, mismo exit).

CONSUMO (hub): yupana._tiempos() carga name→mediana de segundos; keystones
computa el CAMINO CRÍTICO pesado = longest weighted path del subgrafo de deuda
(peso = segundos de build). La cadena más larga hay que construirla en SERIE
aunque haya ∞ workers ⇒ es la ETA con paralelismo infinito. Degrada con gracia:
sin datos, peso=1 y el camino crítico = nº de pasos (lo que ya daban las ondas).

Verificado: con muestras sintéticas da "ETA 19 min sobre 5 pasos, kio → kparts →
frameworkintegration → breeze → plasma-integration"; sin datos degrada a "5 pasos
(SIN datos)". store/.times está git-ignorado (metadata de máquina, no se commitea).

LÍMITE honesto (en la cabecera de build-timed.sh): `hammer build` arrastra deps ⇒
la pared incluye deps no selladas. En orden topológico (drenar) las deps ya están
selladas y la pared mide sobre todo ESTA receta — cota superior buena para pesar.
La precisión exacta pediría instrumentar el sellado dentro de hammer-build (Rust).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-22 20:25:09 -04:00

580 lines
11 KiB
JSON

{
"schema": "hammer-keystones/3",
"nudos": [
{
"nudo": "incoming-kde/kio",
"gateo_total": 36,
"gateo_en_deuda": 36,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kparts",
"gateo_total": 19,
"gateo_en_deuda": 19,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kcmutils",
"gateo_total": 17,
"gateo_en_deuda": 17,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/ksvg",
"gateo_total": 14,
"gateo_en_deuda": 14,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/libplasma",
"gateo_total": 13,
"gateo_en_deuda": 13,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/qtspeech",
"gateo_total": 6,
"gateo_en_deuda": 6,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/frameworkintegration",
"gateo_total": 5,
"gateo_en_deuda": 5,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/syntax-highlighting",
"gateo_total": 5,
"gateo_en_deuda": 5,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kglobalacceld",
"gateo_total": 5,
"gateo_en_deuda": 5,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/ktexteditor",
"gateo_total": 4,
"gateo_en_deuda": 4,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/prison",
"gateo_total": 4,
"gateo_en_deuda": 4,
"exclusivo": 1,
"en_deuda": true
},
{
"nudo": "incoming-kde/plasma-activities-stats",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/libksysguard",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 3,
"en_deuda": true
},
{
"nudo": "incoming-kde/kscreenlocker",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kwin",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 9,
"en_deuda": true
},
{
"nudo": "incoming-kde/qtlocation",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/qcoro",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kunitconversion",
"gateo_total": 3,
"gateo_en_deuda": 3,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/qqc2-desktop-style",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/threadweaver",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/knotifyconfig",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/plasma5support",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/plasma-workspace",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 27,
"en_deuda": true
},
{
"nudo": "incoming-kde/qcoro-shared",
"gateo_total": 2,
"gateo_en_deuda": 2,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/systemsettings",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/poppler",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/breeze",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/networkmanager-qt",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/modemmanager-qt",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/qtkeychain",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/pulseaudio-qt",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/prison-scanner",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "incoming-kde/kpipewire",
"gateo_total": 1,
"gateo_en_deuda": 1,
"exclusivo": 0,
"en_deuda": true
},
{
"nudo": "corpus/make",
"gateo_total": 313,
"gateo_en_deuda": 65,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/binutils",
"gateo_total": 239,
"gateo_en_deuda": 65,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/zlib",
"gateo_total": 233,
"gateo_en_deuda": 65,
"exclusivo": 1,
"en_deuda": false
},
{
"nudo": "corpus/pkgconf",
"gateo_total": 269,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/python3",
"gateo_total": 205,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/samurai",
"gateo_total": 198,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/meson",
"gateo_total": 186,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/expat",
"gateo_total": 149,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/libffi",
"gateo_total": 149,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/bison",
"gateo_total": 147,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/flex",
"gateo_total": 144,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/zstd",
"gateo_total": 135,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/wayland",
"gateo_total": 134,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/libdrm",
"gateo_total": 132,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/wayland-protocols",
"gateo_total": 132,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/mako",
"gateo_total": 131,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/markupsafe",
"gateo_total": 131,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/packaging",
"gateo_total": 131,
"gateo_en_deuda": 64,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/cmake",
"gateo_total": 145,
"gateo_en_deuda": 62,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/mesa",
"gateo_total": 128,
"gateo_en_deuda": 62,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/pcre2",
"gateo_total": 138,
"gateo_en_deuda": 60,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/util-macros",
"gateo_total": 139,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xorgproto",
"gateo_total": 138,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXau",
"gateo_total": 134,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXdmcp",
"gateo_total": 134,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-proto",
"gateo_total": 134,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libpthread-stubs",
"gateo_total": 134,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libxcb",
"gateo_total": 133,
"gateo_en_deuda": 56,
"exclusivo": 1,
"en_deuda": false
},
{
"nudo": "incoming-kde/xtrans",
"gateo_total": 129,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libX11",
"gateo_total": 126,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/dbus",
"gateo_total": 122,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXfixes",
"gateo_total": 122,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXext",
"gateo_total": 121,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/openssl",
"gateo_total": 120,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXrender",
"gateo_total": 120,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libXi",
"gateo_total": 120,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util",
"gateo_total": 120,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util-image",
"gateo_total": 119,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util-renderutil",
"gateo_total": 119,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/libxkbcommon",
"gateo_total": 118,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util-keysyms",
"gateo_total": 118,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util-wm",
"gateo_total": 118,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/xcb-util-cursor",
"gateo_total": 118,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/qtbase",
"gateo_total": 117,
"gateo_en_deuda": 56,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "corpus/gettext-tiny",
"gateo_total": 85,
"gateo_en_deuda": 54,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/qttools",
"gateo_total": 103,
"gateo_en_deuda": 52,
"exclusivo": 0,
"en_deuda": false
},
{
"nudo": "incoming-kde/qtsvg",
"gateo_total": 100,
"gateo_en_deuda": 52,
"exclusivo": 0,
"en_deuda": false
}
],
"en_deuda": 33,
"camino_critico": {
"con_datos": false,
"segundos": null,
"pasos": 5,
"cobertura": "0/66",
"secuencia": [
"incoming-kde/kio",
"incoming-kde/kparts",
"incoming-kde/frameworkintegration",
"incoming-kde/qqc2-desktop-style",
"incoming-kde/filelight"
]
}
}