diff --git a/docs/captain/historico_fixes.md b/docs/captain/historico_fixes.md new file mode 100644 index 000000000..5257e4c7e --- /dev/null +++ b/docs/captain/historico_fixes.md @@ -0,0 +1,94 @@ +# Histórico de Fixes — Captain (Jasmines) + +Registro cronológico das correções aplicadas nos prompts e infra do Captain (assistants Jasmine + cenários daniela_reservas, disponibilidade_suites, maria_fotos, outras_unidades, reclamacoes_ouvidoria). + +## Pra que serve + +- **Auditoria humana** — saber "o que mudou quando e por quê" sem precisar abrir 10 commits +- **Evitar retrabalho** — antes de propor mudança nova, conferir se o problema já tem fix aplicado +- **Defesa contra Captain Reviewer "burro de memória"** — quando o Reviewer abrir issue nova baseado em conversa antiga, comparar o `created_at` da conversa com a data do fix correspondente: se a conversa é anterior ao fix, o problema já está tratado +- **Base pra automatizar Nível 3 do Reviewer** — eventualmente o prompt do Reviewer pode ler este arquivo e filtrar conversas anteriores ao último fix relevante (ou usar `git log` direto, que é equivalente) + +## Como ler + +Cada fix é um bloco YAML no `## Fix N` com os campos: + +| Campo | Descrição | +|---|---| +| `fix_id` | Slug único do fix (kebab-case + data) | +| `data` | ISO 8601 com timezone — momento do deploy em prod, não do commit | +| `commit` | Hash curto do commit no repo | +| `deploy` | Tag da imagem em prod (ex: `v100`) | +| `escopo` | Lista de unidades afetadas (`primeal`, `primevl`, `qnn01`, `express`, `dolce_amore`, ou `todas`) | +| `cenarios_afetados` | Lista de cenários (`daniela_reservas`, `maria_fotos`, etc) ou `infra` se for código | +| `problemas_corrigidos` | Lista em linguagem natural — chave pra dedup contra Reviewer | +| `conversas_de_origem` | IDs de conversas que serviram como evidência do bug | +| `keywords` | Termos curtos pra busca rápida | +| `status` | `aplicado` (em prod) / `revertido` / `superseded_por: ` | + +## Como adicionar fix novo + +Quando aplicar correção que afeta comportamento da Jasmine, adiciona um `## Fix N+1` no fim do arquivo seguindo o template do último. Mantém ordem cronológica (mais novo no fim). + +--- + +## Fix 1 — v99 (preços corretos Express/Qnn01 + sync automático) + +```yaml +fix_id: precos-express-qnn01-sync-2026-04-25 +data: 2026-04-25T10:38-03:00 +commit: fc2663be2 +deploy: v99 +escopo: [express, qnn01] +cenarios_afetados: [daniela_reservas, disponibilidade_suites, maria_fotos] +infra: + - rake_task: lib/tasks/captain_prompts.rake (nova) — captain:sync_prompts lê _modelos/ e atualiza DB + - service_args: iachat_iachat_app args mudados pra "sh -c 'captain:sync_prompts && rails s'" + - docs: docs/precos/ (tabelas oficiais por marca, consulta humana) +problemas_corrigidos: + - Express não tinha Suítes Singles, Família, Singles Duplo no prompt + - Express Master qui-dom estava como 4h R$85; correto é 5h R$85 + - Qnn01 prompt usava nome "Master" (correto é "Luxo") + - Qnn01 listava "Pole Dance" e "12h" (não existem na unidade) + - Qnn01 Hidromassagem em 2 tabelas duplicadas (correto é tabela única "todos os dias") + - Drift histórico git → DB (resolvido estruturalmente: sync automático em todo deploy) +conversas_de_origem: [4565, 4536, 4521, 4513, 4519, 4514, 4497, 4505, 4453, 4366, 4412, 4411, 4400, 4402, 4378, 4376, 4365, 4372, 4267, 4258, 4248, 4224, 4216, 4259, 4218] +keywords: [tabela qui-dom ausente, master luxo, pole dance qnn01, 12h, singles familia, sync manual docker cp] +status: aplicado +notas: | + Origem: Captain Review 2026-04-25 (issue ROD-14). Reviewer detectou padrões de bug REAIS no + período 22-25/04, mas no momento da execução o prompt do PrimeAL/PrimeVL já tinha sido + corrigido em sessão anterior (sync manual em 24/04). Express e Qnn01 ainda estavam com bugs + e foram corrigidos neste fix. Bonus: passou a sincronizar git → DB automaticamente em todo + deploy via captain:sync_prompts no boot do iachat_iachat_app. +``` + +## Fix 2 — v100 (comportamento humano + valores curto) + +```yaml +fix_id: comportamento-humano-valores-curto-2026-04-25 +data: 2026-04-25T13:59-03:00 +commit: 6eb7f99ea +deploy: v100 +escopo: [primeal, primevl, qnn01, express] +cenarios_afetados: [daniela_reservas] +problemas_corrigidos: + - Jasmine alucinava "não tenho a tabela exata por horas aqui neste momento" (delata IA) + - Jasmine pedia "qual dia?" quando cliente perguntou só "valor"/"valores" (deveria mostrar tabela completa direto) + - Jasmine mencionava "tabela qui-dom/feriado" na resposta ao cliente (nome interno escapando) + - Falta de regra explícita pra "se comportar como humana — não delatar que é IA" + - Falta de proibições contra frases-trigger de IA ("vou consultar", "deixa eu olhar", "preciso verificar") +conversas_de_origem: [4498] # Rayssa Lorranny / Jasmine PrimeAL / 2026-04-25 12:44 +keywords: [comportamento humano, robô exposto, IA delatada, valores curto, tabela qui-dom na resposta, pergunta com pergunta] +status: aplicado +notas: | + Origem: Rodrigo enviou print de conversa real Rayssa Lorranny / Jasmine PrimeAL (25/04 12:44) + com 3 problemas concretos. Decisão: aplicar nas 4 unidades porque é problema COMPORTAMENTAL, + não específico de marca (per memória feedback_prompt_scope_by_brand: "comportamento global, + preços por marca"). Mudanças aplicadas em 4 daniela_reservas: + 1. Nova seção 🤖➡️👤 SE COMPORTE COMO HUMANA no topo (frases proibidas + exemplos humanos) + 2. Nova REGRA DE OURO — VALORES CURTO antes da seção B (cliente pergunta só preço sem + especificar → manda tabela completa direto, nunca pergunta dia primeiro) + 3. 3 proibições novas em 🚫 Proibições (não dizer que não tem tabela, não mencionar + "tabela qui-dom" na resposta, não responder pergunta com pergunta) +```