Skip to content

Consolidar relay: recuperação de atores, Gamescope EIS, diagnósticos, watchdog, testes e documentação - #21

Merged
lavinsky merged 13 commits into
mainfrom
audit/relay-full-consolidation-20261020
Oct 20, 2026
Merged

lavinsky merged 13 commits into
mainfrom
audit/relay-full-consolidation-20261020

Conversation

@lavinsky

Copy link
Copy Markdown
Owner

Objetivo e origem

Consolidar toda a diferença publicável da pasta original de trabalho em relação à origin/main@9ee7ef5 (PR #19 já integrado): 72 arquivos, +5.514/−127 linhas, 13 commits. A branch reúne os commits de Gamescope/ação/recuperação já existentes e 44 arquivos incluídos no commit final 328c1fe, abrangendo os 22 novos arquivos de código/testes/documentos antes não rastreados.

Atenção à sobreposição: este PR inclui integralmente as alterações do PR #20 (ainda aberto), acrescidas da auditoria de edge cases, evolução do ring, instrumentação, watchdog e documentação. Não integrar os dois PRs independentemente sem reconciliar o mesmo histórico; este PR é o consolidado contra main. Não realizar merge automático.

Matriz de alterações, impacto e benefício

Subsistema e arquivos Mudança concreta Impacto/benefício
Entrada Gamescope — relay/gamescope_eis.py, relay/synth_input.py, relay/cli.py, scripts/gamescope-eis-session.sh, relay_capture.conf Backend libei/EIS apontando a socket privado Gamescope, sem fallback para o compositor KDE; teclas pressionadas/soltas, validação de socket, tratamento de desconexões, retry de janela e códigos de erro Envio sintético direcionado ao jogo em Gamescope Wayland e menos risco de tecla alcançar a sessão KDE; ydotool permanece alternativa explícita
Escrita nativa — relay/writeback.py, relay/relay.py, relay/sendwatch.py, relay/safety.py Rotas 035F dispatcher e 0437/0438/0AF4 carrier+merge, barreira síncrona da tecla antes de 0439 (8 B obrigatórios), proteção do callback de desconexão em sendall, tratamento conservador de janelas de escrita e credenciais em RECV de login Mantém o cliente responsável por cifra e ordem; evita envio após falha de tecla e elimina inconsistências de sessão/conexão e de log
Proteção e telemetria Frida — agent/relay_hook_linux.js overlapsRecvRing bloqueia escritas TX sobre ring RX registrado, inclusive _fix0; eventos BP-TELEMETRY de arme/desarme/falha/latência agregada Reduz interferência entre merge e recepção; oferece diagnóstico de DRs, com potencial custo/risco descrito abaixo
Recepção e validação de pacotes — relay/actors.py, relay/wire_feed.py, relay/packets.py, relay/runtime.py Descoberta dinâmica da região de ring na sessão atual (sem confiar em cache), busca interna em mapeamentos anônimos RW/RWX do Wine, limite/backoff e redescoberta; ring_epoch, pré-imagens e snapshots; 09FD/09FF/0229/043F/0983 protegidos por validação e proveniência. 0229 não compara GID cifrado com GID plaintext; CP1252 com validação de nomes; exceção estreita para nome vazio em 09FF quando há leitura fresca comprovada; velocidade 0..2000; actor-delay=0.30s Aumenta capacidade de recuperar atores/status com fidelidade, mantendo drop do corpo não verificado; reduz falsos positivos de ring antigo, caches e slots de outra recepção
Diagnóstico de recepção e console — relay/console.py, relay/cli.py, relay/runtime.py, relay/wire_feed.py ACTOR-RECOVERY detalha motivos, polling, leituras, validações e evidência; RECV-BOUNDARY rastreia fronteiras após 09FF apenas no map server; verbose=false torna terminal conciso sem eliminar JSONL Permite investigar erros de campo e raciocinar sobre perdas sem confundir logs com plaintext; bytes hex de RECV-BOUNDARY são dados privados de sessão
Watchdog e auditoria do Linux — run.sh, scripts/watch-uaro-stop.py, scripts/audit-game-stop-signals.sh Monitor externo de estados Linux T/t; após 3 s de STOP, revalida nome/estado e envia no máximo um SIGCONT por episódio; auditoria opt-in com sudo -n de kill/tgkill/tkill para um PID Diminui risco de uaRO ficar parado indefinidamente por STOP e oferece indícios de origem do sinal; não mede inatividade do personagem nem ressincroniza a cifra
Pesquisa de plaintext recebido — research/recv_cipher/{recv_probe.py,run_probe.sh,ring_correlator.py,actor_adapter.py,ring_watch.js,write_trace.js,audit_coverage.py,audit_write_trace.py,validate_0229.py,sample_telemetry.py} Sonda Frida isolada, framing por FD, snapshots de ring, descoberta reutilizando ActorDecrypt, rastreamento opcional de escrita, comparações de proveniência, auditorias e sampler somente leitura a intervalos solicitados de 1 ms Permite investigar timing/cobertura independentemente da implementação do algoritmo Gepard; não integra automaticamente a sonda à produção nem prova atribuição causal apenas pelo byte correto
Pesquisa histórica e proteção de artefatos — research/movement_035f/*, .gitignore, research/recv_cipher/.gitignore Sete scripts deixam caminho absoluto da tabela; exclusão de logs, recursos externos, captures, marcas de sessão e artefatos privados Portabilidade e proteção contra inclusão acidental de dados de sessão
Testes — tests/test_edge_*.py e novos tests/test_{0229_provenance,043f_recovery,0983_recovery,actor_dynamic_ring,console_verbose,empty_actor_name,scramble_rx_guard,uaro_stop_watchdog,validate_0229}.py, além de testes de pesquisa Cobertura de framing, limites, corridas de conexão, falhas EIS, BP e escrita, proveniência, nomes, status, watchdog, pseudofalhas e contagem de plaintext Proteção offline contra regressões, inclusive fail-closed; não equivale a ensaio in-process com o cliente
Documentação — README.md, docs/{README,ARCHITECTURE,OPERATIONS,RESEARCH_STATUS,CIPHER_INVESTIGATION,DYNAMIC_ACTOR_RING}.md, research/recv_cipher/{README,STATE,HANDOFF}.md Fonte canônica atualizada para 20/10, configuração real (itemuse-input-key=F2, actor-delay=0.30, modo conciso), comandos corretos do run.sh, inventário, evidências, resultados negativos e riscos Facilita diagnóstico/revisão por futuros agentes e impede que resultados experimentais sejam tratados como protocolo demonstrado

Evidência live PASSIVA (logs existentes, nenhum experimento novo)

Período analisado: 20/10/2026, 18:37:05–19:30:47 BRT, cliente ativo desde 16:00, relay desde 18:37 e OpenKore ativo desde 19/10. Os arquivos fonte principais tinham mtime anterior ao início do relay, compatível com carregamento dessa versão, sem prova byte a byte.

relay_log.jsonl, ACTOR-RECOVERY:

  • 09FD: 1.030 recuperados / 6 perdidos
  • 09FF: 1.001 / 15
  • 0983: 948 / 75
  • 043F: 241 / 18
  • 0229: 91 / 1
  • Total: 3.311 recuperados / 115 perdidos = 3.426 candidatos (~96,6%). Motivos dos misses: 103 correlation-mismatch, 7 overwritten-before-verification, 4 ring-not-found, 1 timeout-no-valid-copy.

No mesmo período, o console do OpenKore-upstream continha 724 linhas relativas a skills, 346 a ataques, 195 a movimento, 85 a itens/storage e 45 com padrões de aviso/erro; 0 correspondências com os padrões de desconexão ou ID desconhecido após 18:37. Essas contagens são de linhas classificadas por regex, não de ações distintas ou garantia de aceitação pelo servidor. No relay também ocorreram 391 SENDCALL stale-drop, 217 THIS-CONTEXT stale, 70 THIS-CONTEXT suspect, para revisão de ciclo de vida; não tratar drops conservadores automaticamente como falha fatal.

Limites: não houve reinício, nova instrumentação, envio de comandos ou verificação independente da semântica de todos os buffs/flags. Logs crus, GIDs e credenciais não fazem parte deste PR.

Validação offline (sobre a branch consolidada)

  • bash scripts/test-offline.sh: PASS (37 scripts)
  • python3 scripts/validate-research.py: PASS
  • python3 scripts/validate-codex.py: PASS
  • python3 research/recv_cipher/test_ring_correlator.py: PASS
  • python3 research/recv_cipher/test_audit_write_trace.py: PASS
  • bash -n em launchers/sondas Shell: PASS
  • node --check no agente e JS de sonda: PASS
  • python3 -m compileall -q relay tests research/recv_cipher scripts: PASS
  • git diff --check: PASS
  • 134 destinos de links relativos verificados no catálogo documental; sem links faltantes nesse teste (a verificação de âncoras não foi exaustiva).
  • Varredura de padrões de secrets/privacidade no conteúdo preparado para o commit: 0 correspondências nos padrões testados; não substitui revisão manual de segurança.

Riscos e pendências para revisão humana

  1. 115 perdas de plaintext live: concentração em 0983 (75) e 043F (18); validar buff/status/sitting, proveniência, eventual falsa correspondência e semântica opt1/opt2/option antes de dizer que está integralmente resolvido.
  2. Tempo/concorrência: actor-delay=300ms pode aumentar backlog e não impede sobrescrita antes da leitura; a estabilidade de 96,6% é restrita à janela medida.
  3. Proteção RX: funciona contra ring registrado, não comprova proteção da região RX ainda desconhecida.
  4. BP/Frida: telemetria adicional e interações com DRs podem influenciar timings; não há prova de ausência de overhead.
  5. Watchdog: um SIGCONT pode deixar cifra/sessão dessincronizadas; auditctl exige privilégios, tem filtros limitados e pode necessitar limpeza manual após encerramento abrupto.
  6. Encoding: CP1252 é hipótese operacional, pode rejeitar nomes legítimos fora da codificação assumida; exceção do nome vazio depende de predicados temporais.
  7. Privacidade/telemetria experimental: sample_telemetry.py retém frames completos do ring em RAM (até 512×16KiB por padrão) apesar de docstring sugerir que não os armazena; não publicar os frames. audit_coverage.py conta por enquanto apenas 09FD/09FF/0229.
  8. Não coberto: função/seed/estado independentes da cifra Gepard, testes dinâmicos end-to-end de todas as ações e efeitos de reinícios/transições.

Decisão solicitada: revisar este PR consolidado como candidato único a main; coordenar com o PR #20 sobreposto. Sem merge automático.

@lavinsky
lavinsky merged commit f311d67 into main Oct 20, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant