4.8 KiB
Matar guarda JSX de nesting TooltipProvider (B102)
Status: registrado
Atualizado em: 2026-08-02
Issue: #242 (OPS15)
Priority: P2
Model: composer-2.5
Impeccable: A — N/A (sem superfície UI; remover convention spec)
Appetite: ~0,25 dia eng; apagar um describe + atualizar GUARDRAILS; sem migration
Responsável: —
Dados → decisão → apresentação
Dados: N/A — remoção de guardrail frágil; sem métrica de produto.
Contexto
B102 (#129 / miss #133/#135): o drawer de ações rápidas monta como irmão do scrollport dentro de CampaignAppScrollChrome. TooltipProvider só em volta de {children} deixava focus→suggest (hits priority:alta → CampaignHoverTooltip) sem provider → crash da página.
Fix real: elevar o provider para envolver CampaignAppScrollChrome no layout (app).
Guarda adicionada em tests/unit/codebaseConventions.unit.spec.ts (campaign TooltipProvider wraps quick-actions chrome (B102)): regex que exige
<TooltipProvider>
…<CampaignAppScrollChrome>…</CampaignAppScrollChrome>…
</TooltipProvider>
e proíbe o nesting invertido no source de layout.tsx.
Problema (review 2026-08-02, item 5): o pin congela forma JSX incidental. Agentes satisfazem a regex com wrappers estranhos; um refactor legítimo (provider dentro de um shell component que já envolve o chrome) quebra o build sem regressão; a proteção real do crash já está (ou deve estar) nos pins comportamentais de focus→suggest / type→search com hits prioritários (campaignQuickActionsDrawer unit + e2e da miss).
Pedido: matar esta guarda — sem substituto source-shape.
Objetivos
- Remover o
describe('campaign TooltipProvider wraps quick-actions chrome (B102)', …)decodebaseConventions.unit.spec.tspor completo. - Confirmar que os pins comportamentais da regressão B102/miss (#133/#135) permanecem (unit drawer focus→suggest com hit prioritário; e2e se existir). Se algum tiver sido apagado, restaurar nesse PR — a remoção da guarda source só é segura com a rede comportamental viva.
- Atualizar
docs/GUARDRAILS.mdse a guarda estiver listada; senão nota no PR + referência à Issue. - Guardrails: sem migration; não mover o
TooltipProviderneste item (layout fica como está). - Tracer bullet: delete do describe →
pnpm gate:fastverde → checklist dos pins comportamentais no body do PR.
Decisões travadas
- Delete da guarda source-shape; não “afrouxar” a regex. Opções: A) delete | B) mover o pin para outro arquivo/componente | C) ESLint react-tree. Recomendação: A. O valor está no pin de crash (comportamento), não na árvore textual do layout. Rejeitado: B/C (mesmo cheiro / appetite).
- Não adicionar judgment-only substituto obrigatório além de uma linha em GUARDRAILS/CHANGELOG se útil — o layout comentado + pins de miss bastam.
- Kind:
chore(OPS15). - i18n: N/A.
Questões em aberto
- Onde documentar “provider deve envolver o chrome do drawer”? Opções: A) só comentário no layout | B) GUARDRAILS judgment-only | C) nada. Recomendação: A (já deve existir contexto B102 no layout); B só se a linha já existir e precise de “removido”. (assumido)
Abordagem proposta
flowchart LR
check["Ver pins unit/e2e B102"] --> del["Apagar describe nesting"]
del --> docs["GUARDRAILS se listado"]
docs --> gate["gate:fast"]
Componentes:
tests/unit/codebaseConventions.unit.spec.ts: remover o bloco B102 (~L671–688).- Verificação:
rg TooltipProvider|priority:alta|CampaignHoverTooltip tests/unit tests/e2e— garantir cobertura comportamental; restaurar se faltar. docs/GUARDRAILS.md: remover/ajustar linha se houver.- Migration: nenhuma.
Dependências
- Nenhuma dura. Independente de OPS13/OPS14.
- Soft: Issues #129 / #133 / #135 (histórico da miss) — só referência.
Não escopo
- Mudar posição do
TooltipProviderno layout. - Reabrir investigação do crash.
- OPS13/OPS14.
Rabbit holes
- "Substituir por teste de árvore React renderizada do layout." Layout é RSC/async — painel de dor; os pins do drawer já exercitam o caminho. Mitigação: não.
- Aproveitar para “limpar” outros describes do conventions. Fora de escopo.
Adiado com gatilho
- Pin e2e dedicado se unit do drawer for flaky. Revisitar só com evidência de regressão pós-remoção.
Referências
- GitHub Issue #242 (OPS15)
- Review de guardrails (chat 2026-08-02) — item 5
tests/unit/codebaseConventions.unit.spec.ts— describe B102src/app/(campaign)/campanha/(app)/layout.tsx— TooltipProvider atual- Issues #129 (B102), #133, #135 (miss)
tests/unit/campaignQuickActionsDrawer.unit.spec.tsx— pins comportamentais esperados