1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
30 KiB
Release Checklist (Português (Portugal))
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Última atualização: 2026-08-28 — v3.8.51 Fluxo de lançamento simplificado que utiliza as skills do Claude Code para automatização.
Mantenha a fila/branch verde entre lançamentos: consulte RELEASE_GREEN.md (família
/green-prs+npm run check:release-green+/babysit+ execução noturna). Executar isto periodicamente — e especialmente antes desta lista de verificação — faz com que o PR de lançamento comece verde.
Resumo
# 1. Incrementar a versão + gerar o CHANGELOG (skill)
/version-bump-cc patch # ou minor/major
# 2. Executar localmente a validação de qualidade
npm run check # lint + testes
npm run test:coverage # validação de cobertura completa (60/60/60/60)
# 3. Compilar e executar o teste de fumo
npm run build
npm run test:e2e # opcional, mas recomendado
# 4. Gerar o lançamento (skill)
/generate-release-cc
# 5. Implementar (skill)
/deploy-vps-both-cc # ou akamai-cc / local-cc
# 6. Capturar evidências do lançamento (skill)
/capture-release-evidences-cc
Publicação fidedigna no npm (predefinição desde a v3.8.51) — faseada mediante pedido, direta como alternativa
O npm-publish.yml publica através do npm Trusted Publishing (OIDC) por predefinição: o
job stage-npm (alojado no GitHub) troca o id-token do GitHub por uma credencial npm
de curta duração para essa execução — sem token npm de longa duração nos segredos do repositório, sem pedido de 2FA e com proveniência anexada.
Esta é a alternativa que o npm agora permite, dado que os tokens que ignoram a 2FA estão a ser descontinuados;
restaura o fluxo totalmente automático que o projeto tinha até à v3.8.48, mantendo simultaneamente a
garantia WS1.3 (um token exposto não pode publicar por si só — não existe qualquer token).
Configuração única (proprietário): npmjs.com → pacote omniroute → Settings → Trusted
Publisher → GitHub: proprietário diegosouzapw, repositório OmniRoute, workflow npm-publish.yml
(ambiente: nenhum). Até isto existir, o passo automático falha com ENEEDAUTH:
volte a acionar com publish_mode=staged (abaixo) ou direct.
Publicação faseada (mediante pedido — publish_mode=staged)
O workflow npm-publish já não publica diretamente: inicia o tarball empacotado
(check:pack-boot) e, em seguida, executa npm stage publish — os bytes exatos ficam armazenados no
registo, não sendo instaláveis até que o proprietário os aprove. A validação humana por 2FA passou
para DEPOIS da prova, não antes.
Fluxo do proprietário depois de o workflow ficar verde:
npm stage list omniroute— localize o id da fase (também apresentado no resumo do workflow).- Verifique os bytes faseados (recomendado):
npm stage download <id>e, em seguida, instale o tarball transferido num prefixo temporário e inicie-o (npm run check:pack-bootautomatiza o mesmo veredito empacotar→instalar→iniciar na CI). npm stage approve <id>— o pedido de 2FA É a publicação.npm stage reject <id>descarta-a.- Rede de segurança pós-publicação: o verificador pós-publicação (WS1.4 do plano da v3.8.49) instala a versão publicada a partir do registo público num contentor limpo e inicia-a.
Alternativa de emergência: workflow_dispatch com publish_mode=direct restaura o
npm publish imediato antigo (utilize apenas se o próprio faseamento não funcionar corretamente; registe o motivo).
Reforço único (proprietário, npmjs.com): configure o Trusted Publisher para
omniroute no modo exclusivo de faseamento, para que um token de longa duração exposto não possa executar npm publish
diretamente a partir de qualquer lugar — a CI apenas pode fasear; só a 2FA do proprietário efetua o lançamento.
Procedimento para artefactos danificados (inalterado): npm deprecate omniroute@<bad> "<reason> — use <fixed>"
como reação predefinida (demora minutos e é reversível); utilize npm unpublish apenas dentro do período de 72 horas/sem dependentes
e nunca como primeira medida. Docker: nunca reescreva uma tag de versão — a reversão consiste em
redirecionar latest para o último digest válido.
latest no Docker Hub (obrigatório em cada publicação SemVer estável): o
workflow docker-publish tem de atribuir a tag tanto a X.Y.Z como, quando
should-promote-latest.sh confirmar que esta é a versão SemVer estável mais elevada, a :latest,
com o mesmo digest. Após o job: o digest latest do Hub é igual ao novo
digest SemVer e o last_updated foi atualizado. Não deixe :latest apontado para uma
build mais antiga enquanto as notas de lançamento mencionam correções que só existem no git. Os inícios rápidos
do Compose utilizam :latest; o GitOps deve continuar a fixar X.Y.Z. Consulte
Canais de lançamento do Docker e #10317.
Via Rápida de Hotfix (etiqueta hotfix)
Um PR com a etiqueta hotfix ignora a pesada matriz de CI (E2E com 9 shards, incremento de cobertura,
quality-gate, quality-extended) e mantém as verificações rápidas e de elevado valor: build,
shards unitários, integração, vitest, lint/typecheck, docs-sync, check:pack-artifact
e o teste de fumo de arranque do tarball (check:pack-boot). Objetivo: ficar verde em ≤15min em vez de ~33min.
Política de entrada — todos os quatro requisitos são obrigatórios (inspirada nas vias de emergência do Chromium/VS Code/Node):
- Gravidade: a produção está avariada — um artefacto publicado falha no arranque / uma correção de segurança / todos os utilizadores da versão são afetados. «Importante» não significa «avariado».
- Autoridade: apenas o proprietário do repositório aplica a etiqueta
hotfix. A etiqueta É a aprovação — nunca deve ser aplicada autonomamente num PR de campanha. - Provas: o corpo do PR inclui uma ligação para a execução pesada anterior totalmente verde (a suite que as tarefas ignoradas voltariam a validar), bem como o teste da própria correção, primeiro a falhar e depois a passar.
- Âmbito: apenas cherry-pick — a correção mínima, sem refatorações nem alterações adicionais.
A superfície de cobertura/incremento ignorada é novamente validada pela execução completa seguinte no
ramo de lançamento (lançamento continuamente verde) — esta via ignora a ESPERA, nunca a validação.
As diferenças apenas em testes (todos os ficheiros em tests/, nenhum em tests/e2e/) ignoram automaticamente
a matriz E2E, sem qualquer etiqueta.
Lista de Verificação Detalhada
Pré-lançamento
- Todos os PRs destinados a esta versão estão integrados em
release/vX.Y.0 - Todos os itens abertos no Linear/issues para esta versão estão fechados ou foram movidos para o marco seguinte
- CI verde no ramo
release/vX.Y.0 - Sem marcadores
TODO(release)no código:grep -r "TODO(release)" src/ open-sse/ - Imagem base do Docker atualizada (atualmente
node:24.15.0-trixie-slim)
Versão e Registo de Alterações
- Executar
/version-bump-cc <patch|minor|major>(skill do Claude Code)- Atualiza as versões em
package.json,electron/package.json - Volta a gerar
CHANGELOG.mda partir dos commits do git desde a última tag - Atualiza os badges do README.md
- Atualiza as versões em
- Rever manualmente o CHANGELOG.md e corrigir as mensagens de commit, se necessário
- Garantir que a secção semver mais recente em
CHANGELOG.mdcorresponde à versão depackage.json - Manter
## [Unreleased]como a primeira secção do registo de alterações para trabalho futuro - Atualizar
docs/openapi.yaml→info.versiondeve corresponder à versão depackage.json
Qualidade do Código
npm run lint— 0 erros (os avisos já existiam)npm run typecheck:core— sem problemasnpm run typecheck:noimplicit:core— sem problemas (estrito)npm run check:cycles— sem dependências circularesnpm run check:any-budget:t11— dentro do limitenpm run check:route-validation:t06— sem problemasnpm run check:node-runtime— requisito mínimo de runtime suportado cumprido (>=22.22.2 <23,>=24.0.0 <27, de acordo comSUPPORTED_NODE_RANGEemsrc/shared/utils/nodeRuntimeSupport.ts; alinhado comenginesdepackage.json)
Testes
npm run test:unit— passanpm run test:vitest— passa (servidor MCP, autoCombo, cache)npm run test:coverage— limiar 60/60/60/60 cumprido (instruções/linhas/funções/ramos)npm run test:integration— passa (se as alterações afetarem a BD / handlers)npm run test:combo:matrix— passa (matriz de estratégias combo: comprova de forma determinística as decisões de seleção das 19 estratégias públicas de encaminhamento; executar ao alterar o encaminhamento combo, a resolução de estratégias ou a lógica de fallback)RUN_COMBO_LIVE=1 npm run test:combo:live— opcional/manual (teste de fumo condicionado com upstream real; obtém um snapshot só de leitura da BD a partir do VPSroot@192.168.0.15; contacta fornecedores reais, consome créditos; nunca é executado em CI; é ignorado de forma limpa sem a condição)npm run test:combo:live:vps— opcional/manual (teste de fumo em produção no VPS da Fase 3: 7 cenários HTTP contra o servidor.15em produção através de Node ESM simples; requerssh root@192.168.0.15; cria/elimina apenas combos__live_test__*; contacta fornecedores reais; nunca é executado em CI)npm run test:e2e— passa (alterações na IU)npm run test:protocols:e2e— passa (alterações MCP/A2A)npm run test:ecosystem— passa
Hooks (validados pelo Husky)
Os hooks do Husky encontram-se em .husky/ e são executados automaticamente durante operações do git.
- pre-commit:
npx lint-staged + node scripts/check/check-docs-sync.mjs + npm run check:any-budget:t11 - pre-push: verificações rápidas e determinísticas —
npm run check:any-budget:t11 && npm run check:tracked-artifacts(ativadas em 2026-06-13). Exclui intencionalmentetest:unit(lento; abrangido pela tarefa de CItest-unit).- Executar
npm run test:unitmanualmente antes de fazer push de ramos de lançamento.
- Executar
Se um hook falhar: corrija o problema subjacente, não o contorne com --no-verify.
Commits Convencionais
Todos os commits destinados ao lançamento devem seguir o formato type(scope): subject.
Tipos válidos: feat, fix, refactor, docs, test, chore, perf, style, ci
Âmbitos válidos: db, sse, oauth, dashboard, api, cli, docker, ci, mcp, a2a, memory, skills, cloud-agent, guardrails, compression, auto-combo, resilience, providers, executors, translator, domain, authz
Alterações incompatíveis: adicionar o rodapé BREAKING CHANGE: ou ! após o âmbito (por exemplo, feat(api)!: drop /v0).
Documentação
npm run check:docs-syncpassa (executado automaticamente pelo pre-commit)npm run check:docs-allpassa (agregador: docs-sync + docs-counts + env-doc-sync + deprecated-versions + doc-links)npm run check:env-doc-synctermina com 0 — o contrato de ambiente entre o código ↔.env.example↔docs/reference/ENVIRONMENT.mdestá intactonpm run check:doc-linkstermina com 0 — não existem referências internas de markdown inválidas após a reestruturaçãodocs/architecture/ARCHITECTURE.mdrevisto quanto a divergências de armazenamento/tempo de execuçãodocs/guides/TROUBLESHOOTING.mdrevisto quanto a divergências de variáveis de ambiente e operacionais- Se
.env.examplefoi alterado:docs/reference/ENVIRONMENT.mdatualizado - Se a nova funcionalidade tiver uma IU:
docs/guides/USER_GUIDE.mdmenciona-a - Se a nova funcionalidade tiver uma API:
docs/reference/API_REFERENCE.md+docs/openapi.yamlatualizados - Se a nova funcionalidade for um módulo: existe um
docs/<MODULE>.mddedicado - Se for uma alteração incompatível:
docs/guides/TROUBLESHOOTING.mdinclui uma nota de migração
i18n
npm run i18n:checktermina com 0 — o estado das traduções (.i18n-state.json) está sincronizado com a documentação de origem (sem fontes divergentes no modo estrito; um aviso no modo de aviso é aceitável para pequenos ajustes de última hora na documentação, mas deve ser 0 antes de criar a etiqueta)npm run i18n:check-ui-coveragetermina com 0 — todos os idiomas da IU estão no mínimo de cobertura de 80% ou acimanpm run i18n:sync-ui:drycomunica 0 chaves em falta em todos os 42 idiomas- Se a documentação de origem em inglês foi alterada, execute
npm run i18n:run(requerOMNIROUTE_TRANSLATION_API_KEYem.env) antes de criar a etiqueta - As contribuições de tradução podem ser adiadas para a próxima versão se forem menores (registar no CHANGELOG)
Migrações da base de dados
- Se
src/lib/db/migrations/tiver novos ficheiros:- Cada migração é idempotente (
CREATE TABLE IF NOT EXISTS, etc.) - As migrações estão encapsuladas em transações
- Estão numeradas corretamente (sem lacunas na sequência)
- Cada migração é idempotente (
- Testar numa instalação nova: elimine
~/.omniroute/omniroute.dbe executenpm run dev - Testar numa instalação existente: faça uma cópia de segurança da BD, execute a migração e verifique o esquema
- Os ficheiros WAL (
-wal,-shm) são tratados corretamente se a migração reescrever tabelas
Catálogo de fornecedores (validado por Zod)
- O esquema Zod de
src/shared/constants/providers.tsé válido no momento do carregamento- Todos os fornecedores têm os campos obrigatórios (
id,label,kind, etc.) freeNotefornecido para novos fornecedores gratuitos- Os fornecedores OAuth têm
oauthConfigregistado emsrc/lib/oauth/constants/oauth.ts
- Todos os fornecedores têm os campos obrigatórios (
- Se for adicionado um novo fornecedor: executor correspondente em
open-sse/executors/ - Se não usar o formato OpenAI: tradutor em
open-sse/translator/ - Modelos registados em
open-sse/config/providerRegistry.ts - Os testes unitários em
tests/unit/abrangem a classificação e o encaminhamento de fornecedores
Ambiente de trabalho (Electron)
Se electron/ foi alterado:
npm run electron:smoke:packagedpassa- Compilações testadas para pelo menos um de
:win,:mac,:linux - Os certificados de assinatura de código não expiraram (se aplicável)
- A versão de
electron/package.jsoncorresponde à depackage.jsonna raiz - O apontador do canal de atualização automática foi atualizado se o lançamento for para
stable
Estrutura da compilação
O repositório utiliza três diretórios de saída distintos — nunca os confunda:
| Diretório | Finalidade | Controlado? |
|---|---|---|
src/ |
Código-fonte da aplicação (TypeScript / TSX) | Sim |
.build/ |
Intermediários da compilação — saída de next build (distDir) |
Não (ignorado pelo git) |
dist/ |
Pacote npm distribuível — montado por assembleStandalone |
Não (ignorado pelo git) |
Nota para o operador: o diretório da imagem do VPS remoto continua a ser
/usr/lib/node_modules/omniroute/app/. Apenas a saída de compilação dentro do repositório foi movida (app/→dist/). As ferramentas de implementação sincronizam o conteúdo dedist/por rsync para o diretório remotoapp/— não são necessárias alterações aos caminhos do VPS.
Fluxo de compilação única:
npm run build:release
└─ rm -rf .build dist (limpeza)
└─ next build → .build/next/ (intermediários)
└─ assembleStandalone (copia standalone + static + public + natives → dist/)
└─ escreve dist/BUILD_SHA (sentinela HEAD)
NÃO execute npm run build seguido de um npm run build:cli separado para a implementação — utilize
npm run build:release, que efetua uma recompilação limpa + sentinela num único comando.
Validação dos artefactos
npm run build:releaseé concluído com êxito edist/BUILD_SHA==git rev-parse --short HEADnpm run check:pack-artifactsem problemas — semapp.__qa_backup,scripts/scratch,package-lock.jsonou outros resíduos locaisdist/server.jsexiste após a compilação
Etiquetagem e lançamento
- Execute
/generate-release-cc(ferramenta do Claude Code):- Cria a etiqueta
vX.Y.Z - Envia a etiqueta e o ramo
- Abre uma versão no GitHub com o corpo do registo de alterações
- Anexa os instaladores do Electron (se tiverem sido compilados)
- Cria a etiqueta
- Ou manualmente:
git tag -a vX.Y.Z -m "Release vX.Y.Z" git push origin vX.Y.Z gh release create vX.Y.Z --notes-from-tag
Implementação
As ferramentas de implementação utilizam o fluxo rsync ligeiro — sem npm pack nem npm i -g:
- Utilize a ferramenta de implementação que corresponde ao destino:
/deploy-vps-local-cc— VPS local (192.168.0.15)/deploy-vps-akamai-cc— VPS da Akamai (69.164.221.35)/deploy-vps-both-cc— ambos
- Antes da implementação, confirme que
dist/BUILD_SHA==git rev-parse --short HEAD - A compilação tem de ser executada onde
node_modulesseja real (checkout principal ou árvore de trabalho comnpm ciexecutado — NÃO uma árvore de trabalho com ligações simbólicas) - Efetue um teste rápido à instância implementada:
- Abra
/dashboard/health→ confirme que a cadeia da versão corresponde à versão lançada - Execute um pedido a
/v1/chat/completionsatravés de um fornecedor conhecido - Verifique se
/api/monitoring/healthdevolve disjuntoresCLOSED - Confirme que os transportes MCP respondem (
/mcpHTTP,/mcp-sseSSE)
- Abra
Pós-lançamento
- Executar
/capture-release-evidences-cc(skill do Claude Code)- Captura imagens/gravações WebP das novas funcionalidades
- Anexa-as às notas de versão / publicação do blogue
- Atualizar as GitHub Discussions / o Discord com o anúncio da versão
- Abrir um marco para a próxima versão
- Se for crítico: afixar a discussão ou publicar em
news.jsonpara apresentar uma faixa na aplicação
Critérios para o lançamento público do Radar
O anúncio do Radar é intencionalmente consolidado com active: false. A ativação é uma alteração
separada, efetuada depois de todos os itens abaixo terem sido comprovados:
- Todos os PRs encadeados do Radar estão integrados e o CI da versão final está verde
- Implementar e efetuar testes rápidos às rotas OSS do Radar, mantendo
RADAR_ENABLEDdesativado por predefinição - Efetuar testes rápidos a
GET /planos,/termos,/privacidadee/reembolsono anfitrião designado do Radar - Registar a identidade/contacto/morada do operador e a revisão jurídica aprovada pelo proprietário no serviço privado
- Testar o Stripe Checkout e o webhook assinado apenas em modo de teste
- Testar a entrega de um e-mail transacional encriptado com o remetente/domínio aprovado
- Comprovar o restauro da cópia de segurança e uma execução de investigação supervisionada e com orçamento limitado
- Aprovar a política de revisão de BRL/PIX antes de aceitar comprovativos de donativos
- Ativar o Checkout público apenas após os critérios anteriores terem sido cumpridos e, em seguida, ativar o novo ID de
news.json - Verificar se a faixa da página inicial utiliza texto localizado e se um novo ID reaparece depois de um ID anterior ser dispensado
Teste de fumo dos Serviços Incorporados (v3.8.4+)
Antes de disponibilizar qualquer versão que inclua alterações aos serviços incorporados, verifique:
Arranque com BD nova (deteta colisões de migrações — adicionado após a correção urgente da v3.8.4)
DATA_DIR=$(mktemp -d) npm start &— aguarde 10 s pelo arranquecurl -s http://127.0.0.1:20128/api/services/9router/status | jq '.tool'devolve"9router"(NÃO 404, NÃO 500). Confirma que a migração071_services.sqlfoi aplicada e que a linha foi criada.sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(version_manager);" | grep -E "provider_expose|logs_buffer_path|last_sync_at"devolve 3 linhas.sqlite3 $DATA_DIR/storage.sqlite "PRAGMA table_info(webhooks);" | grep -E "kind|metadata_encrypted"devolve 2 linhas (valida que070_webhooks_kind_metadata.sqlfoi aplicada).node --import tsx/esm --test tests/unit/db/no-migration-collisions.test.tsé concluído com êxito — protege contra futuras colisões.
9Router
POST /api/services/9router/installdevolve 200 cominstalledVersionem menos de 2 minPOST /api/services/9router/startdevolve 200 estate: "running"em menos de 30 sGET /api/services/9router/statusindicahealth: "healthy"POST /v1/chat/completionscom"model": "9router/auto/..."devolve 200 (encaminhamento de ponta a ponta através do 9Router)GET /dashboard/providers/services/9router/embed/dashboardapresenta a interface nativa do 9Router dentro do proxy (sem iframe direto para127.0.0.1:port)POST /api/services/9router/rotate-keydevolve{ keyRotated: true }e o serviço reinicia sem problemasPOST /api/services/9router/stopdevolve 200 estate: "stopped"GET /api/services/9router/logs?tail=50devolve um fluxo SSE com um eventosnapshotque contém as linhas recentes- A instalação num ambiente sem
npmno PATH devolve 500 com uma mensagem de erro clara (sem rastreio da pilha)
CLIProxyAPI
POST /api/services/cliproxy/installdevolve 200 em menos de 2 minPOST /api/services/cliproxy/startdevolve 200 estate: "running"em menos de 30 sGET /api/services/cliproxy/statusindicahealth: "healthy"POST /api/services/cliproxy/stopdevolve 200 estate: "stopped"GET /api/services/cliproxy/logs?tail=50devolve um fluxo SSE
Regressão de segurança
curl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/9router/startdevolve403 LOCAL_ONLYcurl -H "X-Forwarded-For: 1.2.3.4" http://localhost:20128/api/services/cliproxy/startdevolve403 LOCAL_ONLY- As respostas de erro de
/api/services/*não contêmerr.stacknem caminhos de ficheiros absolutos
Verificações para a v3.8.0+
Antes de disponibilizar qualquer versão v3.8.x, verifique também estes itens:
omniroute --trayarranca no macOS (systray2 instalado em~/.omniroute/runtime/)omniroute --trayarranca no Linux (requer DISPLAY; apresenta um erro claro se não estiver definido)omniroute --trayarranca no Windows (PowerShell NotifyIcon, sem binários adicionais)omniroute config tray enablecria uma entrada de arranque automático; a desativação remove-anpm install -g omniroute@<this-version>executa o postinstall sem terminar com um erro fatal- O processo de atualização mantém as dependências opcionais:
omniroute update --applye o atualizador automático executamnpm install -g … --include=optionalpara que asoptionalDependencies(better-sqlite3, keytar, tls-client e a pilha SLM do llmlingua:@atjsh/llmlingua-2@2.0.5,js-tiktoken) sejam preservadas após uma atualização. O nível SLM ultramodelPathtambém requer o modelo tinybert, transferido automaticamente para${DATA_DIR}/models/llmlinguana primeira utilização. Em seguida, o postinstall (scripts/build/colocateOptionals.mjs) coloca o conjunto de dependências opcionais do SLM emdist/node_modules, para que o worker resolva uma ÚNICA instância de@huggingface/transformers^4.2.0 — o rastreio autónomo inclui apenas transformers, não as dependências opcionais importadas dinamicamente; sem isto, o worker carregaria llmlingua-2 com transformers da raiz e o nível SLM faria silenciosamente uma recuperação em modo aberto. omniroute statusfunciona sem.env(caminho do token da CLI, apenas loopback)curl http://localhost:20128/api/shutdowndevolve 401 (rota sempre protegida)curl -H "host: evil.com" http://localhost:20128/api/mcp/ssedevolve 401 (proteção de loopback)- O runtime do SQLite é resolvido como
bundledna primeira execução (binário incluído válido para a plataforma) - O runtime do SQLite recorre a
runtimequandonode_modules/better-sqlite3é eliminado - O filtro MCP inteligente comprime a saída real de
playwright-mcp browser_snapshot(redução ≥50%) - Todos os 10 ficheiros
skills/omniroute*/SKILL.mdestão acessíveis publicamente através de um URL raw do GitHub - O assistente de integração apresenta o passo de introdução aos níveis "Como funciona" numa configuração nova
- O widget de cobertura de níveis do painel principal apresenta as contagens configuradas/ativas
Reversão
Se a versão tiver um problema crítico:
gh release edit vX.Y.Z --prerelease(marca-a como não sendo a mais recente)git tag -d vX.Y.Z && git push --delete origin vX.Y.Z(apenas se ainda não tiver sido adotada pelos utilizadores)- Ou: correção urgente em
release/vX.Y.0→ versão de correçãovX.Y.(Z+1) - Comunicar imediatamente no GitHub Discussions e no Discord
Regras obrigatórias
- Nunca fazer commit diretamente em
main - Nunca utilizar
git push --forceemmainou em branchesrelease/* - Nunca ignorar os hooks do Husky (
--no-verify) - Nunca incluir segredos, credenciais ou ficheiros
.envnum commit - A cobertura tem de permanecer ≥60/60/60/60 (instruções/linhas/funções/branches)
- Incluir ou atualizar sempre os testes ao alterar código de produção em
src/,open-sse/,electron/oubin/
Verificação automática de sincronização
Executar localmente a verificação de sincronização da documentação antes de abrir um PR:
npm run check:docs-sync
O CI também executa esta verificação em .github/workflows/ci.yml (tarefa de lint).