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>
186 lines
5.2 KiB
Plaintext
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
|