From dba9ec47c5b4fa5918abdb35ac9466f1560ccd4f Mon Sep 17 00:00:00 2001 From: Sergio Date: Thu, 20 Aug 2026 17:00:15 +0000 Subject: [PATCH] licencias: el detector borraba la evidencia que decia registrar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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) Claude-Session: https://claude.ai/code/session_01Xd5DComN9Nu47TBpYMBHBn --- recipes/consul.toml | 1 + recipes/nomad.toml | 1 + recipes/packer.toml | 1 + recipes/vault.toml | 1 + scripts/licencias-detectar.sh | 35 +++++++++++++++++++++++++++++++---- 5 files changed, 35 insertions(+), 4 deletions(-) diff --git a/recipes/consul.toml b/recipes/consul.toml index aeafc1f5..44786db1 100644 --- a/recipes/consul.toml +++ b/recipes/consul.toml @@ -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" diff --git a/recipes/nomad.toml b/recipes/nomad.toml index 4753def1..ef0de16f 100644 --- a/recipes/nomad.toml +++ b/recipes/nomad.toml @@ -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" diff --git a/recipes/packer.toml b/recipes/packer.toml index d3d2f295..2113e40c 100644 --- a/recipes/packer.toml +++ b/recipes/packer.toml @@ -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" diff --git a/recipes/vault.toml b/recipes/vault.toml index 122f457c..38c7b30b 100644 --- a/recipes/vault.toml +++ b/recipes/vault.toml @@ -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" diff --git a/scripts/licencias-detectar.sh b/scripts/licencias-detectar.sh index 16d96d42..a96d1500 100755 --- a/scripts/licencias-detectar.sh +++ b/scripts/licencias-detectar.sh @@ -84,9 +84,36 @@ SIN=$(wc -l < "$TMP/sin.tsv" 2>/dev/null || echo 0) echo "#" echo "# Formato: " 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