Kit de plano · reserva de mesa · código aberto

O plano completo para a mesa nunca ficar vazia

Especificação, 93 testes de aceitação, travas e prompts para um agente construir, no seu ambiente, o sistema de reserva de um restaurante: chat e WhatsApp, equipe no Telegram, lista de espera e base própria de clientes. O sistema ainda não está implementado: este repositório é o plano, e você roda a implementação.

Banner do Reserva Restaurante: reserva de mesa, WhatsApp e equipe no Telegram
O que é

Um kit para pedir ao agente: do contrato aos 93 testes verdes

Aqui não há aplicativo pronto. Há o contrato do que o aplicativo deve fazer, a bateria de testes que prova isso e as travas que impedem o agente de trapacear. Quem constrói é o Claude Code ou o Codex, rodando na sua máquina, pela sua assinatura. O irmão Atende Clínica foi feito exatamente assim e fechou 93 de 93 testes.

Reserva de mesa, alocação automática, confirmação, lista de espera, WhatsApp Evolution, equipe no Telegram, LGPD e Raio-X

🍽️ O sistema que sai do plano

Salões e mesas com capacidade, turnos por dia da semana, alocação da menor mesa que serve, confirmação "1 confirma / 2 cancela", no-show, lista de espera e grupo grande com aprovação da equipe. Python 3 só com biblioteca padrão e SQLite, para um restaurante por instalação.

📦 O kit

Especificação de 20 seções, 93 testes caixa-preta, decisões já propostas, mapa para o Raio-X, prompts para /goal e para o loop headless, e as travas que congelam o contrato. Um validador adversarial já passou por tudo e corrigiu 13 problemas.

📈 As regras do Raio-X de Margem

O contato do cliente fica com o restaurante, e não com o marketplace: a origem não aceita iFood nem Rappi, e campanha só vai a quem consentiu (LGPD). O sistema devolve clientes_novos_mes e retorno_atual_pct para o painel do Raio-X de Margem.

Como funciona

Do "quero uma mesa para quatro" à reserva confirmada

Este é o fluxo do sistema planejado, o que o agente vai construir. Servidor Python sem dependências, SQLite numa pasta de dados e Docker para a VPS. Evolution e Telegram entram só por variáveis de ambiente; sem elas, a caixa de saída é simulada e nenhuma chamada de rede sai.

Chat do site ou WhatsApp (Evolution)→ Nome, pessoas, dia, horário→ Alocação da menor mesa que serve→ Confirmação 24 h antes→ Espera, grupo grande, no-show→ Números do mês para o Raio-X

Cliente

Pelo chat ou pelo WhatsApp reserva em quatro respostas, consulta e cancela a própria reserva, tira dúvidas do FAQ, pede atendente e manda "PARAR" quando não quer mais mensagens.

Equipe no Telegram

Avisos de reserva nova, cancelada e grupo grande. Comandos /reservas, /fila, /responder, /encerrar, /aprovar e /recusar, também em resposta direta à mensagem do cliente.

Página /equipe

Com token: reservas do dia por turno e salão, mapa de ocupação por horário, chegada e no-show, aprovar ou recusar grupo grande, cadastros de mesas, turnos e FAQ, bloqueios e fila humana.

Pré-requisitos

O que você precisa

Para rodar o plano basta Python para os testes e um agente logado pela assinatura. Docker só entra na verificação final e no deploy; Evolution e Telegram são opcionais e seus.

Python 3.10+ e pytest

Os testes usam pytest (ferramenta de desenvolvimento). A aplicação em si não terá dependências.

# conferir
python3 --version
python3 -m pip install pytest

Claude Code ou Codex

Pela assinatura, sem API paga. Para o loop headless, clone o execucao-longa em ~/projetos.

# conferir
codex --version   # ou: claude --version

Docker, Evolution e Telegram

Docker faz o build final e o deploy na VPS. Uma instância Evolution e um bot do Telegram só se quiser os canais; as credenciais ficam no .env.

# conferir
docker --version
Guia de uso · passo a passo

Do clone ao sistema implementado, no seu ambiente

Os comandos abaixo são os do repositório. O ciclo: responder as decisões, congelar o contrato, rodar o agente até 93 passed e LIMITES OK, e conferir com a verificação independente.

1

Clone o repositório

Ainda não há ./reserva: o repositório só tem o plano. Confira que a suíte é coletada sem erro e que nada passa ainda (faltando a implementação, os testes falham ou dão erro, e isso é o esperado).

git clone https://github.com/inematds/reserva-restaurante && cd reserva-restaurante
python3 -m pytest -q --collect-only | tail -1   # 93 tests collected
python3 -m pytest -q | tail -1                  # 0 passed
2

Responda as decisões abertas

Leia docs/DECISOES-ABERTAS.md: são 20 propostas padrão já aplicadas na especificação e nos testes. Responder "ok em tudo" destrava a execução. Se mudar algo marcado com ⚠, edite docs/ESPECIFICACAO.md e os testes antes de congelar. Para um piloto real, troque também exemplos/restaurante.json pelos seus salões, mesas e turnos.

less docs/DECISOES-ABERTAS.md
3

Congele o contrato

Com tudo commitado, o script grava o hash de tests/, pytest.ini, da especificação e do verificador, mais o commit-base em hash-congelado.txt. Daí em diante, qualquer mudança nos testes é detectada.

git add -A && git commit -m "contrato v1"
bash longrun/2026-10-05-reservas-v1/congelar.sh
4

Rode o agente (escolha um caminho)

