Projetos / SHERLOCK
SHERLOCK
Ambiente visual de investigação e análise de xadrez.
Repositório: https://github.com/lughlammas/sherlock · commit e632035 · release Android v0.1.3
- Status
- v0.1.3 · release com APK Android
- Stack
- React, TypeScript, Vite, Express, WebSocket, chess.js
- Testes rodados
npm test→ 8/8 · typecheck exit 0 · 19/10/2026- Fonte
- github.com/lughlammas/sherlock @ e632035
01Problema
Um motor de xadrez é um programa de linha de comando que fala um protocolo de texto (UCI). Colocá-lo atrás de uma interface visual traz problemas de integração: iniciar e encerrar o processo, interpretar a saída, cancelar uma busca e garantir que uma resposta atrasada de uma busca antiga nunca sobrescreva a posição atual.
02Contexto
É um projeto próprio, usado também como vitrine de engenharia. Integra o motor Lughnasadh na versão 0.2. Uma versão mais nova do motor (0.4.0) é mantida à parte e não foi integrada nem validada no SHERLOCK.
03Solução
- Tabuleiro responsivo, com carregar, copiar e reiniciar posições (FEN).
- Análise por profundidade ou por tempo, com profundidade, nós, velocidade, avaliação e linha principal ao vivo, e botão de parar.
- Estados claros: pronto, investigando, melhor lance e erro do motor (com tentar de novo e reiniciar).
- Um modo em que dois processos do motor jogam entre si.
- Versão Android.
04Arquitetura
Navegador (React) → WebSocket → controlador SHERLOCK → adaptador Lughnasadh → motor como processo filho. A interface nunca fala UCI cru: o adaptador cuida do protocolo, dos limites de tempo e dos tokens de sessão, de modo que respostas antigas são descartadas (coberto pelos testes de sessão). Por projeto, a posição do tabuleiro é mantida em timeout, travamento ou reinício do motor; esse caminho só é exercitado pelos smoke scripts, que não foram rodados aqui.
No Android, a mesma interface roda num WebView e chega ao motor nativo por uma ponte JavaScript e ProcessBuilder, sem dependência de Node ou WebSocket no APK.
05Evidências
- Passou em 8/8 testes na execução feita para este site em 19/10/2026: 6 testes do parser UCI e 2 de sessão, entre eles "drops stale info when session rotates". Typecheck limpo.
- A release v0.1.3 com o APK está pública no GitHub, e o repositório publica o SHA-256 do APK.
Links
- Repositório público: https://github.com/lughlammas/sherlock
- Commit
e632035: https://github.com/lughlammas/sherlock/commit/e63203515a1b0ed3fbdf388e0bb317267bb14cfb - Testes (código): https://github.com/lughlammas/sherlock/tree/e63203515a1b0ed3fbdf388e0bb317267bb14cfb/tests
- Release v0.1.3 (APK): https://github.com/lughlammas/sherlock/releases/tag/v0.1.3
- SHA-256 publicado do APK: https://github.com/lughlammas/sherlock/blob/e63203515a1b0ed3fbdf388e0bb317267bb14cfb/Sherlock-0.1.3-s21.apk.sha256
- A execução 8/8: log de testes interno, não público (o repositório não tem CI).
06Papel humano e ferramentas de IA
Feito com desenvolvimento assistido por IA sob direção humana.
07Testes executados
| Checagem | Resultado | Onde |
|---|---|---|
npm test (saída do motor simulada, sem binário) |
8/8 passaram | rodado em 19/10/2026 |
| typecheck (cliente + servidor) | exit 0 | rodado em 19/10/2026 |
Smoke do motor (npm run smoke, smoke:match) |
não rodado (exige o binário nativo) | |
| CI | inexistente: o repositório não tem workflow |
08Limitações
- Sem integração contínua.
- Os testes usam linhas simuladas do motor; o comportamento com o motor real só é coberto pelos smoke scripts, que não foram rodados aqui.
- O motor integrado é a versão 0.2; a 0.4.0 não foi integrada.
- Sem benchmark de força de jogo nem de desempenho.
- O modo motor contra motor roda dois processos e consome bastante bateria e memória.
09Necessidade comercial
O SHERLOCK mostra trabalho de integração: um processo nativo, um protocolo de texto, uma interface em tempo real e empacotamento mobile, com os casos de falha (timeout, travamento, resposta atrasada) tratados explicitamente. É esse tipo de encanamento que está por trás da S02 · Custom Software e do diagnóstico da S03 · AI Code Rescue.
Tem um problema que deveria virar software?
Conte o que você tem e o que não está funcionando.