respaldo: el listado no recorre .dmerge — tardaba tanto que se cortaba
`du -s hammer/store/*` incluia `.dmerge`, la cache transitoria de fusion del store: 48 GB en el box el 2026-08-12. Recorrerla hacia que --listar tardara lo bastante como para cortarse por timeout, y entonces el box "devolvia 0 artefactos" — el guardian de los 0 hizo bien su trabajo y se nego a pisar el manifiesto, pero la causa no era el enlace. Con `store/[0-9a-f]*` el listado baja de cortarse a 3 s, y de paso descarta en el origen `.bootstrap-tmp`/`.mirror-tmp`, que nunca son artefactos. Un artefacto SIEMPRE empieza por hex: filtrar en el origen sale mas barato que traerse la basura y descartarla despues. Verificado: 2037 artefactos, 0 vacios. ⚠ Aparte: que .dmerge ESTE en el respaldo es en si un problema — son 48 GB de cache reconstruible ocupando el box, y el propio script la excluye al subir (`--exclude /.dmerge`). Llego por otra via. No se toca aqui: borrar en el destino es una decision deliberada y aparte. Y una limitacion del guardian de vacios que conviene conocer: durante una SUBIDA en curso, los directorios a medio escribir son indistinguibles de los rotos. Reporto 101 vacios a mitad del rsync y 0 al terminar. No es un falso positivo del filtro: es que la pregunta no tiene respuesta estable mientras se escribe. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Delta semántico
Ninguna definición cambió: el cambio es de texto, documentación o datos.
1 archivos · +6 −1
diff --git a/scripts/respaldo-storagebox.sh b/scripts/respaldo-storagebox.sh
index 6686e02e..5154c9f8 100755
--- a/scripts/respaldo-storagebox.sh
+++ b/scripts/respaldo-storagebox.sh
@@ -75,8 +75,13 @@ if [ "${1:-}" = "--listar" ]; then
# (2026-08-10: 7 vacíos de 1749, todos del stack gráfico, de una subida que falló callada.)
# Cuesta 8,6 s sobre 1751 artefactos frente a un `ls` instantáneo — barato para lo que evita.
# La shell del box no es bash y no tiene `find`, pero SÍ expande globs y SÍ tiene `du`.
+ # `du -s hammer/store/[0-9a-f]*` y NO `store/*`: el glob amplio incluye `.dmerge`, la caché
+ # transitoria de fusión —48 GB el 2026-08-12—, y recorrerla hace que el listado tarde tanto que se
+ # corta por timeout. El sufijo del glob además descarta de entrada los `.bootstrap-tmp`/`.mirror-tmp`
+ # que nunca son artefactos. Un artefacto SIEMPRE empieza por hex: filtrar en el origen es más barato
+ # que traerse la basura y descartarla aquí.
ssh -4 -p "$SB_PORT" -i "$KEY" -o StrictHostKeyChecking=accept-new \
- "$SB_USER@$SB_HOST" 'du -s hammer/store/*' 2>/dev/null > work/.respaldo-du.tmp
+ "$SB_USER@$SB_HOST" 'du -s hammer/store/[0-9a-f]*' 2>/dev/null > work/.respaldo-du.tmp
# OJO CON EL ORDEN: recortar la ruta ANTES del awk se come el contador (`sed 's#.*/##'` es codicioso
# y borra "5347<TAB>hammer/store/" entero), y entonces $1 es el NOMBRE, no los bloques: el filtro
# compara basura y devuelve cualquier cosa. Primero se filtra por número, después se recorta.