Repository navigation
Lista inline de enquetes: atualiza a contagem da opção votada e adiciona o rótulo "Opções" - #475
Merged
Merged
Conversation
…"Options" Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfaAiU3k8WXCosafjCDWWt
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01PfaAiU3k8WXCosafjCDWWt
pedro-hdias
reviewed
Oct 12, 2026
pedro-hdias
left a comment
Collaborator
There was a problem hiding this comment.
Review do PR #475: Lista inline de enquetes (Atualização de votos e rótulo "Opções")
Revisão técnica realizada com base nas diretrizes do repositório (CLAUDE.md) e nas habilidades em .agents/skills (accessible-ui, i18n-ui-string, write-test, extract-from-god-file, wppconnect-patch).
1. Status de CI & Catálogos de Tradução (i18n-ui-string / CLAUDE.md Regra 2) ❌ Bloqueante
- Falha no CI: O job
Run test suitefalhou no testetests/test_gettext_catalogs.py::test_all_authoritative_po_translations_match_runtime:ValueError: Stale catalogs: winzapp.pot, en-US/LC_MESSAGES/winzapp.po; run python -m winzapp_tools.translations update - Causa: Conforme mencionado na descrição do PR, os catálogos
.poe.potforam editados manualmente. O fluxo oficial de gettext do repositório (CLAUDE.md) exige:- Inserir
msgctxt "poll_inline_options_label"emsgid "Options"no PO de referência (translations/en-US/LC_MESSAGES/winzapp.po). - Executar
python -m winzapp_tools.translations update(ouuv run translations-update) para sincronizar metadados e assinaturas do template.pote de todos os.po. - Preencher as traduções em cada catálogo.
- Executar
python -m winzapp_tools.translations compile(ouuv run translations-compile) para compilar os binários.moe atualizarclient/languages/winzapp.keys. Em builds congeladas (frozen/release),translation_catalog.pylê diretamente esses arquivos; sem a compilação, o aplicativo exibe o nome cru da chave (poll_inline_options_label).
- Inserir
2. Acessibilidade e Leitor de Telas (accessible-ui) ⚠️ Ressalva Conceitual
-
StaticText e Ordem de Foco (Tab):
- Na descrição do PR e nos changelogs, afirma-se:
"um StaticText 'Opções' precede a lista, sendo o primeiro item focável com Tab depois da lista de mensagens quando uma enquete está selecionada."
- Comportamento real no Windows/wxWidgets: Controles nativos
wx.StaticText(STATIC) não possuemWS_TABSTOPe não aceitam foco de teclado (AcceptsFocus()éFalse). Portanto, pressionar Tab a partir da lista de mensagens pula diretamente o texto estático e cai no_poll_inline_list(wx.ListCtrl). - Nome acessível do controle: Isso não prejudica a acessibilidade de navegação porque o próprio
_poll_inline_listjá define seu nome acessível em_create_inline_poll_list:Ao receber o foco via Tab, o leitor de tela (NVDA/JAWS) já anuncia "Opções da enquete" / "Poll options".lst.SetName(self.main_window.i18n.t("new_poll_options_list_label").rstrip(":"))
- O
wx.StaticTextserve como um rótulo visual útil para usuários videntes e é legível via cursor de exploração/toque, mas o texto da descrição do PR e do changelog em inglês ("it is now announced with the label 'Options' before it") deve ser ajustado para não induzir a erro sobre o fluxo de navegação por Tab.
- Na descrição do PR e nos changelogs, afirma-se:
-
Atualização em tempo real de votos (
_reload_inline_poll):- A lógica em
_reload_inline_pollestá correta:- Removeu o retorno prematuro quando
wx.Window.FindFocus() is lst. - Utiliza
Freeze()eThaw()protegidos por blocotry/finallyconforme orientaaccessible-ui. - Reescreve exclusivamente as linhas cujo texto foi alterado (
if lst.GetItemText(index) != text:), evitando que o leitor de tela repita linhas inalteradas.
- Removeu o retorno prematuro quando
- A lógica em
3. Testes Automatizados (write-test / CLAUDE.md Regra 1) ✅ Aprovado
- O teste adicionado em
tests/test_polls.py(TestInlineReload):- Utiliza a Rota 2 da skill
write-test(método desacoplado contra stubs enxutos_TextListeSimpleNamespace). - Não instancia janelas reais do wx, preservando a Regra 1 do
CLAUDE.md(testes nunca abrem janelas para não interferir com o leitor de tela dos mantenedores). - Cobre a atualização dos percentuais e garante idempotência (nada é reescrito se os votos não mudarem).
- Todos os 58 testes de
tests/test_polls.pypassam perfeitamente.
- Utiliza a Rota 2 da skill
4. Modularidade e God Files (extract-from-god-file) ✅ Aprovado
- As modificações permaneceram contidas no mixin modular
client/ui/conversation_panel/poll_inline.py. - Nenhum god file (
main.py,conversations.py) cresceu desnecessariamente.
5. Changelogs & Base da Branch (CLAUDE.md) ℹ️ Recomendação
- As entradas de changelog foram incluídas nos 7 idiomas sob a versão não lançada
V2.1.0.0. - A branch
claude/poll-inline-fixesfoi criada antes do merge do PR #474 (aac655d0). Recomenda-se fazer o rebase/merge com amainatualizada para garantir que o CI execute sobre o código mais recente.
Conclusão e Próximos Passos
A solução para a contagem de votos inline está muito bem implementada e o teste unitário segue o padrão do projeto. Para aprovação e merge:
- Executar o fluxo padrão de gettext (
translations update+ tradução +translations compile) e commitar as atualizações para corrigir o teste no CI. - Atualizar o texto da descrição do PR e do changelog corrigindo a menção de que o
StaticTextseria focável por Tab.
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.
Requested by Gabriel · project thread
Before: ao marcar uma opção na lista inline de uma enquete, o voto era enviado, mas a linha votada continuava com a contagem antiga (a atualização era ignorada enquanto a lista tinha o foco). A lista também não tinha nenhum texto antes dela.
After: a linha mostra a nova contagem e porcentagem logo após o voto, e um StaticText "Opções" precede a lista, sendo o primeiro item focável com Tab depois da lista de mensagens quando uma enquete está selecionada.
How:
_reload_inline_polldeixa de sair cedo quando a lista tem o foco (só reescreve as linhas cujo texto mudou). Novo rótulopoll_inline_options_label(mostrado e escondido junto com a lista) em todos os idiomas, mais teste e entrada no changelog da versão ainda não lançada em todos os idiomas. Os catálogos foram editados à mão no formato dotranslations-update, que não pôde ser executado aqui.🤖 Generated with Claude Code
https://claude.ai/code/session_01PfaAiU3k8WXCosafjCDWWt
Generated by Claude Code