Changelog
Todas as mudanças relevantes deste projeto são documentadas neste arquivo.
Este espelho PT-BR cobre as releases mais recentes e parte do histórico. Para a sequência completa e os links de comparação de todas as versões, consulte o
CHANGELOG.mdcanônico.
O formato segue Keep a Changelog, e este projeto segue Semantic Versioning.
[Unreleased]
1.8.2 (2026-08-13)
Segurança
- Atualizado
event-listenertransitivo de 5.4.1 para 5.4.2, corrigindo RUSTSEC-2026-0221. O CI agora executa auditorias npm e RustSec. - Instaladores one-line passam a falhar fechados sem
SHA256SUMS.txt, entrada exata ou asset de arquitetura não ambíguo. - Bootstrap do Arduino CLI verifica SHA-256 fixo e repete downloads transitórios; checksums/provenance passam a exigir todos os assets desktop e firmware, incluindo
.bin,.elfe.eep. - Releases Windows públicas passam a exigir certificado Authenticode em vez de publicar instaladores sem assinatura silenciosamente.
1.8.1 (2026-08-12)
Corrigido
- O
PKGBUILDdo AUR gerado paraioruba-desktopagora defineoptions=('!lto' '!debug'). Omakepkg.confpadrão do Arch habilita LTO e injeta-flto=autonoCFLAGS, então o cratecccompilava os fontes C e assembly do crateringcomo bitcode GIMPLE em vez de objetos ELF nativos; o link final, feito pelorust-lld, falhava comundefined symbol: ring_core_0_17_14__*e ninguém conseguia instalar a v1.8.0 a partir do fonte. O linker era pista falsa — só remover o-fltoresolve. OPKGBUILDtambém recuperou as entradasprovides/conflicts/replacesque a v1.8.0 perdeu, de modo que não coexiste mais silenciosamente comioruba-desktop-bin.
1.8.0 (2026-08-10)
Adicionado
- O app agora oferece updates in-app assinados. Tauri verifica a assinatura destacada contra uma chave pública embutida antes de baixar, instalar e reiniciar; releases falham fechados se faltar a chave de assinatura ou uma assinatura de plataforma. Um único job pós-matriz monta o
latest.json, evitando que jobs concorrentes sobrescrevam-o com dados incompletos de plataforma. - Workflows de release agora geram manifests verificados de Homebrew cask, Scoop e winget a partir dos assets publicados e de
SHA256SUMS.txt. Os manifests Homebrew e Scoop também são commitados automaticamente no tap/bucket do projeto por deploy keys distintas; winget continua anexado para a revisão externa da Microsoft. Seus checksums nunca são copiados à mão.
Mudanças
- O gráfico de telemetria não depende mais do
recharts. É desenhado por um componente SVG pequeno com a mesma curva monotone, grid, eixos e tooltip. O payload de boot cai de 878,45 kB para 535,15 kB raw (252,14 kB para 154,49 kB gzip, -39%): olazyque deveria manter orechartsfora da inicialização nunca funcionou, porque omanualChunkscolocava o próprio entry do React no mesmo chunk e o Vite fazia preload dele noindex.html. - O backend de áudio do Windows agora roda numa thread dedicada, dona do apartment COM e do handle da saída padrão, em vez de reconstruir toda a pilha COM a cada escrita de volume. O backend do macOS cacheia o device resolvido junto com os elementos que aceitam escrita de volume, em vez de re-sondar a cada escrita. Ambos usam a janela de 250 ms que o Linux já tinha.
Corrigido
- O instalador one-line multiplataforma não faz mais fallback de um pacote arm64 indisponível para um pacote arbitrário de outra arquitetura. Agora nomeia o artefato pedido e lista os assets da release; a seleção de arquitetura é exercitada por testes com fixtures no CI.
- As notificações retidas passam a ter teto de 100. A lista deduplicava por id mas nunca aparava, então nada além da cadência de seis horas da checagem de release a mantinha limitada numa sessão deixada aberta por dias.
- O job de release
Publish to AURagora repete cada chamada de rede ao AUR com backoff em vez de derrubar o job no primeiro erro. O AUR entra em manutenção sem aviso, e foi isso que deixouioruba-desktop/ioruba-desktop-binsem atualizar no release da v1.7.1.
1.7.1 (2026-08-10)
Mudanças
lucide-reactatualizado para 1.31.0,vitepara 8.2.1 e@types/nodepara 26.2.0.- Grupo de GitHub Actions atualizado:
Swatinem/rust-cachepara 2.9.2,github/codeql-action/{init,analyze}para 4.37.6 eactions/attest-build-provenancepara 4.2.2.
Corrigido
- O link de comparação
[Unreleased]no fim deste arquivo apontava parav1.5.2, três releases atrás da baseline real.
1.7.0 (2026-08-03)
Adicionado
-
Bindings de controle (botoes, encoders) agora aceitam um
targetopcional (AudioTarget) que direciona uma acao demutea um sink, source ou aplicacao especifica em vez da saida padrao. Sem target, mantem o comportamento anterior (toggle da saida padrao). Linux usa as mesmas regras de correspondencia de nome dos targets de volume do knob (aliasesdefault_output/default_microphone, substring case-insensitive); Windows aceitamasterou sem target e rejeita targets especificos comsupported: false. -
Editor visual de bindings de controle em Configuracoes › Editor de perfil › Botoes e encoders: adiciona e remove botoes e encoders, alterna entre os dois tipos de entrada e escolhe o alvo do mute a partir do inventario de audio da sessao, sem passar pelo JSON avancado.
Mudanças
targetagora so e aceito comaction: "mute".next/prevatuam sobre o player MPRIS, entao um alvo ali nunca teria efeito: o editor de perfis reporta erro de validacao e a validacao do estado persistido descarta o binding.- O diálogo de changelog no app não lista mais a seção
Unreleased: ela descreve trabalho que não está no binário em execução.
1.6.3 (2026-07-29)
Mudanças
- Atualizado
reactereact-dompara 19.2.8. - Atualizadas dependências de frontend:
lucide-reactpara 1.27.0,rechartspara 3.10.1,@radix-ui/react-switchpara 1.3.7,@radix-ui/react-tabspara 1.1.21, e@vitejs/plugin-reactpara 6.0.4. - Atualizado o ferramental de testes atravessando versões maiores:
jsdompara 30.0.1 ejest-axepara 11.0.0 (axe-core4.12.1). - Atualizado
@types/nodepara 26.1.2. - Atualizadas as GitHub Actions fixadas:
actions/checkoutpara v7.0.1,github/codeql-action(initeanalyze) para v4.37.3, etrufflesecurity/trufflehogpara v3.96.0.
Documentação
- Registrado que
npm run rust:auditsó é alcançável vianpm run release:checke não está ligado a nenhum workflow do GitHub, e que a duplicação doaxe-corerestrita a dependências de desenvolvimento é mantida de propósito.
1.6.2 (2026-07-20)
Mudancas
- Atualizado
tauri-plugin-serialplugin(Rust e JS/TS) para 3.0.1,tauri-plugin-dialogpara 2.7.2, etauri-plugin-single-instancepara 2.4.3. - Atualizado
serdepara 1.0.229,serde_jsonpara 1.0.151, ethiserrorpara 2.0.19. - Atualizadas dependencias do frontend:
vitepara 8.1.5,@tailwindcss/vitepara 4.3.3,lucide-reactpara 1.25.0,@radix-ui/react-switchpara 1.3.4,@radix-ui/react-tabspara 1.1.18, e os pacotes de fonte@fontsource/instrument-sans/@fontsource/space-groteskpara 5.3.0. - Atualizadas GitHub Actions fixadas:
actions/setup-nodepara v7.0.0,github/codeql-actionpara v4.37.1, esoftprops/action-gh-releasepara v3.0.2.
1.6.1 (2026-07-15)
Mudancas
- Migrado para o
tauri-plugin-serialpluginv3 (API Rust e JS/TS). Auto-reconexao e o stream de leitura serial agora sao gerenciados nativamente pelo plugin (watch()/WatchHandle.unwatch()substitui o antigo triolisten()/startListening()/cancelListen()), em vez de serem coordenados manualmente emuse-serial-runtime.ts. - Atualizado TypeScript para 7.0.2.
Corrigido
- Contornado um bug de empacotamento no
tauri-plugin-serialplugin-api@3.0.0, cuja condicao de export"development"apontava para um arquivo-fonte que o pacote npm nunca publica, quebrando a resolucao de modulos em dev local e nos testes.
1.6.0 (2026-07-10)
Funcionalidades
- Adicionado pill flutuante de status do runtime, que informa a versao exata do binario em execucao, estado do dispositivo, porta serial ativa, backend de audio e ultimo frame serial, sem colidir com o toast de atualizacao instalada.
- Adicionadas acoes compactas no header para changelog embutido, notificacoes e configuracoes do app. O shell reutilizavel de dialog nativo oferece focus trap modal, fechamento por Escape/backdrop e restauracao de foco.
- Adicionadas notificacoes opt-in de releases do GitHub com checagem a cada seis horas, comparacao de versao semantica, estado de nao lida, deduplicacao, preferencias persistidas e acesso direto as paginas da release e do repositorio.
- Adicionado dialog centralizado de configuracoes do app para idioma e tema do perfil ativo, notificacoes de release, inicializacao com o sistema, versao em execucao e acesso ao changelog. Todo o novo chrome da interface foi traduzido para ingles e espanhol.
Mudancas
- Simplificada a sidebar desktop para marca compacta, saude da conexao e navegacao com icone e label. Telemetria de porta, backend e serial agora vive no pill de status, e o ribbon superior mantem apenas o contexto de sessao e perfil ativo.
Seguranca
- Links externos agora usam
tauri-plugin-openercom escopo de capability restrito ahttps://github.com/bernardopg/ioruba*; a CSP adiciona somentehttps://api.github.compara as checagens de release.
1.5.3 (2026-07-09)
Corrigido
- Corrigido segfault do WebKitWebProcess ao esconder a janela para o tray depois que o binario do Ioruba foi trocado em disco (ex.: upgrade de pacote do sistema) enquanto o processo antigo ainda estava rodando. O app agora tira um snapshot do proprio executavel no boot e, quando o binario foi trocado, fechar a janela ou reabri-la pelo tray dispara um restart limpo em vez de esconder/reconstruir o webview contra os assets trocados. O frontend mostra um toast dispensavel de “Atualizacao instalada” (traduzido para en/es) com acao “Reiniciar agora”.
1.5.2 (2026-07-09)
Corrigido
- Perfis persistidos salvos antes do bump de baud rate do firmware (0.4.x -> 0.5.x, 9600 -> 115200) agora se autocorrigem para 115200 ao carregar, em vez de ficar preso em loop permanente de retry de handshake.
- Firmware (0.6.1): builds ESP8266/ESP32 agora desligam o radio WiFi no
setup()(este sketch e serial-only e nunca usa WiFi). O radio ligado por padrao injetava ruido mensuravel no ADC, notavel principalmente como jitter ao tocar no cursor do potenciometro.
1.5.1 (2026-07-09)
Seguranca
- Adicionado um workflow dedicado de varredura de segredos com jobs fixados de Gitleaks e TruffleHog em pushes, pull requests, agendamento semanal e disparo manual.
- Adicionados scripts locais de varredura de segredos e um gate
release:check, para a validacao de release cobrir Gitleaks, TruffleHog, audit Rust, matriz de firmware, lint de scripts, testes, build e geracao da documentacao. - Atualizadas dependencias Rust transitivas
plistpara 1.10.0,quick-xmlpara 0.41.0 eanyhowpara 1.0.103, limpando as vulnerabilidades acionaveis docargo audite mantendo apenas os avisos informativos conhecidos da stack GTK3/Tauri.
Mudancas
- Removidos metadados
.serenarastreados e ampliadas as regras de ignore para manter estado local de agentes/ferramentas fora dos releases.
1.5.0 (2026-07-09)
Funcionalidades
- Suporte de firmware para ESP8266 (NodeMCU e placas compativeis): deteccao de placa, ramos
ANALOG_PINS/MCU_NAME, e o override existenteIORUBA_NUM_KNOBSem compile-time cobre seu unico pino analogico exposto (A0). Validado numa NodeMCU V3 fisica (CH340) — vejadocs/guides/hardware-setup.mdpara a flag de build-property necessaria e o job de CI. - Comando serial
RAW ON/RAW OFF: um modo opt-in em que o frame periodico carrega leituras de ADC nao filtradas e com oversampling (prefixoRAW) em vez do frame calibradon|n|n, para um futuro wizard de calibracao com captura ao vivo. Desabilitado por padrao para nao mudar o formato do frame em hosts existentes. - Oversampling do ADC: cada leitura de knob agora tira a media de 4 amostras consecutivas de
analogRead(), reduzindo o ruido de amostra unica em todas as placas. - Encoders agora usam interrupcao por mudanca de pino nas placas que suportam
attachInterruptnos dois pinos de quadratura (ESP32/ESP8266/RP2040), em vez de serem lidos so uma vez por iteracao do loop — umSerial.printbloqueante (handshake, modo RAW) nao pode mais causar perda de passo de quadratura. Placas AVR (Nano/Uno/Mega/Leonardo/Micro), cujos pinos fixos de encoder nao suportam interrupcao, mantem o comportamento de polling anterior inalterado.
Correcoes
- A conexao serial nao fica mais “surda” apos um ciclo desconectar/conectar nem apos aplicar a calibracao de um knob. O
close()do plugin serial apenas pausa o gerenciador de auto-reconexao mantendo-o habilitado; o evento de desconexao emitido pelo proprio close re-armava o loop e uma porta “zumbi” reabria em segundo plano segundos depois, roubando a thread de leitura da conexao seguinte (status mostrava conectado sem nenhum frame chegar, e os knobs paravam de controlar o audio ate reiniciar o app). O runtime agora desabilita explicitamente a auto-reconexao antes de fechar, toma a referencia da porta de forma atomica para teardowns concorrentes nao fecharem duas vezes e serializa as operacoes de abrir/fechar numa fila — eliminando as corridasSerial port open/close already in progressvisiveis no watch log. - Configuracoes de calibracao enviadas pelo comando serial
CONFIGnao sao mais perdidas silenciosamente no proximo reset/ciclo de energia em placas ESP32/RP2040/ESP8266. A EEPROM emulada em flash dessas placas exige umEEPROM.begin(size)explicito antes do uso eEEPROM.commit()apos oput()para persistir de fato — os dois estavam faltando, entao a escrita so alcancava a RAM. Validado numa ESP8266 NodeMCU fisica (config sobrevive a um reset). Placas AVR nao eram afetadas (EEPROM real, enderecavel por byte).
Mudancas
- Abrir o app com uma instancia ja em execucao (clique no launcher, entrada
.desktop, autostart duplicado) agora traz a janela existente de volta do tray em vez de criar um segundo processo (tauri-plugin-single-instance). - O icone do tray agora tem tooltip “Ioruba”.
- Os pacotes AUR instalam a entrada desktop como
io.ioruba.desktop.desktopcomStartupWMClass=io.ioruba.desktop, casando com oapp_idWayland/WM_CLASSX11 definido porenableGTKAppId— corrigindo a associacao janela-icone no Hyprland, taskbars do waybar e docks (antesioruba.desktopcomStartupWMClass=Iorubanunca casava). - Baud rate padrao do firmware serial elevado de 9600 para 115200 (constante do firmware e o default
profile.serial.baudRatedo host). O campo continua livremente configuravel por perfil para placas/cabos que precisem de uma taxa menor.
1.4.0 (2026-07-08)
Funcionalidades
- A interface agora esta disponivel em espanhol (
es), alem de portugues (Brasil) e ingles. A camada de traducao foi reestruturada em mapas por idioma (TEXT_MAP_EN/TEXT_MAP_ESregistrados emLANGUAGE_TEXT_MAPS), a uniaoUiLanguagee sua validacao foram estendidas de ponta a ponta (a normalizacao do shared e o editor JSON de perfil caem parapt-BRem valores desconhecidos) e o seletor de idioma do editor de perfis oferece a nova opcao. O guia de traducao documenta como adicionar mais idiomas. - Auditoria de acessibilidade do dashboard (Scrum 18): a navegacao lateral agora implementa o padrao completo de teclado de tabs do WAI-ARIA — setas movem a selecao com foco itinerante, Home/End pulam para as extremidades; antes os tabs inativos carregavam
tabindex="-1"sem handler de tecla, ficando inalcancaveis por teclado. O wizard de calibracao gerencia o foco em todo o ciclo (o foco entra no painel da sessao ao iniciar e volta ao botao do knob de origem ao encerrar), anuncia mudancas de passo por live region educada e expoe a validacao de faixa curta como alerta assertivo.
Alterado
- Polimento para tecnologias assistivas em todos os paineis: os botoes de filtro do watch log expoem
aria-pressed, as tabelas de hardware e de estatisticas de sessao marcam os cabecalhos comscope="col", o grafico de telemetria e exposto como imagem nomeada (role="img") em vez de vazar o SVG cru para leitores de tela e o textarea do editor JSON avancado ganhou nome acessivel. A cobertura automatizada com axe agora abrange todos os paineis do dashboard (HardwarePanel, CalibrationWizard, SessionStatsPanel, WatchLogPanel, OverviewSignalPanel e as tres views do ProfileWorkbench).
Corrigido
- Um typo na classe do resumo de resultado do painel de knob (
wrap-break-wordword) que impedia a quebra de textos longos.
1.3.2 (2026-07-08)
Funcionalidades
- Novo wizard de calibracao de knobs na secao Hardware: fluxo guiado min -> max -> revisao por knob que rastreia o extremo observado nas leituras seriais ao vivo (mais robusto que captura instantanea), valida a faixa capturada e grava
minRaw/maxRawno perfil ativo. O runtime serial ja envia o comandoCONFIGsempre que o perfil diverge do firmware, entao aplicar o resultado do wizard sincroniza o hardware sem passo extra.
Corrigido
- Os writes de volume agora usam throttle (leading + trailing) em vez de debounce enquanto o knob se move. O debounce puro anterior reiniciava o timer a cada frame serial, entao com transicoes suaves habilitadas o backend de audio so era invocado quando o knob parava; movimento rapido agora aplica o primeiro lote imediatamente e coalesce a rajada em no maximo uma chamada de backend por janela de transicao do perfil (minimo 40 ms), sempre com o valor mais recente por slider.
- O workflow de release nao desperdica mais tempo de runner com tags inexistentes. Dispatches manuais (
workflow_dispatch) aceitavam qualquer inputrelease_tag— um typo comov1.4.0para uma tag nunca criada fazia todos os jobs de bundle (Linux, Windows, macOS ×2, firmware, Arch) falharem no passo decheckoutem paralelo, queimando ate ~10 minutos de runner por plataforma. Um novo jobvalidate-tagroda primeiro: rejeita tags malformadas ou inexistentes em segundos e corta o pipeline inteiro antes de qualquer build. - Os jobs de publicacao e atestacao da release nao rodam mais quando builds anteriores falham. Os jobs
arch-pkgbuild,attest-and-checksumeaur-publisheram gateados em!= 'cancelled', que avalia como verdadeiro em falha — um bundle quebrado ainda podia produzir metadados de PKGBUILD, gerar atestacoes de proveniencia para uma release incompleta ou publicar no AUR. Agora exigem== 'success', entao uma release parcial nunca chega a distribuicao.
Alterado
- Os helpers duplicados dos backends de audio (
describe_target,summarize_slider_outcome,volume_percent) e todo o loop de apply master-only compartilhado pelos backends Windows e macOS foram extraidos paraaudio/common.rs. Os backends de plataforma agora fornecem apenas uma closureset_master_volume, as strings de outcome sao parametrizadas pelo nome da plataforma e a logica compartilhada de batch/resumo ganhou testes unitarios independentes de host que rodam em toda plataforma do CI (anteswindows.rs/macos.rsnao tinham teste nenhum). Sem mudanca de comportamento. - O pipeline de release agora valida a tag antes de disparar o gate completo do CI (
typecheck, testes shared/desktop, matriz de firmware, smoke de audio nativo em Windows/macOS), entao uma tag ruim falha rapido em vez de consumir todo o orcamento de CI multiplataforma.
1.3.1 (2026-06-25)
Corrigido
- Os cartoes de metrica do painel Home agora se ajustam de forma responsiva e nao comprimem mais os icones quando o texto do valor e longo. O estilo das metricas saiu de utilitarios Tailwind inline para classes CSS dedicadas (
.metric-card/.metric-body/.metric-icon/.metric-copy), a grade de metricas usa colunasauto-fite os cantos do painel de hardware foram alinhados emrounded-2xl.
Alterado
- Builds de CI e release agora fixam o runner macOS em
macos-15em vez do label flutuantemacos-latest, que migra para o macOS 26 a partir de 2026-06-15 (actions/runner-images#14167). Os builds de release ficam reproduziveis, e as condicoes de bundle/assinatura/notarizacao foram desacopladas do label exato (startsWith(matrix.platform, 'macos')) para que a versao fixada possa ser atualizada sem mexer em cada gate.
1.3.0 (2026-06-22)
Corrigido
- Os logs de frame serial no watch log agora sao limitados a no maximo um por segundo. O firmware emite frames continuamente e o buffer serial acumulado e drenado em rajada ao conectar, o que antes inundava o watch log com centenas de entradas identicas
Frame serial recebido/Slideres elegiveis para aplicacaoem poucos milissegundos. A aplicacao de audio nao e afetada — so o logging e amostrado. - O handshake do firmware agora e re-solicitado (ate 5 vezes, a cada 2 s) enquanto nenhum handshake for recebido. O
HELLO?inicial podia se perder no auto-reset por DTR / ruido de boot do bootloader, deixando o app preso em “Aguardando handshake” mesmo com frames chegando normalmente.
Alterado
- O workflow de release agora exige o workflow de CI completo (reusado via
workflow_call) como pre-requisito de todo job de build e publicacao, incluindo onative-audio-smokeWindows/macOS. Isso impede que uma tag vire release com um build de plataforma quebrado — a causa do hotfix v1.2.2 -> v1.2.3, onde o erro de compilacao Windows so foi detectado pelo CI depois da tag - O corpo do GitHub Release agora e a secao correspondente do
CHANGELOG.md, extraida de forma deterministica e publicada literalmente (com rodape de verificacao de download) - Removido o teste host duplicado do parser de firmware do pipeline de release; o job
firmware-hostdo CI ja o roda viaci-gate, entao o job de release so constroi e publica o artefato
Removido
- Removida a geracao automatica de changelog por IA do pipeline de release (job
prepare-release-notes: GitHub Copilot CLI com fallback Codex que commitava e dava push de umCHANGELOG.mdgerado de volta namainno meio do release). As notas de release agora sao escritas e revisadas a mao noCHANGELOG.md— sem conteudo gerado por maquina, sem escrita namaindurante o release e semCOPILOT_PAT/OPENAI_API_KEYno caminho de release - Removido o prototipo Python/GTK arquivado em
legacy/e o material de planejamento emdocs/migration/, junto de toda referencia ao diretorio legacy nos docs da raiz, no espelho PT-BR e no docs-site. A compatibilidade com o formato de pacote legacyP1:512(uma feature viva do protocolo) nao e afetada.
Adicionado
- A latencia de aplicacao knob->audio agora e instrumentada: cada lote aplicado e cronometrado e um
warningvai ao watch log quando passa do orcamento (80 ms), com o tempo decorrido e a contagem de alvos — expondo chamadas lentas depactl/backend sem inundar o log (Scrum 13) - Exportacao das estatisticas de telemetria da sessao para arquivo em JSON ou CSV (Scrum 16): botoes no painel de estatisticas salvam um resumo por knob (amostras, min/media/max/ultima %) via dialog, reusando o fluxo de export existente. Formatters puros
sessionStatsToJson/sessionStatsToCsvno@ioruba/sharede comando Tauriexport_session_stats - Indicador de saude da conexao sempre visivel no sidebar (Scrum 18): dot colorido + label e leitura de frescura do sinal (tempo desde o ultimo frame, atualizada a cada segundo) como proxy de latencia, alinhado ao
.impeccable.md - Configuracoes divididas em tres entradas de sidebar — Perfis, Editor e Avancado — cada uma em tela cheia
- Navegacao redesenhada: sidebar organizado em grupos rotulados (Operacao / Monitoramento / Ajustes) com secoes mais granulares; Canais (knobs ao vivo) separado do painel de controle e nova secao Hardware
- Novo
HardwarePanelmostra o handshake do firmware ponta a ponta (placa, MCU, resolucao do ADC, protocolo, knobs e calibracao por knob) - Os toolchains de ESP32 e RP2040/Pico agora sao compilados no CI (Scrum 11): um job dedicado
firmware-archinstala cada core de 12-bit e compila o firmware, validando o caminhoadcBits=12ponta a ponta em toolchains reais - Tabelas de pinos analogicos por placa (Scrum 11): o firmware nao fixa mais
{A0, A1, A2}. Os pinos sao escolhidos em compile-time por placa (Nano A0..A7, Uno A0..A5, Mega2560 A0..A15, Leonardo/Micro A0..A11, ESP32 ADC1, RP2040/Pico A0..A2) e os primeirosIORUBA_NUM_KNOBSsao usados. Habilita >6 knobs no Mega (ate 16); umstatic_assertrejeita uma contagem de knobs acima dos canais analogicos da placa - O CI compila o firmware numa matriz de FQBN (Nano, Uno, Mega2560, Leonardo, Micro); um job de host dedicado roda os testes do parser CONFIG nas configuracoes padrao (3 knobs / 10-bit) e ampla (8 knobs / 12-bit).
npm run firmware:compile:matrixenpm run firmware:test:widereproduzem isso localmente - Matriz de placas suportadas (MCU, bits do ADC, canais, max knobs, ordem de pinos) documentada em
docs/guides/hardware-setup.md - Resolucao de ADC generica entre placas (pilar do Scrum 11). O handshake do firmware reporta
mcu=eadcBits=(campos aditivos do protocolo v2; hosts antigos ignoram) e o@ioruba/sharednormaliza as leituras brutas peloadcBitsativo em vez do1023fixo de 10-bit. Placas de 12-bit (ESP32, RP2040/Pico ->0..4095) agora mapeiam para a porcentagem correta - O firmware deriva
ADC_MAXdeIORUBA_ADC_BITS(auto 12 em ESP32/RP2040, 10 em AVR; sobrescrevivel por define) e reporta o nome do MCU detectado - O painel de visao geral do desktop mostra um bloco de Hardware com placa, MCU, profundidade de bits do ADC e versao do protocolo
Corrigido
- A constante
BOARD_NAMEdo firmware foi renomeada paraIORUBA_BOARD_NAMEpara evitar colisao com a macroBOARD_NAMEdefinida pelo core arduino-pico (RP2040), que quebrava os builds de RP2040
Alterado
- Funcoes de mixer/runtime do
@ioruba/sharedrecebem um argumentoadcMaxopcional (10-bit por padrao, compativel com o anterior); o parser de frame serial aceita valores brutos ate 16-bit, deixando a normalizacao por placa para o runtime viaadcBits
0.6.1 (2026-04-20)
Alterado
- separacao do fluxo de release do desktop para que o upload do AppImage rode em um job proprio, isolado dos demais instaladores
- adicao de uma protecao de timeout aos jobs de bundle do desktop para evitar travamentos indefinidos na publicacao do release
Correcao de bugs
- impedir que o passo de publicacao do AppImage bloqueie os assets de release de deb/rpm/Windows/macOS
0.6.0 (2026-04-20)
Alterado
- modernizacao do site de docs, da navegacao e do fluxo de geracao de paginas para o GitHub Pages
- atualizacao do conjunto de documentacao em portugues para alinhar com a migracao para GitHub e as mudancas do README
- cobertura do Dependabot estendida para a superficie de docs e workflows
- atualizacao das dependencias de TypeScript, Vitest e GitHub Actions apos a resolucao do Dependabot
Recursos
- adicao de tradutores PT-BR em toda a documentacao raiz, guias, notas de migracao e materiais de suporte
- adicao de um script de compatibilidade do AppImage e atualizacao do launcher desktop e do fluxo de release
Correcao de bugs
- liberacao do workflow de smoke do repositorio para incluir o diretorio scripts
- estabilizacao do uso de GitHub Actions nos workflows de CI, CodeQL e Pages
0.4.0 (2026-04-19)
Alterado
- atualizacao da documentacao do repositorio para refletir a stack desktop Tauri ativa, suporte Linux-first de audio e fluxo atual de hardware
- adicao do diagrama de circuito Arduino Nano Type-C e atualizacao dos docs de Nano, hardware, testes e release para o novo handshake de firmware e fluxo de smoke test Arch
Recursos
- persistencia de calibracao de knobs e tuning de firmware em EEPROM
- adicao de comportamento de tray/background e suporte de iniciar com o login no Linux
- exposicao de thresholds, deadzone, smoothing e calibracao por knob no profile workbench desktop
- expansao do handshake serial para reportar configuracao do controlador com protocolo v2
Correcao de bugs
- fixacao dos workflows de release e CI nas versoes atuais de GitHub Actions
- preservacao de pacotes legados P1:512 enquanto adiciona suporte de configuracao do controlador no parser serial
- alinhamento dos metadados de packaging desktop Linux com requisitos de tray e indicator
Seguranca
- atualizacao do vite de 7.3.1 para 7.3.2 na toolchain desktop
- resolucao dos advisories GHSA-p9ff-h696-f583, GHSA-v2wj-q39q-566r e GHSA-4w7w-66w2-5vf9 no GitHub/Dependabot
- confirmacao de 0 vulnerabilidades abertas no npm audit apos o upgrade
- documentacao de que os findings restantes no Rust audit sao avisos upstream/transitivos da stack Linux atual Tauri + GTK3, sem nova vulnerabilidade introduzida no projeto
0.3.0 (2026-03-20)
Recursos
- atualizacao da UI desktop de control deck e do fluxo live watch
- persistencia de logs de watch e melhoria dos diagnosticos de runtime serial
Correcao de bugs
- estabilizacao das sessoes seriais Arduino durante periodos ociosos e descoberta de porta
- backport do fix Linux glib para GHSA-wrw7-89jp-8q8g
0.2.3 (2026-03-19)
Correcao de bugs
- preservacao de permissoes dos artefatos de release em docker (2815390)
0.2.2 (2026-03-19)
Correcao de bugs
- envio de artefatos de release instalaveis (d474351)
0.2.1 (2026-03-19)
Correcao de bugs
- passagem de nome da tag ao enviar assets de release manual (08b7291)
- suporte a execucoes encadeadas e manuais de artefatos de release (42e42f8)
0.2.0 (2026-03-19)
Recursos
- adicao de suporte a Arduino Nano com 3 potenciometros (d04715b)
- implementacao de comunicacao serial com Arduino (2739438)
- melhoria dos docs de runtime e superficie de release (66138ba)
- atualizacao do app controlador Nano e docs (89d854d)
- entrega de runtime Haskell e modernizacao da superficie do repositorio (dd34cae)
Correcao de bugs
- foco da CI em checks acionaveis (cdab0aa)
- manutencao de versionamento do release-please em package yaml (ae44855)
- CI mais rapida e com HLint passando (bcae458)
- metadata sync ignorando corretamente quando token nao existe (d59f445)
- release-please atualizando arquivos de versao genericos (d7c871d)
- estabilizacao de automacao e conformidade com hlint (0c7c114)
0.1.0 - 2025-12-22
Adicionado
- baseline inicial com tag antes da fase atual de productizacao Haskell-first