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

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
10aichatMIT OR Apache-2.0v0.30.0
11angle-grinderMITv0.19.6
12atacMITv0.23.0
13baconAGPL-3.0v3.23.0
14bandwhichMITv0.23.1
15batMIT OR Apache-2.0v0.26.1
16bingrepMITv0.12.1
17bob-nvimMITv4.1.7
18bottomMIT0.12.3
19brootMITv1.57.0
20caligulaGPL-3.0v0.5.0
21cargo-bloatMITv0.12.1
22cargo-bundle-licensesMIT/Apache-2.0v4.2.0
23cargo-cacheMIT/Apache-2.00.8.3
24cargo-carefulMIT OR Apache-2.0v0.4.10
25cargo-criterionApache-2.0/MIT1.1.0
26cargo-debMITv3.7.0
27cargo-denyMIT OR Apache-2.00.19.9
28cargo-editApache-2.0 OR MITv0.13.11
29cargo-expandMIT OR Apache-2.01.0.122
30cargo-featureMITv0.7.0
31cargo-features-managerMITv0.11.0
32cargo-flamegraphMIT OR Apache-2.0v0.6.13
33cargo-fuzzMIT OR Apache-2.00.13.2
34cargo-generateMIT OR Apache-2.0v0.23.9
35cargo-hackApache-2.0 OR MITv0.6.45
36cargo-llvm-covApache-2.0 OR MITv0.8.5
37cargo-llvm-linesMIT OR Apache-2.00.4.46
38cargo-macheteMITv0.9.2
39cargo-makeApache-2.00.37.24
40cargo-modulesMPL-2.0v0.26.0
41cargo-msrvApache-2.0 OR MITv0.19.3
42cargo-mutantsMITv27.1.0
43cargo-ndkApache-2.0 OR MITv4.1.2
44cargo-outdatedMITv0.19.0
45cargo-readmeMIT OR Apache-2.0v3.3.2
46cargo-semver-checksApache-2.0 OR MITv0.48.0
47cargo-sortMIT/Apache-2.0v2.1.3
48cargo-supply-chainApache-2.0 OR MIT OR Zlibv0.3.4
49cargo-sweepMITv0.8.0
50cargo-tempMIT OR Apache-2.0v0.4.1
51cargo-udepsMIT OR Apache-2.0v0.1.61
52cargo-watchCC0-1.0v8.5.3
53cargo-wipeMITv0.4.0
54cargo-wizardMITv0.2.3
55cargo-zigbuildMITv0.22.3
56cbindgenMPL-2.0v0.27.0
57chooseGPL-3.0-or-laterv1.3.7
58cobaltMITv0.20.4
59comrakBSD-2-Clausev0.52.0
60cosmic-compGPL-3.0-onlyHEAD(aprox)
61cosmic-editGPL-3.0-onlyHEAD(aprox)
62cosmic-filesGPL-3.0-onlyHEAD(aprox)
63cosmic-osdGPL-3.0-or-laterHEAD(aprox)
64cosmic-sessionGPL-3.0-onlyHEAD(aprox)
65cosmic-settings-daemonGPL-3.0-or-laterHEAD(aprox)
66cosmic-termGPL-3.0-onlyHEAD(aprox)
67cpcMITv3.0.0
68csviewMIT OR Apache-2.0v1.3.4
69csvlensMITv0.13.0
70dalfoxMITv3.1.2
71ddhLGPL-3.00.13.0
72deltaMIT0.19.2
73difftasticMIT0.69.0
74diffutilsMIT OR Apache-2.0v0.5.0
75diskusMIT/Apache-2.0v0.9.0
76dotterUnlicensev0.13.4
77duaMITv2.34.0
78dufsMIT OR Apache-2.0v0.46.0
79dustApache-2.0v1.2.4
80erdtreeMITv3.1.2
81ezaEUPL-1.2v0.23.4
82fastmodApache-2.0v0.4.4
83fblogWTFPLv4.17.0
84fdMIT OR Apache-2.0v10.4.2
85feroxbusterMITv2.13.1
86findutilsMIT0.9.1
87findutils-xargsMIT0.9.1
88fnmGPL-3.0v1.39.0
89fselectMIT OR Apache-2.00.10.1
90genactMITv1.5.1
91git-absorbBSD-3-Clause0.9.0
92git-graphMITv0.7.0
93git-igittMITv0.1.21
94gitoxideMIT OR Apache-2.0v0.54.0
95gituiMITv0.28.1
96gituMITv0.42.0
97gptmanMIT OR Apache-2.0v1.1.0
98grcovMPL-2.0v0.9.1
99grexApache-2.0v1.4.6
100hehMITv0.6.3
101hexylMIT/Apache-2.0v0.17.0
102hgrepMITv0.3.9
103htmlqMITv0.4.0
104hwatchMIT0.4.2
105hyperfineMIT OR Apache-2.0v1.20.0
106igrepMITv1.3.0
107jnvMITv0.7.1
108joshutoLGPL-3.0v0.9.9
109justCC0-1.01.51.0
110kbs2MITv0.7.3
111kmonGPL-3.0v1.7.1
112kubieZlibv0.26.1
113lsdApache-2.0v1.2.0
114macchinaMITv6.4.0
115maturinMIT OR Apache-2.0v1.12.6
116mcflyMITv0.9.3
117mdbook-mermaidMPL-2.0v0.17.0
118mdbook-tocMPL-2.00.15.4
119miniserveMITv0.35.0
120miseMITv2026.7.0
121monolithCC0-1.0v2.10.1
122natlsMITv2.1.14
123naviApache-2.0v2.24.0
124netscannerMITv0.6.41
125nominoMIT OR Apache-2.0v1.6.4
126nuMIT0.104.1
127ohaMITv1.14.0
128otreeMITv0.6.5
129ouchMIT0.8.0
130oxGPL-2.00.7.7
131parallel-disk-usageApache-2.00.21.1
132pastelMIT/Apache-2.0v0.12.0
133plsGPL-3.0-or-laterv0.0.1-beta.10
134pop-launcherMPL-2.01.2.7
135presentermBSD-2-Clausev0.16.1
136procsMITv0.14.11
137rep-grepMIT0.0.8
138repgrepUnlicense OR MIT OR Apache-2.00.16.1
139rip2GPL-3.0+v0.9.6
140ripgrep-allAGPL-3.0-or-laterv0.10.10
141ripgrepUnlicense OR MIT14.1.1
142ripsecretsMITv0.1.11
143rnrMITv0.5.1
144ruplacerBSD-3-Clausev0.10.0
145russAGPL-3.0-or-laterHEAD(aprox)
146rustcatGPL-3.0v3.0.0
147rusticApache-2.0 OR MITv0.11.3
148rustscanGPL-3.0-only2.4.1
149rust-scriptMIT/Apache-2.00.36.0
150sccacheApache-2.0v0.15.0
151sendmeApache-2.0 OR MITv0.33.0
152serieMITv0.8.0
153shellhardenMPL-2.0v4.3.1
154simple-http-serverMITv0.8.0
155skimMITv4.7.0
156sshsMIT4.7.2
157ssh-vaultBSD-3-Clause1.2.10
158starshipISCv1.25.1
159styluaMPL-2.0v2.5.2
160systemctl-tuiMITv0.5.2
161taskwarrior-tuiMITv0.27.0
162tealdeerMIT OR Apache-2.0v1.8.1
163televisionMIT0.15.9
164tenereGPL-3.0-or-laterv0.11.3
165tereEUPL-1.2v1.6.0
166the-wayMITv0.20.3
167tokeiMIT OR Apache-2.0v14.0.0
168tomlqMIT0.2.2
169topgradeGPL-3.0-or-laterv17.6.1
170trunkMIT/Apache-2.0v0.21.14
171ttyperMITv1.6.0
172tucGPL-3.0-or-laterv1.3.0
173tuckrGPL-3.0-or-later0.13.1
174viddyMITv1.3.1
175viuMITv1.6.1
176vividMIT/Apache-2.0v0.11.1
177wasm-packMIT OR Apache-2.0v0.15.0
178xanUnlicense OR MIT0.59.0
179xdg-desktop-portal-cosmicGPL-3.0-or-laterHEAD(aprox)
180xhMITv0.25.3
181xsvUnlicense/MIT0.13.0
182xwinApache-2.0 OR MIT0.7.0
183zenithMIT0.15.0
184zolaEUPL-1.2v0.22.1
185zoxideMITv0.9.9