a) Loop headless com o Codex (recomendado). O loop.env define 20 ciclos de 30 min, 8 GB por ciclo, parada após 3 ciclos sem avanço, modelo gpt-6-astra e CODEX_ARGS="-c sandbox_workspace_write.network_access=true": sem isso o sandbox do Codex bloqueia o servidor local dos testes.

~/projetos/execucao-longa/tools/loop-longrun.sh longrun/2026-10-05-reservas-v1

b) /goal no Claude Code. Abra uma sessão nova do Claude Code na pasta do projeto e siga longrun/2026-10-05-reservas-v1/prompt-goal-claude.md: cole a condição de /goal (a saída precisa mostrar 93 passed e LIMITES OK) e, como primeira mensagem, o bloco de prompt-goal-codex.md a partir de RESULTADO:.

claude   # sessão nova, dentro de reserva-restaurante

c) Codex TUI aberto. Cole o conteúdo de longrun/2026-10-05-reservas-v1/prompt-goal-codex.md.

codex -c sandbox_workspace_write.network_access=true
5

Acompanhe

No loop, o loop.log mostra cada ciclo e progress.md traz uma linha por checkpoint. O código de saída do loop diz o que houve: 0 concluído (o teste final passou), 1 teto de ciclos atingido, 2 parado por 3 ciclos sem avanço, 3 outro loop já roda na pasta. Teste em conflito com a especificação vai para failures.md: é portão humano, e o agente não deve ajustar teste nem especificação.

tail -f longrun/2026-10-05-reservas-v1/loop.log
cat longrun/2026-10-05-reservas-v1/state.md
6

Confira com a verificação independente

Quando o agente disser "concluído", rode os três comandos. O último o agente nunca viu: ele procura valores da fixture copiados no código, sobe um restaurante que nunca apareceu (passo de 15 min, um turno, combinação de 3 mesas, sem limite de cozinha) e faz docker build com healthcheck. Depois, abra / e /equipe no navegador.

python3 -m pytest -q tests/                                        # 93 passed
bash longrun/2026-10-05-reservas-v1/verificar-limites.sh              # LIMITES OK
python3 longrun/2026-10-05-reservas-v1/verificar-independente.py     # INDEPENDENTE OK
7

Deploy na VPS e piloto

O deploy é seu, com as suas credenciais. O próprio agente escreve o README de deploy como parte do goal: subir o docker compose, proxy HTTPS, webhook da Evolution (evento MESSAGES_UPSERT), webhook do Telegram com secret_token e backup diário no cron. Depois do deploy, configure um restaurante real e use o sistema por algumas semanas.

cp .env.exemplo .env && chmod 600 .env   # preencha EVOLUTION_*, TELEGRAM_*, WEBHOOK_SEGREDO
docker compose up -d --build
O que vem no kit

Contrato, testes e travas, com os números reais

Tudo o que o agente precisa para construir, e tudo o que impede que ele finja ter construído.

93 testes de aceitação

Caixa-preta, por HTTP e por linha de comando, em 10 arquivos.

test_reservas.py              15
test_integracoes.py           17
test_conversa.py              12
test_confirmacao_espera.py    10
test_horarios.py               9
test_cadastros.py              9
test_basico.py                 7
test_grupo_canal.py            7
test_docker.py                 4
test_lgpd_raiox.py             3

Especificação de 20 seções

docs/ESPECIFICACAO.md: execução, restaurante.json, regras de horário e alocação, API HTTP, conversa, lista de espera, confirmação, grupo grande e base própria, exportação para o Raio-X, LGPD, o que fica fora da v1, páginas, cadastros, bloqueios, banco, Evolution, Telegram e Docker. O que é sinal por Pix, delivery e vários restaurantes está explicitamente fora.

Travas contra atalho

Hash congelado de tests/, pytest.ini e da especificação. Escopo de arquivos: o agente só mexe no código e nos próprios registros. Sem dependência externa, sem chave de API, sem URL externa e sem 0.0.0.0 no código. O verificar-limites.sh confere tudo isso e imprime LIMITES OK.

Verificação independente

Nível 4, escondido do agente: procura valores da fixture no código, sobe um restaurante nunca visto, com todos os argumentos explícitos, e faz docker build e healthcheck do container. Só assim "93 passed" prova uma lógica geral.

20 decisões já propostas

Linguagem, canais, alocação, duração por tamanho do grupo, grupo grande pendente ocupando mesa, limite da cozinha, no-show sem cobrança, lista de espera, regras de consentimento e o que vai ao Raio-X. Só os itens marcados com ⚠ mudam o contrato.

Validado por um agente adversarial

Um validador que não viu o planejamento conferiu teste contra especificação, refez as contas e tentou burlar as travas. Achou e corrigiu 13 problemas, 3 deles travariam a execução. O relato completo está em docs/VALIDACAO.md.

Roadmap

Onde está e para onde vai

O plano está pronto e validado. A implementação ainda não existe: ela nasce quando você roda o /goal, pelo método execucao-longa. O Atende Clínica seguiu o mesmo caminho e fechou 93 de 93.

Plano ✅
Especificação, testes e travas validadosContrato de 20 seções, 93 testes de aceitação, decisões propostas, mapa para o Raio-X e validação adversarial concluída em 05/10/2026.
Implementação
Você roda o /goalResponder as decisões, congelar o contrato e deixar o agente trabalhar até 93 passed e LIMITES OK, depois a verificação independente.
Piloto
Num restaurante realConfigurar salões, mesas, turnos e FAQ verdadeiros, publicar na VPS e acompanhar clientes novos e retorno no Painel de Recuperação do Raio-X.