Files
hammer/docs/licencias-cargo.tsv
sergioandClaude Opus 5 c8d1357f06 licencias: la declaración del autor manda — y arreglo 5 recetas que ROMPÍ y commiteé
Dos cosas: una mejora de calidad y un fallo mío que hay que contar entero.

═══ EL FALLO: escribí un error JSON dentro de 5 recetas y las commiteé rotas ═══
En `a6a9d59`, cinco recetas quedaron con
    license = "{"message":"Not Found","documentation_url":"...","status":"404"}"
Causa: cuando el repo da 404 (renombrado, borrado, privado), `gh api` escribe el CUERPO DEL
ERROR en stdout y el filtro `--jq` falla, así que la variable queda valiendo el JSON. Mi
`case` sólo descartaba ""/null/NOASSERTION/other ⇒ el JSON pasó como si fuera una licencia.
Las comillas ROMPEN el TOML, y esas 5 recetas dejaron de parsear y de tener ArtifactHash.

No lo vio nadie leyendo: lo cazó la comparación de hashes, al detectar que `cargo-sort`
había cambiado. Afectadas: cargo-sort, cargo-audit, cargo-binstall, waybackurls, usbutils.

La lección no es «se me pasó un caso», es que **validé los «no sé» conocidos en vez de la
FORMA del dato**. Ahora se acepta sólo lo que tiene forma de expresión SPDX, y la barrera
está en los DOS sitios que escriben (detectar y sembrar), más un GUARDIÁN en el informe que
sale ≠0 si alguna licencia tiene forma imposible. Un fallo aguas arriba disfrazado de dato
hay que verlo sin buscarlo.

Y de paso normalizadas 11 licencias con la barra antigua de Cargo (`MIT/Apache-2.0`), que
no es SPDX válido. Traducir la barra a OR no es inferir: Cargo documentó esa equivalencia.

═══ LA MEJORA: `scripts/licencias-cargo.sh` ═══
Lee la licencia que el AUTOR declara en su Cargo.toml, pidiéndola AL TAG QUE LA RECETA
PINEA (`?ref=v<version>`, con HEAD como último recurso y anotando cuál se usó). 176
obtenidas, 167 al tag exacto. Es la fuente más autoritativa de las que usamos y corrige los
dos defectos de la detección por API de una vez:
 · las licencias DOBLES dejan de colapsar: `fd` pasa de `Apache-2.0` a `MIT OR Apache-2.0`,
   `ripgrep` a `Unlicense OR MIT`, `bat` a `MIT OR Apache-2.0`;
 · los SPDX AMBIGUOS caen de 71 a 55, porque el autor sí escribe -only/-or-later.
66 corregidas, 7 nuevas. Y aparecieron cosas que la detección había perdido: `eza` es
EUPL-1.2, una copyleft europea que se habría empaquetado creyendo otra cosa.

Jerarquía de evidencia, escrita en la cabecera del script: nombre (prohibido) < familia/URL
de fuente < API de licencias de GitHub < Cargo.toml del autor.

997 de 1141 (87%). Verificación COMPLETA sobre las 77 recetas tocadas —no una muestra—:
0 hashes cambiados, y 5 que ahora parsean y en HEAD no.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-07 13:51:09 -04:00

186 lines
5.2 KiB
Plaintext

# licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano.
#
# La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene
# la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda
# sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1.
#
# Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es
# de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir.
# Total 176 · al tag exacto 167 · aproximadas 9
aichat MIT OR Apache-2.0 v0.30.0
angle-grinder MIT v0.19.6
atac MIT v0.23.0
bacon AGPL-3.0 v3.23.0
bandwhich MIT v0.23.1
bat MIT OR Apache-2.0 v0.26.1
bingrep MIT v0.12.1
bob-nvim MIT v4.1.7
bottom MIT 0.12.3
broot MIT v1.57.0
caligula GPL-3.0 v0.5.0
cargo-bloat MIT v0.12.1
cargo-bundle-licenses MIT/Apache-2.0 v4.2.0
cargo-cache MIT/Apache-2.0 0.8.3
cargo-careful MIT OR Apache-2.0 v0.4.10
cargo-criterion Apache-2.0/MIT 1.1.0
cargo-deb MIT v3.7.0
cargo-deny MIT OR Apache-2.0 0.19.9
cargo-edit Apache-2.0 OR MIT v0.13.11
cargo-expand MIT OR Apache-2.0 1.0.122
cargo-feature MIT v0.7.0
cargo-features-manager MIT v0.11.0
cargo-flamegraph MIT OR Apache-2.0 v0.6.13
cargo-fuzz MIT OR Apache-2.0 0.13.2
cargo-generate MIT OR Apache-2.0 v0.23.9
cargo-hack Apache-2.0 OR MIT v0.6.45
cargo-llvm-cov Apache-2.0 OR MIT v0.8.5
cargo-llvm-lines MIT OR Apache-2.0 0.4.46
cargo-machete MIT v0.9.2
cargo-make Apache-2.0 0.37.24
cargo-modules MPL-2.0 v0.26.0
cargo-msrv Apache-2.0 OR MIT v0.19.3
cargo-mutants MIT v27.1.0
cargo-ndk Apache-2.0 OR MIT v4.1.2
cargo-outdated MIT v0.19.0
cargo-readme MIT OR Apache-2.0 v3.3.2
cargo-semver-checks Apache-2.0 OR MIT v0.48.0
cargo-sort MIT/Apache-2.0 v2.1.3
cargo-supply-chain Apache-2.0 OR MIT OR Zlib v0.3.4
cargo-sweep MIT v0.8.0
cargo-temp MIT OR Apache-2.0 v0.4.1
cargo-udeps MIT OR Apache-2.0 v0.1.61
cargo-watch CC0-1.0 v8.5.3
cargo-wipe MIT v0.4.0
cargo-wizard MIT v0.2.3
cargo-zigbuild MIT v0.22.3
cbindgen MPL-2.0 v0.27.0
choose GPL-3.0-or-later v1.3.7
cobalt MIT v0.20.4
comrak BSD-2-Clause v0.52.0
cosmic-comp GPL-3.0-only HEAD(aprox)
cosmic-edit GPL-3.0-only HEAD(aprox)
cosmic-files GPL-3.0-only HEAD(aprox)
cosmic-osd GPL-3.0-or-later HEAD(aprox)
cosmic-session GPL-3.0-only HEAD(aprox)
cosmic-settings-daemon GPL-3.0-or-later HEAD(aprox)
cosmic-term GPL-3.0-only HEAD(aprox)
cpc MIT v3.0.0
csview MIT OR Apache-2.0 v1.3.4
csvlens MIT v0.13.0
dalfox MIT v3.1.2
ddh LGPL-3.0 0.13.0
delta MIT 0.19.2
difftastic MIT 0.69.0
diffutils MIT OR Apache-2.0 v0.5.0
diskus MIT/Apache-2.0 v0.9.0
dotter Unlicense v0.13.4
dua MIT v2.34.0
dufs MIT OR Apache-2.0 v0.46.0
dust Apache-2.0 v1.2.4
erdtree MIT v3.1.2
eza EUPL-1.2 v0.23.4
fastmod Apache-2.0 v0.4.4
fblog WTFPL v4.17.0
fd MIT OR Apache-2.0 v10.4.2
feroxbuster MIT v2.13.1
findutils MIT 0.9.1
findutils-xargs MIT 0.9.1
fnm GPL-3.0 v1.39.0
fselect MIT OR Apache-2.0 0.10.1
genact MIT v1.5.1
git-absorb BSD-3-Clause 0.9.0
git-graph MIT v0.7.0
git-igitt MIT v0.1.21
gitoxide MIT OR Apache-2.0 v0.54.0
gitui MIT v0.28.1
gitu MIT v0.42.0
gptman MIT OR Apache-2.0 v1.1.0
grcov MPL-2.0 v0.9.1
grex Apache-2.0 v1.4.6
heh MIT v0.6.3
hexyl MIT/Apache-2.0 v0.17.0
hgrep MIT v0.3.9
htmlq MIT v0.4.0
hwatch MIT 0.4.2
hyperfine MIT OR Apache-2.0 v1.20.0
igrep MIT v1.3.0
jnv MIT v0.7.1
joshuto LGPL-3.0 v0.9.9
just CC0-1.0 1.51.0
kbs2 MIT v0.7.3
kmon GPL-3.0 v1.7.1
kubie Zlib v0.26.1
lsd Apache-2.0 v1.2.0
macchina MIT v6.4.0
maturin MIT OR Apache-2.0 v1.12.6
mcfly MIT v0.9.3
mdbook-mermaid MPL-2.0 v0.17.0
mdbook-toc MPL-2.0 0.15.4
miniserve MIT v0.35.0
mise MIT v2026.7.0
monolith CC0-1.0 v2.10.1
natls MIT v2.1.14
navi Apache-2.0 v2.24.0
netscanner MIT v0.6.41
nomino MIT OR Apache-2.0 v1.6.4
nu MIT 0.104.1
oha MIT v1.14.0
otree MIT v0.6.5
ouch MIT 0.8.0
ox GPL-2.0 0.7.7
parallel-disk-usage Apache-2.0 0.21.1
pastel MIT/Apache-2.0 v0.12.0
pls GPL-3.0-or-later v0.0.1-beta.10
pop-launcher MPL-2.0 1.2.7
presenterm BSD-2-Clause v0.16.1
procs MIT v0.14.11
rep-grep MIT 0.0.8
repgrep Unlicense OR MIT OR Apache-2.0 0.16.1
rip2 GPL-3.0+ v0.9.6
ripgrep-all AGPL-3.0-or-later v0.10.10
ripgrep Unlicense OR MIT 14.1.1
ripsecrets MIT v0.1.11
rnr MIT v0.5.1
ruplacer BSD-3-Clause v0.10.0
russ AGPL-3.0-or-later HEAD(aprox)
rustcat GPL-3.0 v3.0.0
rustic Apache-2.0 OR MIT v0.11.3
rustscan GPL-3.0-only 2.4.1
rust-script MIT/Apache-2.0 0.36.0
sccache Apache-2.0 v0.15.0
sendme Apache-2.0 OR MIT v0.33.0
serie MIT v0.8.0
shellharden MPL-2.0 v4.3.1
simple-http-server MIT v0.8.0
skim MIT v4.7.0
sshs MIT 4.7.2
ssh-vault BSD-3-Clause 1.2.10
starship ISC v1.25.1
stylua MPL-2.0 v2.5.2
systemctl-tui MIT v0.5.2
taskwarrior-tui MIT v0.27.0
tealdeer MIT OR Apache-2.0 v1.8.1
television MIT 0.15.9
tenere GPL-3.0-or-later v0.11.3
tere EUPL-1.2 v1.6.0
the-way MIT v0.20.3
tokei MIT OR Apache-2.0 v14.0.0
tomlq MIT 0.2.2
topgrade GPL-3.0-or-later v17.6.1
trunk MIT/Apache-2.0 v0.21.14
ttyper MIT v1.6.0
tuc GPL-3.0-or-later v1.3.0
tuckr GPL-3.0-or-later 0.13.1
viddy MIT v1.3.1
viu MIT v1.6.1
vivid MIT/Apache-2.0 v0.11.1
wasm-pack MIT OR Apache-2.0 v0.15.0
xan Unlicense OR MIT 0.59.0
xdg-desktop-portal-cosmic GPL-3.0-or-later HEAD(aprox)
xh MIT v0.25.3
xsv Unlicense/MIT 0.13.0
xwin Apache-2.0 OR MIT 0.7.0
zenith MIT 0.15.0
zola EUPL-1.2 v0.22.1
zoxide MIT v0.9.9