`yupana duplicados` caza nudos que son el MISMO paquete bajo nombres/colas
distintos, agrupando por lo que BAJA (sha/url), no por el nombre. Clasifica:
colisión-fuente — mismo sha, familias de nombre DISTINTAS ⇒ casi seguro un
sha copiado por error. ACCIONABLE.
variante — mismo sha, misma familia (zlib/zlib-shared, mesa-*) ⇒
diversificación deliberada estático/shared, OK (14 vistas).
sombra — mismo nombre en >1 cola; redundante si versión+sha+deps
coinciden (una sobra), justificada si difieren.
HALLAZGO INMEDIATO — el detector encontró un bug real en su primera corrida:
itstool.toml dice versión 2.0.7 pero su url+sha apuntan al tarball de
gettext-tiny (29cc165e…). Construiría la fuente equivocada. radio itstool=1,
gettext-tiny=78 ⇒ el sha copiado es el de itstool.
Otras 3 colisiones son demos (adwaita-hello/libadwaita, sourceview-hello/
gtksourceview, radio 0) o subcomponentes (prison/prison-scanner) — a revisar,
no urgentes. Y 1 sombra redundante: incoming-kde/dbus es byte-idéntica a
corpus/dbus (mismo hash de artefacto) ⇒ los 114 consumidores KDE podrían
apuntar a corpus/dbus sin rebuild.
NO funde nada solo: reporta a docs/state/duplicados.json y deja el juicio al
humano (como el triaje). El radio de cada nudo dice cuál es el canónico (el de
mayor radio). Guardián extendido: test-yupana-radio.py falla si el detector
deja de ver colisiones de fuente (agrupar por nombre en vez de sha = invariante
c ciego).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
358 lines
5.8 KiB
JSON
358 lines
5.8 KiB
JSON
{
|
|
"schema": "hammer-duplicados/1",
|
|
"colisiones_fuente": [
|
|
{
|
|
"sha": "29cc165e27e83d2b",
|
|
"nudos": [
|
|
"corpus/gettext-tiny",
|
|
"corpus/itstool"
|
|
],
|
|
"radio": {
|
|
"corpus/gettext-tiny": 78,
|
|
"corpus/itstool": 1
|
|
}
|
|
},
|
|
{
|
|
"sha": "5eacc5550f0bdbba",
|
|
"nudos": [
|
|
"corpus/adwaita-hello",
|
|
"corpus/libadwaita"
|
|
],
|
|
"radio": {
|
|
"corpus/adwaita-hello": 0,
|
|
"corpus/libadwaita": 3
|
|
}
|
|
},
|
|
{
|
|
"sha": "760903e9ae401f8b",
|
|
"nudos": [
|
|
"incoming-kde/prison",
|
|
"incoming-kde/prison-scanner"
|
|
],
|
|
"radio": {
|
|
"incoming-kde/prison-scanner": 1,
|
|
"incoming-kde/prison": 3
|
|
}
|
|
},
|
|
{
|
|
"sha": "ab35d420102f3e8b",
|
|
"nudos": [
|
|
"corpus/gtksourceview",
|
|
"corpus/hammer-edit",
|
|
"corpus/sourceview-hello"
|
|
],
|
|
"radio": {
|
|
"corpus/gtksourceview": 2,
|
|
"corpus/hammer-edit": 0,
|
|
"corpus/sourceview-hello": 0
|
|
}
|
|
}
|
|
],
|
|
"variantes": [
|
|
{
|
|
"sha": "ab5a03176ee106d3",
|
|
"nudos": [
|
|
"corpus/bzip2",
|
|
"incoming-kde/bzip2-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/bzip2": 0,
|
|
"incoming-kde/bzip2-shared": 3
|
|
}
|
|
},
|
|
{
|
|
"sha": "2300f3dbfa7253b3",
|
|
"nudos": [
|
|
"corpus/fontconfig",
|
|
"incoming-kde/fontconfig-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/fontconfig": 17,
|
|
"incoming-kde/fontconfig-shared": 2
|
|
}
|
|
},
|
|
{
|
|
"sha": "36bc4f1cc4133353",
|
|
"nudos": [
|
|
"corpus/freetype",
|
|
"incoming-kde/freetype-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/freetype": 19,
|
|
"incoming-kde/freetype-shared": 3
|
|
}
|
|
},
|
|
{
|
|
"sha": "51ab804c56f6eab3",
|
|
"nudos": [
|
|
"corpus/glib",
|
|
"incoming-kde/glib-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/glib": 14,
|
|
"incoming-kde/glib-shared": 10
|
|
}
|
|
},
|
|
{
|
|
"sha": "e1817c650ddc3261",
|
|
"nudos": [
|
|
"corpus/gtk4",
|
|
"corpus/gtk4-hello"
|
|
],
|
|
"radio": {
|
|
"corpus/gtk4-hello": 0,
|
|
"corpus/gtk4": 6
|
|
}
|
|
},
|
|
{
|
|
"sha": "075920b826834ac4",
|
|
"nudos": [
|
|
"corpus/libjpeg-turbo",
|
|
"incoming-kde/libjpeg-turbo-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/libjpeg-turbo": 9,
|
|
"incoming-kde/libjpeg-turbo-shared": 6
|
|
}
|
|
},
|
|
{
|
|
"sha": "8c9b05b675ca7301",
|
|
"nudos": [
|
|
"corpus/libpng",
|
|
"incoming-kde/libpng-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/libpng": 16,
|
|
"incoming-kde/libpng-shared": 8
|
|
}
|
|
},
|
|
{
|
|
"sha": "ffc6af80b014ddeb",
|
|
"nudos": [
|
|
"corpus/linux",
|
|
"corpus/linux-headers",
|
|
"corpus/linux-metal"
|
|
],
|
|
"radio": {
|
|
"corpus/linux-headers": 29,
|
|
"corpus/linux-metal": 0,
|
|
"corpus/linux": 0
|
|
}
|
|
},
|
|
{
|
|
"sha": "b43e0a2db2a89fc5",
|
|
"nudos": [
|
|
"corpus/linux-generic",
|
|
"corpus/linux-metal-dual"
|
|
],
|
|
"radio": {
|
|
"corpus/linux-generic": 0,
|
|
"corpus/linux-metal-dual": 0
|
|
}
|
|
},
|
|
{
|
|
"sha": "51aa686ca4060e38",
|
|
"nudos": [
|
|
"corpus/mesa",
|
|
"corpus/mesa-llvmpipe",
|
|
"corpus/mesa-swrast"
|
|
],
|
|
"radio": {
|
|
"corpus/mesa-llvmpipe": 0,
|
|
"corpus/mesa-swrast": 0,
|
|
"corpus/mesa": 124
|
|
}
|
|
},
|
|
{
|
|
"sha": "47fe8c99461250d4",
|
|
"nudos": [
|
|
"corpus/pcre2",
|
|
"incoming-kde/pcre2-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/pcre2": 19,
|
|
"incoming-kde/pcre2-shared": 11
|
|
}
|
|
},
|
|
{
|
|
"sha": "fff1ffcf2b0da84d",
|
|
"nudos": [
|
|
"corpus/xz",
|
|
"incoming-kde/xz-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/xz": 0,
|
|
"incoming-kde/xz-shared": 4
|
|
}
|
|
},
|
|
{
|
|
"sha": "9a93b2b7dfdac77c",
|
|
"nudos": [
|
|
"corpus/zlib",
|
|
"incoming-kde/zlib-shared"
|
|
],
|
|
"radio": {
|
|
"corpus/zlib": 67,
|
|
"incoming-kde/zlib-shared": 34
|
|
}
|
|
},
|
|
{
|
|
"sha": "809afafab61593f9",
|
|
"nudos": [
|
|
"incoming-kde/qcoro",
|
|
"incoming-kde/qcoro-shared"
|
|
],
|
|
"radio": {
|
|
"incoming-kde/qcoro-shared": 2,
|
|
"incoming-kde/qcoro": 1
|
|
}
|
|
}
|
|
],
|
|
"sombras": [
|
|
{
|
|
"nombre": "dbus",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": true,
|
|
"radio": {
|
|
"corpus/dbus": 0,
|
|
"incoming-kde/dbus": 114
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libarchive",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libarchive": 0,
|
|
"incoming-kde/libarchive": 1
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libevdev",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libevdev": 2,
|
|
"incoming-kde/libevdev": 2
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libgcrypt",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libgcrypt": 1,
|
|
"incoming-kde/libgcrypt": 16
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libgpg-error",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libgpg-error": 4,
|
|
"incoming-kde/libgpg-error": 16
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libinput",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libinput": 1,
|
|
"incoming-kde/libinput": 1
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libnl",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libnl": 1,
|
|
"incoming-kde/libnl": 2
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libxkbcommon",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libxkbcommon": 9,
|
|
"incoming-kde/libxkbcommon": 114
|
|
}
|
|
},
|
|
{
|
|
"nombre": "libxml2",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/libxml2": 7,
|
|
"incoming-kde/libxml2": 4
|
|
}
|
|
},
|
|
{
|
|
"nombre": "mtdev",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/mtdev": 2,
|
|
"incoming-kde/mtdev": 2
|
|
}
|
|
},
|
|
{
|
|
"nombre": "openssl",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/openssl": 25,
|
|
"incoming-kde/openssl": 21
|
|
}
|
|
},
|
|
{
|
|
"nombre": "util-linux",
|
|
"colas": [
|
|
"corpus",
|
|
"incoming-kde"
|
|
],
|
|
"redundante": false,
|
|
"radio": {
|
|
"corpus/util-linux": 1,
|
|
"incoming-kde/util-linux": 20
|
|
}
|
|
}
|
|
]
|
|
}
|