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>
580 lines
11 KiB
JSON
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"
|
|
]
|
|
}
|
|
}
|