Tarefa
📝 **Pergunta:** **Escreva a função** \`safe_search(query, filter)\` que protege um RAG multilocatário contra a classe de vazamento nº 1 — um filtro \`tenant_id\` ausente.
Regras:
- Se \`filter\` não é um dict → raise \`ValueError("filter must be a dict")\`.
- Se \`tenant_id\` estiver ausente OU vazio/falso → raise \`ValueError("SEGURANÇA: o filtro tenant_id é obrigatório e não vazio")\`.
- Caso contrário, retorne \`f"OK | {query!r} com escopo para o locatário {filter['tenant_id']!r}"\`.
Em seguida, execute-o em quatro formas de solicitação (duas reais, duas inseguras):
\`\`\`
OK | 'política de reembolso' com escopo para o inquilino 'acme'
BLOQUEADO | 'tabela salarial' | SEGURANÇA: o filtro tenant_id é obrigatório e não vazio
OK | 'histórico de pedidos' com escopo para o inquilino 'globex'
BLOQUEADO | 'Chaves de API' | SEGURANÇA: o filtro tenant_id é obrigatório e não vazio
\`\`\`
O caso da string vazia é o sorrateiro - \`"tenant_id" in filter\` passaria, mas \`filter.get("tenant_id")\` retorna falso. **Sempre verifique a veracidade, nunca apenas a presença de chave.** Um frontend mal configurado padronizando \`tenant_id\` para \`""\` causou vazamentos entre inquilinos no mundo real.
📋 Escolha a resposta certa.
💡 **Dica:** Releia a teoria acima se não tiver certeza.