Repository navigation
Redesenho da interface: Fila por grupos, Configurações por seções, celular e tokens únicos - #3
Merged
Merged
Conversation
Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
…ixo no celular, sem mockups) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
…om SIGKILL tools/tokens.json gera o bloco :root de web/ui/app.css e as cores/medidas de app/App.xaml (tools/generate-tokens.py). A CI falha se divergirem. O E2E web em modo local parava o servidor com SIGTERM no teste de reinício: o desligamento gracioso deixava o envio do IMGW terminar e o webhook de conclusão se perdia, falhando 'webhook depois do reinício'. O modo Docker já usa KILL pelo mesmo motivo; o local agora também. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configuration
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 |
- Fila agrupada: Precisa de você (erro, PKG enviado, verifique no PS5, senha pendente) → Enviando → Na fila → Concluídos (recolhido por padrão, escolha lembrada no navegador; Limpar no cabeçalho do grupo). - Números só quando dizem algo: o ativo mostra %, MB/s e restante; parado com progresso, só o %; aguardando partes, erro e concluído, nenhum. Barra só para quem está atravessando ou parado no meio. - Título com tamanho fixo (22 px; o ativo, 26 px) com ou sem capa. - Estado como etiqueta com ponto de cor; com erro, "Tentar de novo" vira botão com texto. - Cabeçalho com progresso total da fila e término previsto (só quando todos os itens têm tamanho conhecido e há velocidade). - Status do PS5 como selo no topo do conteúdo; "Achei um PS5" ao lado. - Avisos: um por jogo e tipo (pedido de senha repetido renova o aviso em vez de empilhar); erro/PKG/verifique ganham "Ver", que leva ao cartão. O servidor passa a mandar o id do jogo no aviso. - Configurações em seções (PS5, Destinos, Envio, Senhas, Avisos, Geral) com índice fixo que acompanha a rolagem; resultado de teste como linha de status. - Celular: marca e abas numa linha, cartões compactos, botão Adicionar fixo no rodapé, alvos de 44 px, índice das Configurações em chips. - Caminhos com prefixo \\?\ aparecem sem ele (só exibição). - e2e/web/showcase.mjs: estado fixo com todos os casos para capturas comparáveis e medida de renderização. E2E web (local, pt-BR e en): 114 verificações, nenhuma falha. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
…olagem única App Windows com a mesma estrutura da web: - Fila agrupada (CollectionView com grupo e ordem do motor); Concluídos recolhido por padrão com Limpar no cabeçalho do grupo. A lista só se reorganiza quando um jogo muda de grupo ou posição, para não recriar cartões a cada tique (animação da barra e foco preservados). - Cartão: título fixo (22/26 px), etiqueta de estado com ponto, números só quando dizem algo, compacto na fila e nos concluídos, fio de cor em 'precisa de você', 'Tentar de novo' com texto quando há erro. - Progresso total da fila e término previsto no cabeçalho. - Status do PS5 e 'Achei um PS5' no topo de todas as páginas. - Configurações com índice de seções (PS5, Destinos, Envio, Energia, Senhas, Avisos, Geral) que acompanha a rolagem. Rolagem das Configurações (web e Windows): uma rolagem só, com a barra na borda da janela. A caixa de senhas tinha barra própria no meio da tela; agora cresce com o conteúdo. Hierarquia mais clara: título de seção maior, subgrupos em versalete com fio. Teste WPF: abre o grupo Concluídos antes de ler o cartão de instalação solicitada e confere que ele começa recolhido. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
… fica preso
Desempenho: o SSE manda a fila inteira a cada mudança e render() reescrevia
todos os cartões. Agora cada cartão guarda a chave (idioma, grupo, senha
pendente, dados do jogo) e só é reescrito quando ela muda. Com 200 jogos e
uma barra andando: ~13 ms → ~2,2 ms por atualização (mediana, Chromium,
e2e/web/showcase.mjs).
Bug (reproduzido antes da correção): com a requisição de 'Testar conexão'
ou 'Procurar na rede' falhando (rede caiu, servidor reiniciando), o
resultado ficava preso em 'Testando…'/'Procurando o PS5 na rede…' e o
erro escapava sem tratamento ('Failed to fetch' x2 no console). Agora a
linha de status diz que o servidor não respondeu. Novo teste no E2E web.
Docs: capturas antes/depois e medidas em docs/redesign/, changelog
(Não lançado), READMEs (status do PS5 no topo) e resultado no plano.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
…ndows A CI do Windows falhou em 'Recuperação FTP e retomada' (cancel-replay): IOException 'being used by another process' em ResumeChecks.cs:76. File.ReadAllLines abre com FileShare.Read, que conflita com o FTP falso (Python) mantendo commands.txt aberto para escrita. Agora a leitura usa FileShare.ReadWrite e, se mesmo assim o arquivo estiver ocupado, tenta de novo. Sem mudança no produto; 44 verificações de retomada passam. Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
…t-BR e en) Co-Authored-By: Claude Opus 5.5 <[email protected]> Claude-Session: https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY
bps2414
marked this pull request as ready for review
October 14, 2026 01:07
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
Owner
Author
|
Status das falhas de CI desta PR:
Generated by Claude Code |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Redesenho da interface do Ferry (web e app Windows) seguindo o plano. A identidade da Fase 2 continua (visual escuro "PlayStation noir", Geist, acento azul, Fila "Régua" com a barra como travessia). O que muda é a hierarquia e a densidade de informação. No caminho apareceram quatro bugs; cada um foi reproduzido antes da correção (detalhes abaixo).
Antes × depois
Todas as capturas usam o mesmo estado (1 erro, 1 PKG enviado, 1 enviando, 1 pausado, 1 aguardando partes, 4 concluídos), gerado por
e2e/web/showcase.mjscontra o código original (fab0939) e contra esta branch. Arquivos emdocs/redesign/.Fila — desktop (1440×900)
0,0% / — / —. Só o ativo mostra %, MB/s e tempo restante; um cartão pausado mostra só o %.Concluídos aberto: desktop · celular
Fila — celular (390×844)
A página com 9 jogos tinha 2666 px e agora tem 1238 px. Marca e abas ficam numa linha, os cartões parados são compactos, o botão Adicionar arquivos fica fixo no rodapé (decisão sua) e os botões de ação têm alvo de 44 px.
Configurações
São seis seções (PS5, Destinos, Envio, Senhas conhecidas, Avisos, Geral; no Windows também Energia), com um índice fixo que acompanha a rolagem. O título de cada seção ficou maior e os subgrupos aparecem em versalete com fio. Sobre o que você relatou (rolagem estranha, barra de rolagem no meio da tela): agora há uma rolagem só, com a barra na borda da janela. A caixa de senhas cresce com o conteúdo em vez de rolar dentro do campo. Celular: antes · depois.
Inglês: fila antes · fila depois · configurações depois
O que mudou
Web (
web/ui,web/Hub.cs)jobIdno aviso (campo novo e opcional, compatível).Windows (
app/)CollectionView+QueueGroups), cartão compacto na fila e nos concluídos, progresso total, status no topo, Configurações com índice.Base comum
tools/tokens.jsongera as cores e medidas deapp.csseApp.xaml(tools/generate-tokens.py), e a CI acusa divergência. Antes os tokens eram copiados à mão e havia só um comentário dizendo "mesmos tokens".Bugs encontrados (reproduzidos antes de corrigir)
05-enviando.pngdo relatório antigotipo + jogo: um pedido repetido renova o aviso que já está na tela (depois, 1 aviso)medidas.jsonda vitrine/api/ps5/teste/api/ps5/discoverabortada (rede caiu): o resultado ficou em "Testando…"/"Procurando…" eFailed to fetchescapou 2× no consoletry/finallysemcatch: a promessa rejeitada não era tratada\\?\no caminho03-fila-vazia.pngdo relatório antigo (servidor rodando no Windows)\\?\e\\?\UNC\; o valor salvo não mudaInstabilidade nos testes (não é bug do produto):
ResumeChecksno Windows (CI desta PR) —IOException: being used by another processao lercommands.txt.File.ReadAllLinesabre comFileShare.Read, o que conflita com o FTP falso (Python) com o arquivo aberto para escrita. A leitura agora usaFileShare.ReadWritee tenta de novo se o arquivo ainda estiver ocupado. Os 44 testes de retomada passam.PkgChecksno Linux (uma rodada) —Scenario.Stopestourou 20 s após o cenário de persistência e concorrência. Esta PR não toca o core nem esse teste; no commit anterior, com o mesmo código, o job Linux passou inteiro. Fica registrado como intermitente fora do escopo desta PR.Desempenho
Medido no Chromium com
e2e/web/showcase.mjs: 200 jogos, 300 atualizações de progresso (o SSE manda até 4 por segundo), descartando as 20 primeiras como aquecimento.render()por atualização — medianarender()— p95Como ficou mais rápido: o SSE manda a fila inteira a cada mudança e a página reescrevia os 200 cartões. Agora cada cartão guarda uma chave (idioma, grupo, senha pendente e dados do jogo) e só é reescrito quando ela muda. Os concluídos recolhidos não entram no layout. O DOM ficou praticamente igual (9779 → 10026 elementos com 200 jogos, por causa dos cabeçalhos de grupo e da etiqueta de estado). No Windows, a lista agrupada não é recriada a cada tique (ver acima).
As Configurações ficaram mais longas em altura total (1693 → 3514 px no desktop), porque agora são uma coluna só com seções maiores. O índice leva direto a cada seção.
Validação
e2e_report_web_*.mdee2e/web/report/.tools/generate-tokens.py --check; WPF compila comEnableWindowsTargeting.Limites e desvios do plano
.exedo artefato Ferry-windows e olhar a Fila e as Configurações.Como revisar
dotnet build web -c Release && cd e2e/web && node showcase.mjs.🤖 Generated with Claude Code
https://claude.ai/code/session_01BEiC6BEuxS2kyr9BuYYeJY