Superpowers (Loop/Buzz/PII-BR/MCP/Browser/AG-UI/OTel) + auditoria e hardening - #2
LMPrado-DZ23 wants to merge 4 commits into
Conversation
… o v3.8.51 Forward-port ADITIVO das superpowers para cima da base de produção release/v3.8.51 (que está 3713 commits à frente do baseline c0b2253 onde foram construídas): - Cores novos: open-sse/{loop-engine,buzz-bridge,mcp-review,browser-guard,ag-ui,otel} - src/lib: loopRunner, buzzService, buzzProducer, buzzConsumer, otel, db/{loopEngine,buzzBridge} - API: /api/loop*, /api/buzz*, /api/mcp/review, /api/browser/check, /api/otel/spans - Painel: /dashboard/loop, /dashboard/buzz + itens no sidebar (Agentic Features) - Migração 174 (renumerada de 175; máx do v3.8.51 era 173), aditiva/idempotente - Flags: LOOP_ENGINE/BUZZ_HUB/MCP_REVIEW/BROWSER_USE/OTEL_TRACING (OFF por padrão) - PII BR (CEP/PIX), fix OAuth callback (Voltar ao OmniRoute + retorno loopback) e botão "Abrir em nova aba" no login de provedor - Deps: @noble/curves, @noble/hashes Todas as APIs usadas existem no v3.8.51 (verificado). ignoreBuildErrors=true no next.config. Nada removido; superpowers dormentes até ligar as flags no painel. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
… e reforça robustez do Buzz Auditoria completa do overlay de superpowers no v3.8.51 (Loop/Buzz/PII-BR/MCP/ Browser/AG-UI/OTel), com evidência real (node:test + vitest + tsc + eslint). CORREÇÕES 1. BUG que quebrava 21 testes (HIGH): 5 arquivos de teste liam a migration `175_loop_engine_and_buzz_bridge.sql`, mas ela foi renomeada para `174_` no forward-port (o v3.8.51 ia até 173). Corrigido em: buzz-bridge-repository, buzz-service, fase2-endpoints, loop-engine-repository, loop-runner. Também normaliza comentários "175" remanescentes (loopEngine.ts, buzzBridge.ts, loop-engine/index.ts, cabeçalho da própria migration). 2. Buzz outbox no DB (MEDIUM): entradas 'failed' ficavam presas para sempre (não havia caminho de requeue). Adiciona requeueFailedOutbox() com teto de tentativas (MAX_OUTBOX_ATTEMPTS=5) e liga no flushBuzzOutbox, para falhas transitórias do relay serem re-publicadas no próximo flush. 3. WebSocketBuzzAdapter (MEDIUM): o 1º publish corria contra o handshake AUTH (NIP-42) e podia falhar; sem reconexão após queda. Agora o publish espera o AUTH (ou a janela de graça, se o relay não exige auth), reconecta sob demanda e re-emite os REQ das assinaturas ativas após reconectar. TESTES ADICIONADOS - buzz-ws-adapter.test.ts: 3 testes de integração contra um relay NIP-42 mínimo local (ordem AUTH-antes-de-EVENT, relay sem auth, reconexão sob demanda). - buzz-bridge-repository: teste do requeue (reenfileira sob o teto, desiste acima). VERIFICAÇÃO (real) - node:test: 71/71 passam (antes: 46/67). - vitest (oauth .tsx): 2/2. - tsc --noEmit (open-sse + core): sem erros nos arquivos tocados. - eslint: limpo. check:migration-numbering: OK. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…nt/typecheck limpos Fecha as lacunas restantes da auditoria para deixar o overlay em nível de produção. RESILIÊNCIA (Buzz WebSocket) - WebSocketBuzzAdapter agora AUTO-RECONECTA com backoff exponencial + jitter (teto configurável) após queda inesperada; connect() é single-flight (nunca abre 2 sockets); ignora o evento 'close' tardio de um socket já substituído (senão o publish iria para um socket órfão e expiraria). O consumidor de entrada volta a receber eventos sozinho após uma queda. close() explícito desliga a reconexão. SEGURANÇA - mcp-review: `publisherVerified` deixa de ser campo morto — publisher REPROVADO na verificação (=== false) força re-revisão humana mesmo sem ampliar permissões (fail-closed). - ag-ui: validateEventSequence passa a rejeitar RUN_STARTED duplicado no meio do fluxo e runId inconsistente entre eventos (pega bug de emissão que embaralharia o replay). QUALIDADE - Corrige 2 erros de lint (react-hooks/set-state-in-effect) nas páginas Loop/Buzz, usando o disable idiomático já adotado por 5 páginas do repo (carga inicial no mount). - featureFlagDefinitions: remove contadores de seção desatualizados dos cabeçalhos. TESTES ADICIONADOS (+4) - buzz-ws-adapter: auto-reconexão do consumidor após queda (relay derruba a 1ª conexão e entrega o evento na reconexão). - mcp-review: publisher reprovado -> review_required mesmo sem ampliar. - ag-ui: RUN_STARTED duplicado e runId inconsistente -> inválido. VERIFICAÇÃO (real) - node:test: 75/75 (era 71). vitest: 2/2. Total 77. - tsc --noEmit (open-sse + core): 0 erros nos arquivos tocados. - eslint COM as suppressions do repo: exit 0 (gate real verde) nos 55 arquivos meus. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
The superpowers branch forked from base b345c7f and never received the later fixes now on release/v3.8.51, so its PR CI failed on every gate those commits address: API-route typecheck (glm.ts TS2554), merge integrity (changelog + generated skills), the stream sanitizer unit test, and the 8 security-finding suites. Merging release in (clean, no conflicts) brings all of them. Superpowers adds one migration (174_loop_engine_and_buzz_bridge), taking the count to 171 files; bump the migrations count in README/AGENTS/llm.txt 170->171 so the docs-counts gate passes. Verified on the merged tree: docs-counts PASS, changelog-integrity PASS, env-doc-sync PASS, api-typecheck 0 regressions, and a targeted unit run (sanitizer + migration-171 + buzz + loop + encryption) 16/16 green. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
|
Superseded pelo PR #13. O que esta branch trazia de genuinamente novo — MCP review gate, Browser Guard, AG-UI, OTel-lite e os reconhecedores brasileiros de CEP e chave PIX — está em A auditoria reprovou o código como veio e cada achado foi corrigido na causa raiz, com teste de regressão que reproduz a entrada usada: o Browser Guard permitia efeito externo originado na página quando vinha como clique, pulava a allowlist inteira sem Fechando como obsoleta; o histórico da branch fica preservado. 🤖 Fechado por Claude Code |
O que este PR entrega
Overlay de superpowers sobre o OmniRoute v3.8.51, harness-agnóstico e atrás de feature flags OFF por padrão (zero regressão com as flags desligadas):
tenant_id.Auditoria e hardening (ponta a ponta)
Auditoria dos 57 arquivos com verificação real e correção de tudo que apareceu:
175_...sql, renomeada para174_no forward-port (o v3.8.51 ia até 173).failed→pending(sob teto de tentativas) e auto-reconexão com backoff no WebSocket (o consumidor volta a receber após queda; publish espera o AUTH NIP-42 e reconecta sob demanda).publisherVerifiedvirou gate fail-closed no MCP Review; AG-UI rejeitaRUN_STARTEDduplicado erunIdinconsistente.react-hooks/set-state-in-effect) corrigidos com o disable idiomático do repo; comentários/contadores desatualizados normalizados.Verificação (executada)
node:test: 75/75 ·vitest(OAuth): 2/2 — total 77 testes.tsc --noEmit(open-sse + core): 0 erros nos arquivos tocados.eslintcom as suppressions do repo: exit 0 (gate real verde).check:migration-numbering: OK.Pendência honesta
Deploy em produção (omniroute.dz23.online) ainda não feito por OOM no
next builddo servidor (operacional, não de código) — resolvível com swap temporário.🤖 Generated with Claude Code