docs(captain): histórico de fixes pra evitar retrabalho do Reviewer

Cria docs/captain/historico_fixes.md com registro estruturado (YAML) das
correções aplicadas nos prompts/infra do Captain. Pré-popula com os 2 fixes
de hoje (v99 - preços Express/Qnn01 + sync automático; v100 - comportamento
humano + valores curto).

Pra que serve:
- Auditoria humana (saber o que mudou quando e por quê)
- Defesa contra Captain Reviewer redescobrir bug já corrigido (comparar
  data da conversa-fonte com data do fix correspondente)
- Base pra eventual Nível 3 do Reviewer (filtrar conversas anteriores ao
  último commit em _modelos/ via git log)

Não muda comportamento da Jasmine — é doc + infra passiva.
This commit is contained in:
Rodribm10 2026-04-25 17:13:35 -03:00
parent 6eb7f99ea4
commit ffeb1aa65a

View File

@ -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: <fix_id>` |
## 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)
```