fix(team): revogar e devolver acesso pintam a linha na hora - #719
fix(team): revogar e devolver acesso pintam a linha na hora#719paulolimajr77 wants to merge 3 commits into
Conversation
Achado pela tela: a linha ficava parada ate alguem recarregar a pagina, e quem clicava nao via nada acontecer. Antes o defeito era INVISIVEL: o revogado sumia da lista (a rota o filtrava fora), entao qualquer atraso parecia efeito. Agora que a linha FICA e so o estado muda, a atualizacao precisa ser imediata — senao a tela mente sobre o que acabou de acontecer. Mesmo desenho de `useChangeRole`, que o produto ja usava para troca de papel: pinta na hora, desfaz se o servidor recusar, reconcilia no fim. Sem o desfazer, uma recusa deixaria a tela dizendo "ativo" para quem o servidor nao reativou — pior que nao ter atualizado. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Revogar avisava; devolver nao. Achado pela tela: quem clicava ficava sem confirmacao, e essa e justamente a acao que se faz com receio de ter errado. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
As duas correcoes deste PR mudam comportamento e nenhum teste cobria os
hooks — `useRevokeMember` e `useReactivateMember` nao eram citados por
arquivo de teste nenhum.
O momento e o ponto. `apiClient.post` fica PENDENTE de proposito nos casos
de pintura: assertar o cache depois que a promessa resolve nao distingue
"pintou na hora" de "recarregou no fim", que e exatamente o defeito. Quem
tirar o `onMutate` e deixar so o `invalidateQueries` passaria numa
asseracao feita tarde demais.
O desfazer e cobrado junto: pintar sem rollback e pior que nao pintar —
deixaria a tela dizendo "ativo" para quem o servidor recusou reativar.
Sabotado, com previsao antes de rodar:
- `onMutate` fora de useRevokeMember -> previ 2 de 6; caiu 2 de 6
- `onSuccess` (o aviso) fora de
useReactivateMember -> previ 1 de 6; caiu 1 de 6
Cobre o CACHE, que e o que a linha le. Nao cobre pixel.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
|
@paulolimajr77 is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel. A member of the Team first needs to authorize it. |
ECC Tools / Security EvidenceCommit: Security scanner evidence required (action_required) Detected 1 security-sensitive predictive risk signal(s) without scanner evidence. Mode: enforce Findings:
Touched security-sensitive paths:
Expected evidence:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / PR Risk TaxonomyCommit: PR taxonomy review recommended (neutral) Detected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation. Scanned 5 changed file(s). Roadmap taxonomy buckets: Security EvidenceSecurity-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence. Signals:
Paths:
CI/CD RecommendationCI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work. Signals:
Paths:
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Reference Set ReadinessCommit: Reference set readiness gaps detected (neutral) Reference evidence present for 0/7 areas (0%) across 5 changed file(s). This check is based on files changed in this PR. Repository-level readiness is still reported by
Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
ECC Tools / Hosted Promotion ReadinessCommit: Hosted promotion readiness passed (success) No hosted promotion evidence gaps detected across 5 changed file(s); 0 corpus scenarios had matching evidence. This check compares PR file changes against the evaluator/RAG promotion corpus in No evaluator corpus scenarios matched this PR. Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission. |
|
Recebido, @paulolimajr77 — obrigado por isto. Duas coisas que vão parecer erro seu e não são:
Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem |
|
Recebido — obrigado. Duas coisas que vão parecer erro seu e não são:
Um aviso útil: a Vou revisar de verdade — rodando os gates e reproduzindo o comportamento, não só lendo o diff — e volto com o resultado. Se eu achar algo, venho com a medição junto, nunca com um "acho que". |
Achado pela tela, usando o produto: em Equipe › Membros, revogar o acesso de alguém — ou devolvê-lo — deixa a linha da pessoa parada até recarregar a página. Quem clica não vê nada acontecer e clica de novo.
Antes o defeito era invisível: o revogado sumia da lista (a rota o filtrava fora), então some-ou-não-some já era resposta suficiente. Desde que ele passa a ficar na lista com o estado mudado, uma linha que não muda é uma tela mentindo sobre o que acabou de acontecer.
Mesmo desenho de
useChangeRole, que o produto já usa para troca de papel: pinta na hora, desfaz se o servidor recusar, reconcilia no fim. Sem o desfazer seria pior que não pintar — a tela ficaria dizendo "ativo" para quem o servidor recusou reativar.O segundo commit fecha o par que faltava: revogar avisava, devolver não. É justamente a ação que se faz com receio de ter errado — sem confirmação, quem clicou não sabe se valeu.
O que medi
Nenhum teste cobria esses hooks —
useRevokeMembereuseReactivateMembernão eram citados por arquivo de teste nenhum. Escrevitests/unit/team-revogacao-pinta-na-hora.test.tsx(6 casos).apiClient.postfica pendente de propósito nos casos de pintura: assertar o cache depois que a promessa resolve não distingue "pintou na hora" de "recarregou no fim" — que é exatamente o defeito. Quem tirar oonMutatee deixar só oinvalidateQueriespassaria numa asserção feita tarde demais.O rollback é cobrado junto, e o caso de erro assere também que não houve comemoração.
Sabotagem conferida, com previsão escrita antes de rodar:
onMutatefora deuseRevokeMemberonSuccess(o aviso) fora deuseReactivateMemberCobre o cache, que é o que a linha lê. Não cobre pixel.
Gates na prévia do merge:
typecheck0,lint0 erros,lint:channelsok, testes da área 29/29. Pré-voo do guia de contribuição: tudo verde.O que NÃO medi
pnpm test:unitinteiro nesta branch🤖 Generated with Claude Code