Files
Rafael MelgaçoandClaude Opus 5 cceb4ba996 feat(relatorio): o relatório de atividades ganha número próprio, teste de isolamento e espanhol
O que o commit `wip` deixou pronto nunca foi medido — este é o passe que
mede. Quatro coisas mudaram:

**O número.** A migration nascera `0208` no cabeçalho e virara `0212` no
nome do arquivo, e o `0212` já é do PR #553 (`o_email_do_convidado`), como
o `0208` é do #565 e do #569, o `0209` da extração `418-lote`, o `0210` do
#546 e o `0211` do #548. Conferido varrendo os NOMES de arquivo de TODAS as
refs remotas, não só as da `main` — com controle positivo (a mesma sonda
acha o `0212` em duas branches). Sobra `0215`, e o carimbo
`20260904193000` não colide com nenhum outro em nenhuma branch.

**O teste de isolamento que o cabeçalho da migration já prometia** e que não
existia: `tests/invariants/relatorio-de-atividades.test.ts`. O caso que ele
mede não é a pessoa de UMA organização — para essa, a RLS sozinha zera
qualquer `p_org` forjado, e apagar o filtro de dentro da função passaria
despercebido. É a pessoa das DUAS (`user_organizations` é N:N): a RLS abre
as duas para ela, e o único a decidir qual o relatório soma é o
`organization_id = p_org`. Sem ele, "o que a equipe fez esta semana" na
organização A vem com o trabalho da B dentro, sem erro na tela.

**O `organization_id` escrito na consulta de `ai_agents`** da rota. Era a
única consulta do relatório que terceirizava o recorte à RLS — mesma
classe do parágrafo acima, e a doutrina manda dizer o inquilino em voz alta.

**O espanhol das 16 frases da tela nova**, que `i18n-espanhol-cobre-a-tela`
cobrava: sem elas a tela abria metade em português para quem escolheu
espanhol.

Extraído da contribuição de James, da Clínica Centro do Sorriso
(@clinicacentrodosorrisosc-code), PR #418.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017DC6uq5V26S13UxfaBaYKQ
2026-09-04 18:06:19 -03:00
..