teqo-backup/docs/plans/matar-guarda-tooltip-provider.md
2026-08-02 13:40:58 -03:00

4.8 KiB
Raw Permalink Blame History

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)', …) de codebaseConventions.unit.spec.ts por 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.md se a guarda estiver listada; senão nota no PR + referência à Issue.
  • Guardrails: sem migration; não mover o TooltipProvider neste item (layout fica como está).
  • Tracer bullet: delete do describe → pnpm gate:fast verde → 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 TooltipProvider no 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 B102
  • src/app/(campaign)/campanha/(app)/layout.tsx — TooltipProvider atual
  • Issues #129 (B102), #133, #135 (miss)
  • tests/unit/campaignQuickActionsDrawer.unit.spec.tsx — pins comportamentais esperados