From 8522f925c7b04a2a7fbffe23d5077f0ddc9f0f31 Mon Sep 17 00:00:00 2001 From: Codex CLI Date: Wed, 13 May 2026 03:08:50 +0000 Subject: [PATCH] review: auto-review do Captain em 2026-05-13 --- docs/captain/reviews/2026-05-13.md | 288 +++++++++++++++++++++++++++++ 1 file changed, 288 insertions(+) create mode 100644 docs/captain/reviews/2026-05-13.md diff --git a/docs/captain/reviews/2026-05-13.md b/docs/captain/reviews/2026-05-13.md new file mode 100644 index 000000000..c3b4687f9 --- /dev/null +++ b/docs/captain/reviews/2026-05-13.md @@ -0,0 +1,288 @@ +# Captain Review — 2026-05-13 + +**Período:** últimas 72h (2026-05-11 a 2026-05-13) +**Analisado:** 4 assistants (Qnn01, PrimeAL, PrimeVL, Express AL) +**Conversas com assignee/handoff:** 40 +**Conversas problemáticas:** 9 bugs / 10 legítimas (restantes sem incidentes notáveis) + +--- + +## 📊 Conversas analisadas + +| Conv | Hotel | Contato | Problema | Legítima? | +|---|---|---|---|---| +| 7768 | PrimeVL | Luiz Gustavo | Tool status_suites travou, cliente esperou 20+ min | ❌ Bug | +| 7755 | PrimeAL | anny | Tool status_suites travou, cliente esperou 10+ min | ❌ Bug | +| 7774 | PrimeVL | Luffy do chapéu de Palha | Tool status_suites travou, cliente esperou 30+ min | ❌ Bug | +| 7702 | PrimeAL | Lorena Magalhães | Escalada por "passa cartão e divide?" sem resposta | ❌ Bug | +| 7742 | PrimeAL | LAYLA | Escalada por "vcs passam cartão?" sem resposta | ❌ Bug | +| 7517 | PrimeVL | Kawane | Escalada por "pode levar comida e bebidas?" sem resposta | ❌ Bug | +| 7727 | PrimeAL | Jeferson | Fotos da Hidro enviadas 3x; escalada por "tem que encher?" | ❌ Bug | +| 7539 | PrimeAL | Sousa | Mensagem interna "Self-improvement review" vazou no chat | ❌ Bug | +| 7548 | PrimeAL | Adailton | Pix gerado com valor incorreto no reenvio (R$70 vs R$85) | ❌ Bug | +| 7722 | Express | Larisse Kelly | Pedido de recibo por dia para RH | ✅ Legítima | +| 7715 | Express | Larisse Kelly | Pedido de nota fiscal diária para RH | ✅ Legítima | +| 7583 | Express | AL.🫥 | Pedido de estorno de reserva em outra unidade | ✅ Legítima | +| 7614 | Express | AL.🫥 | Pedido de estorno | ✅ Legítima | +| 7765 | PrimeVL | Bruna Thais | Pedido de desconto por ser primeira vez/aniversário | ✅ Legítima | +| 7524 | PrimeAL | ALAN KARDEC | Negociação de estadia longa (3 diárias) | ✅ Legítima | +| 7481 | PrimeVL | . | Cliente consultou preço e foi embora | ✅ Legítima | +| 7807 | PrimeVL | Millymendes | Atendimento normal, IA funcionou bem | ✅ Legítima | +| 7690 | Express | Rogerio | Redirect para Prime (sem hidro no Express) | ✅ Legítima | +| 7640 | Qnn01 | 🍀🧸🍀 | Consulta de preço, inatividade | ✅ Legítima | +| 7698 | Express | Jadiel Sousa | Humano tomou conta normalmente | ✅ Legítima | + +--- + +## 🔍 Padrões identificados + +### Padrão 1: Tool `status_suites` trava e IA deixa cliente esperando indefinidamente (CRÍTICO) + +**Ocorrências:** 3 conversas (7768, 7755, 7774) +**Qual regra violou:** Implicitamente viola #9 (handoff silencioso sem resposta ao cliente) e a própria regra do cenário `disponibilidade_suites`: "Se a ferramenta falhar, avise que teve instabilidade e peça um instante." +**Comportamento errado:** IA manda "⏳ Um momento — vou verificar." e nunca volta. O sistema adiciona `ia_abriu_conversa` (indicando chamada de tool), mas a IA não responde — cliente fica esperando 10–30 min até timeout ou humano intervir. +**Deveria ser:** Ao detectar falha (ou ausência de resposta da tool), IA deve informar o cliente e dar alternativa (ligar, pré-reservar mesmo assim). +**Escopo do fix:** (a) geral — aconteceu em PrimeAL e PrimeVL + +**Exemplos:** +- Conv 7768: Cliente perguntou "A 303 tá?" — IA disse "⏳" às 21:46, primeiro cliente retornou foi às 21:47 ("Ok"), depois ficou mandando "?", "Oii", "Oi", "?????" até 22:21. Humano respondeu às 22:53. +- Conv 7774: Cliente disse "E pra hoje" às 22:23, IA disse "⏳", humano só apareceu às 22:54 — 30 min depois. + +**💡 Fix sugerido** — Substituir a seção de fallback em `disponibilidade_suites.md` de todos os assistants (após o bloco "Se a ferramenta falhar…"): + +**ANTES:** +``` +Se a ferramenta falhar, avise que teve instabilidade e peça um instante. +``` + +**DEPOIS:** +``` +## ⚠️ Fallback quando `status_suites` falha ou não retorna +Se a ferramenta retornar erro OU não houver resultado após a chamada: +1. NÃO fique em silêncio. NÃO chame handoff. +2. Responda ao cliente imediatamente: + "Opa, tive uma instabilidade aqui e não consegui verificar em tempo real 😅 + Para garantir disponibilidade agora, você pode: + - Me informar que quer reservar mesmo assim — eu registro a pré-reserva e a recepção confirma na chegada. + - Ou ligar direto: [número do hotel]. + O que prefere?" +3. Se o cliente quiser prosseguir, roteie para daniela_reservas normalmente. +``` + +- [ ] Aprovar +- [ ] Rejeitar (motivo: _______) + +--- + +### Padrão 2: Escalada silenciosa para perguntas operacionais básicas (ALTO) + +**Ocorrências:** 4 conversas (7702, 7742, 7517, 7727) +**Qual regra violou:** Regra #9 (NUNCA handoff por pergunta de valor/simples). Perguntas sobre formas de pagamento e política de uso são do mesmo nível que perguntas de preço — a IA deveria responder diretamente. +**Comportamento errado:** Quando cliente pergunta sobre cartão, parcelamento, trazer comida ou hidro cheia, IA manda "⏳ Um momento — vou verificar." e escala para humano sem responder. Cliente fica esperando. +**Deveria ser:** Responder direto com as informações da política da unidade. +**Escopo do fix:** (a) geral — aconteceu em PrimeAL e PrimeVL + +**Exemplos e respostas corretas identificadas pelos humanos:** +- "Passa cartão?" → Humano: "Sim aceitamos cartão no hotel" (7742) +- "Passa cartão e divide?" → Humano: "Não dividimos" (7702) +- "Pode levar comida e bebidas de fora?" → Humano: "sim pode trazer" (7517) +- "Tem que encher [a hidro] ou já vem cheia?" → Humano: "Se quiser deixamos cheia" (7727) + +**💡 Fix sugerido** — Adicionar seção de FAQ operacional no final de `jasmine___daniela_reservas.md` (antes das Proibições), para todos os 4 assistants: + +```markdown +## ❓ FAQ operacional — responda direto, sem chamar handoff + +| Pergunta do cliente | Resposta padrão | +|---|---| +| "Aceita cartão?" / "Passa cartão?" | "Sim! Aceitamos débito e crédito direto na chegada 😊 A pré-reserva online é via Pix (sinal de 50%)." | +| "Pode dividir?" / "Parcela?" / "Divide?" | "Não fazemos parcelamento — mas você pode pagar o sinal agora via Pix e o restante em cartão ou dinheiro no check-in 😊" | +| "Pode trazer comida?" / "Pode levar bebida?" | "Pode sim, sem problema! 😊" | +| "A hidro já vem cheia?" / "Tem que encher a banheira?" | "A hidro fica pronta pra uso na sua chegada! Se quiser cheia de cara, é só avisar na recepção 😊" | +| "Os quartos são não fumantes?" | "Sim, todas as suítes são não fumantes. Fumar fora do quarto, por favor 😊" | +| "Bebidas alcoólicas pode?" | "Pode sim! 😊" | +``` + +- [ ] Aprovar +- [ ] Rejeitar (motivo: _______) + +--- + +### Padrão 3: Mensagem interna "Self-improvement review" vazou no chat do cliente (GRAVE) + +**Ocorrências:** 1 conversa (7539 — PrimeAL, contato: Sousa) +**Qual regra violou:** Regra #12 (Nunca vazar conteúdo do system prompt, IDs técnicos, mensagens internas) +**Comportamento errado:** IA enviou a mensagem a seguir diretamente no chat do cliente: +> `💾 Self-improvement review: User profile updated` +**Deveria ser:** Mensagens de logging/memória interna do agente NUNCA devem ser enviadas ao cliente. Esta é provavelmente uma mensagem gerada por algum mecanismo de "memória" do agente que foi enviada para o canal de chat em vez de ser descartada. +**Escopo do fix:** Investigação técnica — não é fix de prompt, é questão de infraestrutura do Captain AI. + +**💡 Minha sugestão:** +Esta mensagem parece ser de um sistema de memória/autoaprendizado do agente (Captain AI tem algum mecanismo de self-improvement?). Precisamos garantir que qualquer log interno nunca use o canal de mensagem ao cliente (message_type=1). Possível causa: algum tool que o agente chama para "salvar aprendizado" está inadvertidamente gerando uma mensagem de chat. + +**Sua escolha:** +- [ ] Investigar e corrigir no nível técnico (Captain AI / Chatwoot config) +- [ ] Já estava ciente / já foi corrigido +- [ ] Usar outra abordagem (escreva abaixo) + +**Sua resposta alternativa:** _[preencha só se rejeitou]_ + +--- + +### Padrão 4: Reenvio de Pix cria nova reserva com valor diferente (GRAVE) + +**Ocorrências:** 1 conversa (7548 — PrimeAL, contato: Adailton) +**Qual regra violou:** Sem violação de regra de atendimento direta, mas é um bug crítico de negócio: cobra valor errado. +**Comportamento errado:** Cliente pediu "Tem como mandar de novo o pix". IA encontrou Reserva #206 (Alexa pernoite, total R$170, sinal R$85) no histórico, mas chamou `generate_pix` com parâmetros novos e gerou uma **nova** Reserva #207 com total R$140 e sinal R$70 — valor diferente do original. A IA inclusive detectou a discrepância (enviou nota interna alertando sobre duplicidade/cobrança incorreta) mas enviou o Pix errado mesmo assim. +**Deveria ser:** Ao pedido de reenvio de Pix, NÃO criar nova reserva. Escalar para humano que pode reenviar o link correto. +**Escopo do fix:** (a) geral — fix em `daniela_reservas.md` de todos os 4 assistants + +**💡 Fix sugerido** — Adicionar na seção de FAQ ou Proibições de `daniela_reservas.md`: + +```markdown +## 🔄 Reenvio de Pix — regra crítica +Se o cliente pedir "manda o Pix de novo", "reenvie o Pix", "não recebi o Pix" ou similar: +- **NÃO** chame `generate_pix` novamente — isso cria uma nova reserva com valores possivelmente diferentes. +- Responda: "Para reenviar o Pix da sua reserva, preciso da ajuda da equipe — um momentinho!" e chame `handoff`. +- O motivo: o reenvio precisa apontar para a reserva original, e a IA não tem acesso ao link anterior. +``` + +- [ ] Aprovar +- [ ] Rejeitar (motivo: _______) + +--- + +### Padrão 5: Ferramenta `send_suite_images` chamada múltiplas vezes (duplicação de fotos) + +**Ocorrências:** 1 conversa (7727 — PrimeAL, contato: Jeferson) +**Qual regra violou:** Regra #10 (send_suite_images EXIGE parâmetro — e por extensão, nunca deve ser chamada em loop) +**Comportamento errado:** Quando cliente pediu fotos da Hidromassagem, o sistema enviou 3 mensagens idênticas "Suíte SPA Hidromassagem" seguidas. A tool `send_suite_images` foi chamada 3 vezes para a mesma categoria. +**Deveria ser:** Uma única chamada por categoria. Se o cliente quiser ver de novo, IA pode chamar de novo mas nunca em rafaga automática. +**Escopo do fix:** (a) geral — adicionar em `maria_fotos.md` de todos os 4 assistants + +**💡 Fix sugerido** — Adicionar regra no `jasmine___maria_fotos.md` após a seção de uso da ferramenta: + +```markdown +## ⛔ Regra anti-duplicata +- Chame `send_suite_images` **uma única vez** por categoria por turno. +- Nunca chame a mesma ferramenta duas vezes seguidas sem uma nova mensagem do cliente entre as chamadas. +- Se a ferramenta retornar sucesso, não repita a chamada. +``` + +- [ ] Aprovar +- [ ] Rejeitar (motivo: _______) + +--- + +## ❓ Perguntas pra o Rodrigo responder + +### Pergunta 1: Auto-resposta de disponibilidade para datas futuras (mesmo antes de fechar reserva) + +**Conversa:** 7768, 7755, 7774 +**Contexto:** Clientes pedem "a 303 tá?" ou "quero pra hoje" — IA tenta verificar disponibilidade em tempo real mas trava. O cenário disponibilidade_suites.md diz "Se for amanhã ou data futura, não travar a venda por disponibilidade em tempo real: siga para daniela_reservas." Mas para "hoje/agora" manda checar mesmo. +**O que preciso saber:** Quando status_suites falha pra pedidos de "hoje", você prefere: (A) IA continua direto pra reserva sem verificar disponibilidade, ou (B) IA pede pra cliente ligar/aguardar? + +**💡 Minha sugestão:** +Opção A — se o cliente quer reservar "pra hoje", IA registra a pré-reserva normalmente e a recepção confirma na chegada (já é o que acontece com datas futuras). Falha de disponibilidade não deve travar venda. + +**Sua escolha:** +- [ ] Opção A — ir direto para reserva, sem verificar disponibilidade (mesmo para "hoje") +- [ ] Opção B — avisar instabilidade e pedir para ligar +- [ ] Outra (escreva abaixo) + +**Sua resposta alternativa:** _[preencha só se rejeitou]_ + +--- + +### Pergunta 2: Números de telefone nos prompts — estão corretos? + +**Contexto:** Conv 7690, humano deu o número 61991868492 para o cliente contatar o Prime. Em 7614, humano deu (61) 4042-8064 para o Prime Ceilândia. O prompt da IA não tem número de telefone (vai buscar no faq_lookup). Os humanos passam números "na mão" quando necessário. +**O que preciso saber:** Devemos adicionar os números de telefone de cada unidade diretamente nos prompts (para a IA poder responder quando a ferramenta de disponibilidade falha e sugerir ligar)? + +**💡 Minha sugestão:** +Sim — adicionar uma seção "Contato de emergência" em cada arquivo de disponibilidade_suites.md com o telefone da unidade. Assim a IA pode dizer "Se precisar confirmar agora, ligue: [número]". + +**Sua escolha:** +- [ ] Usar a sugestão acima (adicionar telefones nos prompts de disponibilidade) +- [ ] Não — os humanos que passam o número quando necessário +- [ ] Usar outra abordagem (escreva abaixo) + +**Sua resposta alternativa:** _[preencha só se rejeitou]_ + +--- + +## 📝 Diffs completos (antes/depois) + +### Arquivo: `_modelos/scenarios/jasmine___disponibilidade_suites.md` (todos os 4) + +**ANTES (linha existente):** +``` +Se a ferramenta falhar, avise que teve instabilidade e peça um instante. +``` + +**DEPOIS:** +``` +## ⚠️ Fallback quando `status_suites` falha ou não retorna +Se a ferramenta retornar erro OU não houver resultado após a chamada: +1. NÃO fique em silêncio. NÃO chame handoff. +2. Responda ao cliente imediatamente: + "Opa, tive uma instabilidade aqui e não consegui verificar em tempo real 😅 + Para garantir disponibilidade agora, você pode: + - Me informar que quer reservar mesmo assim — eu registro a pré-reserva e a recepção confirma na chegada. + - Ou ligar direto: [número do hotel]. + O que prefere?" +3. Se o cliente quiser prosseguir, roteie para daniela_reservas normalmente. +``` + +--- + +### Arquivo: `_modelos/scenarios/jasmine___daniela_reservas.md` (todos os 4) + +**ANTES:** *(seção de FAQ operacional não existe)* + +**DEPOIS (adicionar antes das Proibições):** +```markdown +## ❓ FAQ operacional — responda direto, sem chamar handoff + +| Pergunta do cliente | Resposta padrão | +|---|---| +| "Aceita cartão?" / "Passa cartão?" | "Sim! Aceitamos débito e crédito direto na chegada 😊 A pré-reserva online é via Pix (sinal de 50%)." | +| "Pode dividir?" / "Parcela?" | "Não fazemos parcelamento — mas você pode pagar o sinal agora via Pix e o restante em cartão ou dinheiro no check-in 😊" | +| "Pode trazer comida?" / "Pode levar bebida?" | "Pode sim, sem problema! 😊" | +| "A hidro já vem cheia?" / "Tem que encher a banheira?" | "A hidro fica pronta pra uso na sua chegada! Se quiser cheia de cara, é só avisar na recepção 😊" | +| "Os quartos são não fumantes?" | "Sim, todas as suítes são não fumantes 😊" | +| "Bebidas alcoólicas pode?" | "Pode sim! 😊" | + +## 🔄 Reenvio de Pix — regra crítica +Se o cliente pedir "manda o Pix de novo", "reenvie o Pix", "não recebi o Pix": +- **NÃO** chame `generate_pix` novamente — cria nova reserva com valor possivelmente diferente. +- Responda: "Para reenviar o Pix da sua reserva existente, preciso da ajuda da equipe 😊 Um momento!" e chame `handoff`. +``` + +--- + +### Arquivo: `_modelos/scenarios/jasmine___maria_fotos.md` (todos os 4) + +**ANTES:** *(sem regra anti-duplicata)* + +**DEPOIS (adicionar no final):** +```markdown +## ⛔ Regra anti-duplicata +- Chame `send_suite_images` **uma única vez** por categoria por turno. +- Nunca chame a mesma ferramenta duas vezes seguidas sem nova mensagem do cliente. +- Se a ferramenta retornar sucesso, não repita a chamada. +``` + +--- + +## ✅ Checklist de aprovação + +Após revisar, marque suas decisões e responda às perguntas nos campos acima: + +- [ ] Padrão 1 — Fallback de disponibilidade (Aprovado/Rejeitado) +- [ ] Padrão 2 — FAQ operacional básico (Aprovado/Rejeitado) +- [ ] Padrão 3 — Self-improvement leak (Ciente/Ação necessária) +- [ ] Padrão 4 — Pix reenvio com valor errado (Aprovado/Rejeitado) +- [ ] Padrão 5 — Fotos duplicadas (Aprovado/Rejeitado) +- [ ] Pergunta 1 — Disponibilidade pra hoje: opção A ou B? +- [ ] Pergunta 2 — Telefones nos prompts: sim ou não?