fix: book canonical, fr/de pin warnings, pin grouping per locale, SEO checks
CI / Lint e auditorias (push) Successful in 48s
CI / Trivy (dependências e segredos) (push) Successful in 12s
CI / Imagem Docker (linux/arm64) (push) Successful in 3m41s
Release / Plano (reaproveitar a imagem?) (push) Successful in 6s
Release / ci (push) Skipped
Release / Publica a imagem (linux/arm64) (push) Successful in 16s
Release / Cria a release no Gitea (push) Successful in 6s

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
Lucas RayanandClaude Sonnet 5.5 committed 2026-11-01 23:58:11 -03:00
1 parent 5a9fe676fc
commit fe1802f818
67 files changed
+11875 -9596

No files matched your search

+2 -2
View File
@@ -23,8 +23,8 @@ export const normalizar = (s = "") =>
* "fraco": nur in bestimmten Betriebsmodi betroffen (z. B. 8-Leitungs-/Octal-SPI).
*/
const nivelMemoria = (palavra) => (p) => {
const citam = p._avs.filter((a) => a.includes(palavra) && !/^fuer chips (mit|ohne)/i.test(a));
if (citam.some((a) => /(belegt|dediziert|verbunden)/i.test(a) && !/ausser/i.test(a))) return "forte";
const citam = p._avs.filter((a) => new RegExp(`\\b${palavra}(?![a-z])`).test(a) && !/^fu(e)?r chips (mit|ohne)/i.test(a));
if (citam.some((a) => /(belegt|dediziert|verbunden|verwendeten)/i.test(a) && !/(ausser|außer)/i.test(a))) return "forte";
if (p._fn.some((f) => /versorgung|stromversorgung/i.test(f) && f.includes(palavra))) return "forte";
if (citam.length) return "fraco";
return null;
+4 -4
View File
@@ -20,9 +20,9 @@ export const normalizar = (s = "") =>
* Avisos genéricos de tensão mínima ("para chips com flash integrada...") não contam.
*/
const nivelMemoria = (palavra) => (p) => {
const citam = p._avs.filter((a) => a.includes(palavra) && !/^para chips (com|sem)/.test(a));
if (citam.some((a) => /(utilizad|dedicad|conectad)/.test(a) && !/a menos que/.test(a))) return "forte";
if (p._fn.some((f) => /alimentacao/.test(f) && f.includes(palavra))) return "forte";
const citam = p._avs.filter((a) => new RegExp(`\\b${palavra}(?![a-z])`).test(a) && !/^for chips (with|without)/.test(a));
if (citam.some((a) => /(used by|used in|dedicated|connected)/.test(a) && !/unless/.test(a))) return "forte";
if (p._fn.some((f) => /(power output|power input|supply)/.test(f) && f.includes(palavra))) return "forte";
if (citam.length) return "fraco";
return null;
};
@@ -43,7 +43,7 @@ export const TOPICOS = [
{ id: "zigbee", nome: "Zigbee/Thread", termos: ["zigbee", "thread", "802.15.4", "ieee 802.15.4"], pinoRotulo: "" },
{ id: "matter", nome: "Matter", termos: ["matter", "casa inteligente", "smart home"], pinoRotulo: "" },
{ id: "ethernet", nome: "Ethernet", termos: ["ethernet", "rmii", "cabo de rede", "lan"], pinoCats: ["Ethernet"], pinoRotulo: "Ethernet pins" },
{ id: "can", nome: "CAN / TWAI", termos: ["can", "twai", "can bus", "canbus", "can fd"], pinoRe: /twai|\bcan\b/, pinoRotulo: "CAN/TWAI pins" },
{ id: "can", nome: "CAN / TWAI", termos: ["can", "twai", "can bus", "canbus", "can fd"], pinoRe: /twai|\bcan\b(?! (be|connect|also|only))/, pinoRotulo: "CAN/TWAI pins" },
{ id: "usb", nome: "USB", termos: ["usb", "otg", "usb serial", "usb otg", "hid", "cdc"], pinoCats: ["USB"], pinoRotulo: "USB pins" },
{ id: "jtag", nome: "JTAG / Debug", termos: ["jtag", "debug", "depuracao", "depurar", "openocd", "gdb"], pinoCats: ["JTAG"], pinoRotulo: "JTAG pins" },
{ id: "adc", nome: "ADC", termos: ["adc", "analogico", "entrada analogica", "conversor analogico", "analogread", "saradc", "analog"], pinoCats: ["ADC"], pinoRotulo: "with ADC" },
+1 -1
View File
@@ -19,7 +19,7 @@ export const normalizar = (s = "") =>
* "fraco": solo se ve afectado en ciertos modos (ej.: SPI de 8 líneas/octal).
*/
const nivelMemoria = (palabra) => (p) => {
const citam = p._avs.filter((a) => a.includes(palabra) && !/^para chips (con|sin|com|sem)/i.test(a));
const citam = p._avs.filter((a) => new RegExp(`\\b${palabra}(?![a-z])`).test(a) && !/^para chips (con|sin|com|sem)/i.test(a));
if (citam.some((a) => /(utilizad|dedicad|conectad)/i.test(a) && !/a menos que/i.test(a))) return "forte";
if (p._fn.some((f) => /alimentacion|alimentacao/i.test(f) && f.includes(palabra))) return "forte";
if (citam.length) return "fraco";
+1 -1
View File
@@ -22,7 +22,7 @@ export const normalizar = (s = "") =>
* "fraco": seulement affectée dans certains modes (ex. : SPI octal 8 lignes).
*/
const nivelMemoria = (palavra) => (p) => {
const citam = p._avs.filter((a) => a.includes(palavra) && !/^pour les puces (avec|sans)/i.test(a));
const citam = p._avs.filter((a) => new RegExp(`\\b${palavra}(?![a-z])`).test(a) && !/^pour les puces (avec|sans)/i.test(a));
if (citam.some((a) => /(utilise|dedie|connecte)/i.test(a) && !/sauf si/i.test(a))) return "forte";
if (p._fn.some((f) => /alimentation/i.test(f) && f.includes(palavra))) return "forte";
if (citam.length) return "fraco";
+3 -3
View File
@@ -20,9 +20,9 @@ export const normalizar = (s = "") =>
* Avisos genéricos de tensão mínima ("para chips com flash integrada...") não contam.
*/
const nivelMemoria = (palavra) => (p) => {
const citam = p._avs.filter((a) => a.includes(palavra) && !/^对于集成/.test(a));
if (citam.some((a) => /(存储使用|专用于|连接到|用于存储)/.test(a) && !/除非/.test(a))) return "forte";
if (p._fn.some((f) => /(供电|alimentacao|vdd)/.test(f) && f.includes(palavra))) return "forte";
const citam = p._avs.filter((a) => a.includes(palavra) && !/^对于(未)?集成/.test(a));
if (citam.some((a) => /(存储使用|专用|连接到|用于存储|所用)/.test(a) && !/除非/.test(a))) return "forte";
if (p._fn.some((f) => /电源/.test(f) && f.includes(palavra))) return "forte";
if (citam.length) return "fraco";
return null;
};