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>
5.2 KiB
5.2 KiB
| 1 | # licencias-cargo.tsv — GENERADO por scripts/licencias-cargo.sh. No editar a mano. | ||
|---|---|---|---|
| 2 | # | ||
| 3 | # La licencia que el AUTOR declara en su Cargo.toml: expresión SPDX escrita por quien tiene | ||
| 4 | # la potestad de licenciar. Sin ambigüedad -only/-or-later y SIN colapsar las dobles ⇒ manda | ||
| 5 | # sobre la detección por API de GitHub, que pierde ambas cosas. Sembrar con FORZAR=1. | ||
| 6 | # | ||
| 7 | # Tercera columna = el ref con el que se resolvió. Un tag concreto significa que el dato es | ||
| 8 | # de la VERSIÓN QUE EMPAQUETAMOS; 'HEAD(aprox)' que no se halló el tag y puede diferir. | ||
| 9 | # Total 176 · al tag exacto 167 · aproximadas 9 | ||
| 10 | aichat | MIT OR Apache-2.0 | v0.30.0 |
| 11 | angle-grinder | MIT | v0.19.6 |
| 12 | atac | MIT | v0.23.0 |
| 13 | bacon | AGPL-3.0 | v3.23.0 |
| 14 | bandwhich | MIT | v0.23.1 |
| 15 | bat | MIT OR Apache-2.0 | v0.26.1 |
| 16 | bingrep | MIT | v0.12.1 |
| 17 | bob-nvim | MIT | v4.1.7 |
| 18 | bottom | MIT | 0.12.3 |
| 19 | broot | MIT | v1.57.0 |
| 20 | caligula | GPL-3.0 | v0.5.0 |
| 21 | cargo-bloat | MIT | v0.12.1 |
| 22 | cargo-bundle-licenses | MIT/Apache-2.0 | v4.2.0 |
| 23 | cargo-cache | MIT/Apache-2.0 | 0.8.3 |
| 24 | cargo-careful | MIT OR Apache-2.0 | v0.4.10 |
| 25 | cargo-criterion | Apache-2.0/MIT | 1.1.0 |
| 26 | cargo-deb | MIT | v3.7.0 |
| 27 | cargo-deny | MIT OR Apache-2.0 | 0.19.9 |
| 28 | cargo-edit | Apache-2.0 OR MIT | v0.13.11 |
| 29 | cargo-expand | MIT OR Apache-2.0 | 1.0.122 |
| 30 | cargo-feature | MIT | v0.7.0 |
| 31 | cargo-features-manager | MIT | v0.11.0 |
| 32 | cargo-flamegraph | MIT OR Apache-2.0 | v0.6.13 |
| 33 | cargo-fuzz | MIT OR Apache-2.0 | 0.13.2 |
| 34 | cargo-generate | MIT OR Apache-2.0 | v0.23.9 |
| 35 | cargo-hack | Apache-2.0 OR MIT | v0.6.45 |
| 36 | cargo-llvm-cov | Apache-2.0 OR MIT | v0.8.5 |
| 37 | cargo-llvm-lines | MIT OR Apache-2.0 | 0.4.46 |
| 38 | cargo-machete | MIT | v0.9.2 |
| 39 | cargo-make | Apache-2.0 | 0.37.24 |
| 40 | cargo-modules | MPL-2.0 | v0.26.0 |
| 41 | cargo-msrv | Apache-2.0 OR MIT | v0.19.3 |
| 42 | cargo-mutants | MIT | v27.1.0 |
| 43 | cargo-ndk | Apache-2.0 OR MIT | v4.1.2 |
| 44 | cargo-outdated | MIT | v0.19.0 |
| 45 | cargo-readme | MIT OR Apache-2.0 | v3.3.2 |
| 46 | cargo-semver-checks | Apache-2.0 OR MIT | v0.48.0 |
| 47 | cargo-sort | MIT/Apache-2.0 | v2.1.3 |
| 48 | cargo-supply-chain | Apache-2.0 OR MIT OR Zlib | v0.3.4 |
| 49 | cargo-sweep | MIT | v0.8.0 |
| 50 | cargo-temp | MIT OR Apache-2.0 | v0.4.1 |
| 51 | cargo-udeps | MIT OR Apache-2.0 | v0.1.61 |
| 52 | cargo-watch | CC0-1.0 | v8.5.3 |
| 53 | cargo-wipe | MIT | v0.4.0 |
| 54 | cargo-wizard | MIT | v0.2.3 |
| 55 | cargo-zigbuild | MIT | v0.22.3 |
| 56 | cbindgen | MPL-2.0 | v0.27.0 |
| 57 | choose | GPL-3.0-or-later | v1.3.7 |
| 58 | cobalt | MIT | v0.20.4 |
| 59 | comrak | BSD-2-Clause | v0.52.0 |
| 60 | cosmic-comp | GPL-3.0-only | HEAD(aprox) |
| 61 | cosmic-edit | GPL-3.0-only | HEAD(aprox) |
| 62 | cosmic-files | GPL-3.0-only | HEAD(aprox) |
| 63 | cosmic-osd | GPL-3.0-or-later | HEAD(aprox) |
| 64 | cosmic-session | GPL-3.0-only | HEAD(aprox) |
| 65 | cosmic-settings-daemon | GPL-3.0-or-later | HEAD(aprox) |
| 66 | cosmic-term | GPL-3.0-only | HEAD(aprox) |
| 67 | cpc | MIT | v3.0.0 |
| 68 | csview | MIT OR Apache-2.0 | v1.3.4 |
| 69 | csvlens | MIT | v0.13.0 |
| 70 | dalfox | MIT | v3.1.2 |
| 71 | ddh | LGPL-3.0 | 0.13.0 |
| 72 | delta | MIT | 0.19.2 |
| 73 | difftastic | MIT | 0.69.0 |
| 74 | diffutils | MIT OR Apache-2.0 | v0.5.0 |
| 75 | diskus | MIT/Apache-2.0 | v0.9.0 |
| 76 | dotter | Unlicense | v0.13.4 |
| 77 | dua | MIT | v2.34.0 |
| 78 | dufs | MIT OR Apache-2.0 | v0.46.0 |
| 79 | dust | Apache-2.0 | v1.2.4 |
| 80 | erdtree | MIT | v3.1.2 |
| 81 | eza | EUPL-1.2 | v0.23.4 |
| 82 | fastmod | Apache-2.0 | v0.4.4 |
| 83 | fblog | WTFPL | v4.17.0 |
| 84 | fd | MIT OR Apache-2.0 | v10.4.2 |
| 85 | feroxbuster | MIT | v2.13.1 |
| 86 | findutils | MIT | 0.9.1 |
| 87 | findutils-xargs | MIT | 0.9.1 |
| 88 | fnm | GPL-3.0 | v1.39.0 |
| 89 | fselect | MIT OR Apache-2.0 | 0.10.1 |
| 90 | genact | MIT | v1.5.1 |
| 91 | git-absorb | BSD-3-Clause | 0.9.0 |
| 92 | git-graph | MIT | v0.7.0 |
| 93 | git-igitt | MIT | v0.1.21 |
| 94 | gitoxide | MIT OR Apache-2.0 | v0.54.0 |
| 95 | gitui | MIT | v0.28.1 |
| 96 | gitu | MIT | v0.42.0 |
| 97 | gptman | MIT OR Apache-2.0 | v1.1.0 |
| 98 | grcov | MPL-2.0 | v0.9.1 |
| 99 | grex | Apache-2.0 | v1.4.6 |
| 100 | heh | MIT | v0.6.3 |
| 101 | hexyl | MIT/Apache-2.0 | v0.17.0 |
| 102 | hgrep | MIT | v0.3.9 |
| 103 | htmlq | MIT | v0.4.0 |
| 104 | hwatch | MIT | 0.4.2 |
| 105 | hyperfine | MIT OR Apache-2.0 | v1.20.0 |
| 106 | igrep | MIT | v1.3.0 |
| 107 | jnv | MIT | v0.7.1 |
| 108 | joshuto | LGPL-3.0 | v0.9.9 |
| 109 | just | CC0-1.0 | 1.51.0 |
| 110 | kbs2 | MIT | v0.7.3 |
| 111 | kmon | GPL-3.0 | v1.7.1 |
| 112 | kubie | Zlib | v0.26.1 |
| 113 | lsd | Apache-2.0 | v1.2.0 |
| 114 | macchina | MIT | v6.4.0 |
| 115 | maturin | MIT OR Apache-2.0 | v1.12.6 |
| 116 | mcfly | MIT | v0.9.3 |
| 117 | mdbook-mermaid | MPL-2.0 | v0.17.0 |
| 118 | mdbook-toc | MPL-2.0 | 0.15.4 |
| 119 | miniserve | MIT | v0.35.0 |
| 120 | mise | MIT | v2026.7.0 |
| 121 | monolith | CC0-1.0 | v2.10.1 |
| 122 | natls | MIT | v2.1.14 |
| 123 | navi | Apache-2.0 | v2.24.0 |
| 124 | netscanner | MIT | v0.6.41 |
| 125 | nomino | MIT OR Apache-2.0 | v1.6.4 |
| 126 | nu | MIT | 0.104.1 |
| 127 | oha | MIT | v1.14.0 |
| 128 | otree | MIT | v0.6.5 |
| 129 | ouch | MIT | 0.8.0 |
| 130 | ox | GPL-2.0 | 0.7.7 |
| 131 | parallel-disk-usage | Apache-2.0 | 0.21.1 |
| 132 | pastel | MIT/Apache-2.0 | v0.12.0 |
| 133 | pls | GPL-3.0-or-later | v0.0.1-beta.10 |
| 134 | pop-launcher | MPL-2.0 | 1.2.7 |
| 135 | presenterm | BSD-2-Clause | v0.16.1 |
| 136 | procs | MIT | v0.14.11 |
| 137 | rep-grep | MIT | 0.0.8 |
| 138 | repgrep | Unlicense OR MIT OR Apache-2.0 | 0.16.1 |
| 139 | rip2 | GPL-3.0+ | v0.9.6 |
| 140 | ripgrep-all | AGPL-3.0-or-later | v0.10.10 |
| 141 | ripgrep | Unlicense OR MIT | 14.1.1 |
| 142 | ripsecrets | MIT | v0.1.11 |
| 143 | rnr | MIT | v0.5.1 |
| 144 | ruplacer | BSD-3-Clause | v0.10.0 |
| 145 | russ | AGPL-3.0-or-later | HEAD(aprox) |
| 146 | rustcat | GPL-3.0 | v3.0.0 |
| 147 | rustic | Apache-2.0 OR MIT | v0.11.3 |
| 148 | rustscan | GPL-3.0-only | 2.4.1 |
| 149 | rust-script | MIT/Apache-2.0 | 0.36.0 |
| 150 | sccache | Apache-2.0 | v0.15.0 |
| 151 | sendme | Apache-2.0 OR MIT | v0.33.0 |
| 152 | serie | MIT | v0.8.0 |
| 153 | shellharden | MPL-2.0 | v4.3.1 |
| 154 | simple-http-server | MIT | v0.8.0 |
| 155 | skim | MIT | v4.7.0 |
| 156 | sshs | MIT | 4.7.2 |
| 157 | ssh-vault | BSD-3-Clause | 1.2.10 |
| 158 | starship | ISC | v1.25.1 |
| 159 | stylua | MPL-2.0 | v2.5.2 |
| 160 | systemctl-tui | MIT | v0.5.2 |
| 161 | taskwarrior-tui | MIT | v0.27.0 |
| 162 | tealdeer | MIT OR Apache-2.0 | v1.8.1 |
| 163 | television | MIT | 0.15.9 |
| 164 | tenere | GPL-3.0-or-later | v0.11.3 |
| 165 | tere | EUPL-1.2 | v1.6.0 |
| 166 | the-way | MIT | v0.20.3 |
| 167 | tokei | MIT OR Apache-2.0 | v14.0.0 |
| 168 | tomlq | MIT | 0.2.2 |
| 169 | topgrade | GPL-3.0-or-later | v17.6.1 |
| 170 | trunk | MIT/Apache-2.0 | v0.21.14 |
| 171 | ttyper | MIT | v1.6.0 |
| 172 | tuc | GPL-3.0-or-later | v1.3.0 |
| 173 | tuckr | GPL-3.0-or-later | 0.13.1 |
| 174 | viddy | MIT | v1.3.1 |
| 175 | viu | MIT | v1.6.1 |
| 176 | vivid | MIT/Apache-2.0 | v0.11.1 |
| 177 | wasm-pack | MIT OR Apache-2.0 | v0.15.0 |
| 178 | xan | Unlicense OR MIT | 0.59.0 |
| 179 | xdg-desktop-portal-cosmic | GPL-3.0-or-later | HEAD(aprox) |
| 180 | xh | MIT | v0.25.3 |
| 181 | xsv | Unlicense/MIT | 0.13.0 |
| 182 | xwin | Apache-2.0 OR MIT | 0.7.0 |
| 183 | zenith | MIT | 0.15.0 |
| 184 | zola | EUPL-1.2 | v0.22.1 |
| 185 | zoxide | MIT | v0.9.9 |