O que já está bem resolvido, e é mais do que parece
Comeco por aqui porque é raro. A maior parte das especificações que chegam a esta densidade erra nas coisas estruturais e acerta nas visíveis. Esta faz o contrário.
| Decisão | Estado | Por que importa |
|---|---|---|
| RAW imutável com SHA-256 | tem | O original nunca se perde. Corrigir não sobrescreve. |
Proibição de last-write-wins | tem | Conflito abre reconciliação em vez de escolher sozinho. Isto normalmente só se aprende depois de perder dados. |
outbox transacional | tem | Declarado em segurança. É o que impede divergência entre gravar no banco e chamar o fornecedor. |
| Idempotência | meia | 25 menções, e nenhuma diz sobre que chave. Ver §3. |
| Auditoria append-only | tem | Atravessa todos os motores. É o que torna a plataforma defensável. |
| Lock otimista por versão | tem | UPDATE … WHERE id=? AND versao=? — a trava certa contra venda dupla. |
| Direitos de produto separados | tem | DIVULGAVEL ≠ RESERVAVEL ≠ CONTRATAVEL. Três direitos, não um estado. |
| Tradutor de linguagem | tem | 175 conceitos canónicos e 160 equivalências proibidas. Declarar o que não é sinónimo é mais difícil e mais valioso que declarar o que é. |
| Autonomia L0–L4 por agente | tem | Nenhum agente ganha alçada implícita. |
| Gates humanos nos pontos certos | tem | Crédito, contrato, liberação de produto e desconto ficam com gente. Está certo — ver §4. |
outbox e de contrato de adaptador. Ambos existem na v3.1 — eu estava a medir a v1.2, que era o que tinha em mão. A leitura errada foi minha, não uma falha do documento.
A lacuna estrutural: falta a espinha de eventos
Esta é a única observação deste documento que eu classificaria como arquitetural, e não como detalhe. Todo o resto é preenchimento.
A contagem no documento:
| Padrão | Ocorrências | Leitura |
|---|---|---|
| event bus · barramento · pub/sub | 0 · 0 · 0 | ausente |
| CQRS · read model | 0 · 0 | ausente |
| dead letter · circuit breaker | 0 · 0 | ausente |
| rate limit · backpressure | 0 · 0 | ausente |
| webhook | 20 | presente |
| jobs agendados | 10 | presente |
O sistema integra-se por webhook de entrada e job agendado de saída. Isso funciona, e é como muita gente começa. O problema aparece quando se lê o que a plataforma promete em termos de tempo:
«Acolhimento em 5 segundos, qualquer canal, 24/7»
Um job que corre a cada minuto não acolhe em cinco segundos. Nem a cada dez segundos, porque aí é o job que vira o problema.
«Lead sem resposta em 5 minutos volta à fila»
Isto exige um temporizador por lead, não uma varredura da tabela. Com dez mil leads a varredura passa a custar mais que o atendimento.
Os dez jobs declarados são todos varreduras: expirar reservas, redistribuir leads ociosos, monitorar SLA, monitorar proposta vencendo, atualizar aging. Cada um é um SELECT … WHERE periódico sobre tabela que cresce.
outbox transacional já está declarado. Falta o outro lado: um barramento de eventos de domínio com consumidores. O outbox publica, o barramento entrega, os consumidores reagem. Os dez jobs continuam a existir — mas como rede de segurança que apanha o que o evento perdeu, não como mecanismo principal.
evento de domínio quem reage
──────────────────────────────────────────────────────────
LeadRecebido → Concierge (acolhe em 5 s)
→ Temporizador de SLA (agenda +5 min)
SlaEstourado → Redistribuidor (devolve à fila com trilha)
ReservaCriada → Espelho (projeta indisponível)
→ Temporizador de trava (agenda +24 h)
PixConfirmado → Reserva (confirma), Dossiê (abre)
PrecoAlterado → Fila de qualidade (peça publicada → EM_DUVIDA)
LoteLiberado → Fila de interesse (avisa por posição)
EntregaAceita → Financeiro (libera emissão de nota)
Repare na quarta linha de baixo: PrecoAlterado → peça em dúvida. É a ligação entre recertificação N3 e fila de qualidade que eu propus antes e que não é implementável sem eventos. Com job, alguém tem de se lembrar de varrer as peças depois de mudar um preço. Com evento, é automático e não se esquece.
Seis buracos de engenharia que vão aparecer em produção
Ordenados por quando doem. Os três primeiros doem no primeiro mês.
| # | Buraco | Como se manifesta | Custo de arrumar depois |
|---|---|---|---|
| 1 | Chave natural não declarada | Reimportar duplica o lote ou sobrescreve o errado. matricula aparece zero vezes em 353 KB. | alto — dado sujo em estoque não se limpa sozinho |
| 2 | Sem separação leitura/escrita no espelho | O espelho é a página mais lida do portal e a tabela mais travada pela reserva. Vão competir. | alto — refazer sob carga é o pior momento |
| 3 | Sem limite de chamada nos adaptadores | Meta, Google e WhatsApp têm limite por minuto. Agente de Tráfego sem freio esgota a cota e a conta cai inteira, não só a campanha. | médio |
| 4 | Sem fila de mortos | Webhook de PIX que falha três vezes desaparece. O cliente pagou e o sistema não sabe. | alto — é dinheiro perdido silenciosamente |
| 5 | Sem contrato de SLO | «Acolhimento em 5 s» é promessa sem medição. Quando falhar, ninguém sabe que falhou. | médio |
| 6 | Superfície de API menor que a declarada | 32 caminhos em apis_minimas, 9 operações no contrato executável. O resto está por especificar. | médio — é trabalho, não retrabalho |
Onde a automação realmente poupa gente
Aqui preciso de discordar de uma premissa antes de responder ao pedido. «Precisar de humanos ao mínimo» é a meta certa, mas o alvo está no lugar errado.
O spec mantém humanos em cinco pontos, e mantém bem: gate de publicação das cinco cadeiras, crédito, contrato, liberação de produto e exceção económica. Automatizar esses cinco não reduz custo — transfere risco. Um agente que aprova crédito ou libera lote é um passivo, não uma economia.
O tempo humano não se gasta a decidir. Gasta-se a juntar contexto antes de decidir e a executar depois. É aí que está a poupança, e ela é grande.
| Onde | Hoje | Com agente | Nível |
|---|---|---|---|
| Primeira resposta | SLA de 5 min, e o lead esfria | Acolhimento em 5 s, qualifica e agenda | L3 |
| Montagem do kit D-1 | 40 min por ativo, à mão | Agente monta, humano aceita num clique | L2 |
| Dossiê de crédito | conferir checklist item a item | Agente aponta faltas; humano decide | L2 |
| Cadência de follow-up | lembrete manual, esquecido | Régua 5 min / 48 h / 30 d no mesmo canal | L3 |
| Adaptação de peça | uma peça por canal, à mão | Um master → 20 canais, com aceite | L2 |
| Operação de tráfego | ajuste manual diário | Opera dentro de teto homologado | L3 |
| Cobrança suave | ligação uma a uma | Aviso e link de pagamento na régua C9 | L3 |
| Diagnóstico de gargalo | reunião para descobrir | Kaizen aponta com evidência | L1 |
O motor de alçada — a peça que falta para automatizar com segurança
Os 13 agentes têm nível de autonomia. O que não têm é orçamento e limite por ação. Hoje só o Agente de Tráfego tem teto declarado; os outros doze operam com «dentro de parâmetros homologados», que é intenção e não contrato.
Sem isso, automatizar mais é aumentar exposição. Com isso, dá para soltar bastante.
alçada por agente e por ação ──────────────────────────────────────────────────────── agente ação limite excedeu → Concierge mensagem enviada N por pessoa/dia silencia e escala Concierge agendamento agenda do titular pede ao humano Tráfego alterar verba teto diário R$ X pausa e avisa Tráfego criar campanha N por praça/dia fila para aceite Publicação publicar peça só HOMOLOGADO recusa e explica Vídeo gerar corte N minutos/mês fila Carteira contato de cobrança N por parcela para e escala SDR ligação horário permitido agenda qualquer erro consecutivo 3 desliga o agente
A última linha é a mais importante e não existe em nenhum lugar do spec: interruptor por agente. Um agente que começa a errar precisa de ser desligado por quem está de plantão, sem deploy e sem esperar por engenharia. Nada no documento permite isso hoje.
Canais que não existem e deviam
Os 14 canais de entrada declarados cobrem bem o próprio e o pago. Faltam três famílias, e a primeira é onde o comprador brasileiro de imóvel realmente procura.
| Canal | No spec | Por que muda o jogo |
|---|---|---|
| Portais imobiliários ZAP, VivaReal, OLX, Imovelweb | ausente | É a primeira parada de quem procura imóvel no Brasil. Nenhum termo aparece nos 353 KB. Sindicação por feed é trabalho conhecido e o retorno é imediato. |
| Páginas programáticas | citado | Uma página por praça × natureza × faixa gera centenas de portas orgânicas do catálogo que já existe. Está mencionado em Organic Discovery e não desenvolvido. |
| Perfil local por empreendimento Google Business Profile | ausente | Loteamento tem endereço físico. Busca local com foto, avaliação e rota é aquisição gratuita que ninguém está a usar. |
| Fila de interesse | construído | Audiência própria, com posição declarada. Cada avanço do produto é um aviso — a melhoria é o anúncio. |
| Indicadores e influência | construído | Novo canal, medido do clique ao contrato. |
single_immutable_origin_channel. Antes de ligar o feed é preciso decidir como o canal portal entra na atribuição, senão ele rouba origem de tudo ou não recebe crédito de nada. É decisão de negócio, não de engenharia.
Tráfego e atendimento com regra por agente
O Concierge é a parte melhor especificada do documento — dez funções, cinco regras, cinco gatilhos de escalonamento. Não preciso de propor nada; preciso de apontar as três regras que fazem a diferença entre um agente que ajuda e um que estraga.
«Consulta o espelho em tempo real e apresenta só unidades compatíveis»
A invariante do agente: nunca oferece lote indisponível. Isto obriga o agente a ler a projeção do espelho, e é a razão técnica de precisar de separação leitura/escrita — o agente não pode travar a tabela da reserva para conversar.
«Simulação via simulador oficial, nunca calcula por conta própria»
Um modelo de linguagem calcula parcela errada com convicção total. Proibir o cálculo próprio é a decisão mais importante do documento sobre IA, e ela está lá.
«Fora do horário humano, agenda em vez de prometer retorno»
Impede a promessa que ninguém cumpre. É a regra que salva a reputação do canal.
«Identifica-se como assistente virtual na primeira mensagem»
Além de correto, é o que permite o handoff sem atrito: quem sabe que falava com um robô não se sente enganado quando entra um humano.
O que eu acrescentaria ao atendimento, e é só uma coisa: medir a taxa de escalonamento como indicador de qualidade, não de falha. Um Concierge que escala 40% das conversas pode estar a funcionar perfeitamente — se as 40% eram casos de alçada. O que interessa medir é escalonamento fora dos cinco gatilhos declarados, porque isso sim é o agente a não dar conta.
No tráfego, a regra que falta é a inversa da que existe. Há teto de gasto; falta piso de aprendizagem: um agente que pausa criativo com 200 impressões está a decidir com ruído. Antes de pausar ou promover, o volume mínimo tem de ser declarado — senão o agente otimiza para o azar.
Plano em cinco ondas
Ordenado por dependência, não por vontade. Cada onda entrega valor sozinha e nenhuma exige a seguinte para valer a pena.
fila_opcional.
é o que permite o Concierge consultar sem travar a venda
Método. Cada afirmação deste documento foi medida por contagem no JSON da carta mestra, e não por leitura de memória. Onde digo «zero ocorrências», contei. Onde uma leitura minha anterior estava errada — o outbox e o contrato de adaptador — está corrigido no §1 com o motivo. As decisões abertas citadas são as do decision_registry_v3, com o código original, para poderem ser rastreadas até à fonte.