mirror of
https://github.com/fsolla/teqo.git
synced 2026-11-14 17:43:04 +00:00
98 lines
4.8 KiB
Markdown
98 lines
4.8 KiB
Markdown
# 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
|
||
|
||
```tsx
|
||
<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
|
||
|
||
```mermaid
|
||
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
|