licencias: el detector borraba la evidencia que decia registrar

Consulta solo las recetas que HOY no tienen licencia, asi que su cosecha MENGUA
a cada pasada: lo sembrado ayer ya no sale en --faltan. Y reescribia el fichero
entero con la cosecha del dia. Hoy una pasada con CERO detecciones dejo
docs/licencias-detectadas.tsv en 0 filas y se llevo las 610 que documentaban de
donde salia cada licencia ya sembrada.

Salio con exit 0 diciendo «escrito» y «sembrar con». Un vacio que llega hasta el
final afirmando que todo fue bien — la regla 3 de CLAUDE.md, esta vez sobre el
registro de procedencia en vez de sobre un artefacto.

Ahora FUSIONA con lo registrado (la fila nueva gana) y se niega a sobrescribir
si el resultado pierde filas: un registro de evidencia que encoge es un fallo,
no un resultado. Con CON=0 lo dice y no invita a sembrar nada.

Y las cuatro de HashiCorp quedan declaradas: BUSL-1.1.

No es adivinado ni sale de la API —que devuelve NOASSERTION en las cuatro, y por
eso llevaban meses sin licencia—: es el texto del LICENSE del TAG QUE LA RECETA
PINEA, no el de la rama por defecto. consul v1.22.7, vault v1.21.4, nomad
v1.11.3 y packer v1.15.4 abren con «Business Source License 1.1».

⚠ BUSL-1.1 NO es una licencia libre: prohibe el uso en produccion que compita
con el producto de pago, y solo pasa a MPL-2.0 cuatro años despues de cada
version. Cuatro paquetes del catalogo publicable no son redistribuibles como si
fueran libres.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Xd5DComN9Nu47TBpYMBHBn
This commit is contained in:
Sergio
2026-08-20 17:00:15 +00:00
co-authored by Claude Opus 5
parent 4996807db0
commit dba9ec47c5
5 changed files with 35 additions and 4 deletions
+1
View File
@@ -4,6 +4,7 @@
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
name = "consul"
version = "1.22.7"
license = "BUSL-1.1"
[source]
repo = "https://github.com/hashicorp/consul"
+1
View File
@@ -4,6 +4,7 @@
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
name = "nomad"
version = "1.11.3"
license = "BUSL-1.1"
[source]
repo = "https://github.com/hashicorp/nomad"
+1
View File
@@ -4,6 +4,7 @@
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
name = "packer"
version = "1.15.4"
license = "BUSL-1.1"
[source]
repo = "https://github.com/hashicorp/packer"
+1
View File
@@ -4,6 +4,7 @@
# - las deps van con su nombre NIX; remapealas a las recetas del corpus si difieren.
name = "vault"
version = "1.21.4"
license = "BUSL-1.1"
[source]
repo = "https://github.com/hashicorp/vault"
+31 -4
View File
@@ -84,9 +84,36 @@ SIN=$(wc -l < "$TMP/sin.tsv" 2>/dev/null || echo 0)
echo "#"
echo "# Formato: <receta><TAB><SPDX><TAB><owner/repo consultado>"
echo "# Consultadas $TOT · con SPDX definido $CON · sin SPDX utilizable $SIN"
sort "$TMP/con.tsv" 2>/dev/null
} > "$SALIDA"
# ── SE FUSIONA CON LO YA REGISTRADO, NO SE REEMPLAZA ─────────────────────────────────────────
# Este script consulta sólo las recetas que HOY no tienen licencia, así que su cosecha MENGUA a
# cada pasada: lo que sembró ayer ya no aparece en `--faltan`. Reescribir el fichero con la
# cosecha del día borraba la procedencia de todo lo anterior — el 2026-08-20 una pasada con CERO
# detecciones dejó el TSV en 0 filas y se llevó por delante las 610 que documentaban de dónde
# salía cada licencia ya sembrada. Y salió con éxito, diciendo «escrito» y «sembrar con»: un
# vacío que llega hasta el final afirmando que todo fue bien (regla 3 de CLAUDE.md).
# El fichero es el REGISTRO DE EVIDENCIA de lo detectado, no el parte de la última pasada.
{ grep -v '^#' "$SALIDA" 2>/dev/null; cat "$TMP/con.tsv" 2>/dev/null; } \
| awk -F'\t' 'NF && !vista[$1]++' | sort
} > "$TMP/salida.nueva"
# El fichero sólo se reemplaza si el resultado NO PIERDE filas. Un registro de evidencia que encoge
# es un fallo, no un resultado: se para y se dice, en vez de sobrescribir y avisar de nada.
ANTES=$(grep -vc '^#' "$SALIDA" 2>/dev/null || echo 0)
DESPUES=$(grep -vc '^#' "$TMP/salida.nueva" 2>/dev/null || echo 0)
if [ "$DESPUES" -lt "$ANTES" ]; then
echo "!! ABORTO: la fusión daría $DESPUES filas y $SALIDA tiene $ANTES. No lo sobrescribo."
echo "!! La versión nueva queda en: $TMP/salida.nueva (se borra al salir; copiála si la querés)"
cp "$TMP/salida.nueva" "$SALIDA.rechazado" 2>/dev/null && echo "!! copia en $SALIDA.rechazado"
exit 1
fi
mv "$TMP/salida.nueva" "$SALIDA"
echo "==> con SPDX definido: $CON · descartadas por indefinido: $SIN"
echo "==> escrito: $SALIDA"
echo "==> sembrar con: TABLA=$SALIDA ./scripts/licencias.sh --sembrar"
if [ "$CON" -eq 0 ]; then
echo "==> NADA NUEVO que sembrar: las $SIN consultadas dan SPDX indefinido (NOASSERTION/other)."
echo "==> Ése es el residuo duro: hay que LEER el LICENSE del tag pineado."
echo "==> $SALIDA queda intacto con sus $DESPUES filas de evidencia previa."
else
echo "==> escrito: $SALIDA ($DESPUES filas, $CON nuevas)"
echo "==> sembrar con: TABLA=$SALIDA ./scripts/licencias.sh --sembrar"
fi