# ESTADO — onde paramos

> Leia antes de qualquer tarefa. Atualize no fim de cada sessão.
> Aqui fica o que MUDA. A estrutura fixa fica no `CLAUDE.md`.

**Última atualização:** 15/08/2026

---

## 15/08/2026 — ONDA 0 CONCLUÍDA (auditoria e arquitetura)

Projeto iniciado. Objetivo: loja virtual própria em
`lojavirtual.ofertadistribuidora.com.br`, para depois substituir a Nuvemshop.

**Feito nesta sessão (nada de produção foi alterado):**
- Lidos `CLAUDE.md`, `ESTADO.md` (1.425 linhas) e `CRM-PLANO.md` do sistema irmão.
- Auditados 2.951 arquivos; **92 tocam a Nuvemshop**.
- Mapeadas as dependências da Nuvemshop, os crons, os webhooks e o dono de cada dado.
- Escolhida a plataforma: **Medusa v2** (comparação em `docs/ARCHITECTURE.md`).
- Criados: `docs/AUDITORIA-ONDA0.md`, `ARCHITECTURE.md`, `DATA-OWNERSHIP.md`,
  `PLANO-ONDAS.md`, `NAO-TOCAR.md`, `MIGRATION-NUVEMSHOP.md`, `TECH-DEBT.md`,
  `CLAUDE.md`, `ESTADO.md`.

**As três descobertas que mudaram o plano:**

1. **Não existe Mercado Pago no sistema.** O briefing pedia "manter o gateway atual" —
   ele não existe. Hoje o cliente paga no checkout da Nuvemshop e um **humano** confirma
   o pagamento no PDV (`dar-baixa.php`), que é o que dispara comissão e cashback.
   → Decisão: a loja nova mantém a baixa manual na primeira versão. Gateway próprio é
   escolha do dono (Onda 5).
2. **`pedidos_cache.nuvemshop_id` é `VARCHAR(20)`, não inteiro.** Pedido da loja nova
   entra como `LP-000123` — sem colisão, sem alteração destrutiva de schema, e o
   `sincronizar.php` nunca encosta nessas linhas.
3. **A Nuvemshop não manda webhook nenhum.** Tudo é polling. Então trocar de plataforma
   não quebra nenhum receptor de evento — só os 12 arquivos que **leem** a API dela.
   → Por isso a Commerce API vai expor uma **fachada compatível com a Nuvemshop**:
   no cutover, esses arquivos trocam uma constante e continuam funcionando.

---

## Decisões do dono (15/08/2026)

- **Gateway: Mercado Pago.** ✅ Decidido. Pix + cartão + parcelamento. Onda 5 já tem alvo.
  Lembrete: não existe integração hoje — é construção nova, não migração.
- **Servidor: VPS Hostinger KVM 4** (4 vCPU · 16 GB · 200 GB NVMe · R$ 59,99/mês no plano
  de 24 meses, renova a R$ 149,99). ✅ Decidido. Cabe tudo com folga: a conta de memória dá
  ~6–10 GB de uso para 16 GB disponíveis. Na contratação: **datacenter São Paulo**,
  Ubuntu 24.04, sem painel (Docker).
- **Ordem de migração acordada — nunca tudo de uma vez:**
  1. VPS só com a loja nova (ERP intocado no cPanel) ← Onda 1
  2. Evolution GO sai do easypanel (exige reler o QR code, com hora marcada)
  3. E-mail para Zoho/Google + `config/email.php` de `mail()` para SMTP
  4. Sistema PHP + banco + crons
  5. Cancelar o cPanel **só 30 dias depois** de tudo migrado

## Achados de infraestrutura (15/08/2026, medidos por consulta DNS)

Mapa completo em `docs/DNS-E-DOMINIOS.md`.

- DNS é gerenciado **dentro do WHM da Hospedagem Ilimitada** (nameservers próprios
  `ns1/ns2.ofertadistribuidora.com.br` → `177.53.141.113/114`).
- Raiz e `www` apontam para a **Nuvemshop** (`185.133.35.21/.22`);
  os 5 subdomínios apontam para o cPanel (`177.53.141.112`).
- `lojavirtual` já resolve por **curinga** — basta um registro A explícito para a VPS.
- **O cutover são 2 registros** (raiz + www), e o rollback são os mesmos 2. Baixar o TTL antes.
- ⚠️ **E-mail confirmado no servidor cPanel:** MX → `177.53.141.112`, e o SPF autoriza esse
  IP. O `vo/config/email.php` dispara por `mail()`/Exim de lá. Cancelar o cPanel sem migrar
  o e-mail **derruba a recuperação de senha do painel do cliente** — que é só por e-mail
  de propósito (49 pedidos têm o telefone do afiliado).
- Domínio novo **não é necessário**: `lojavirtual` é subdomínio, sai de graça.
- SSL na VPS é Let's Encrypt, gratuito e automático — o "Certificado SSL Comodo" ofertado
  no painel da revenda deixa de ser necessário.

## Respondido pelo dono (15/08/2026)

- **A Revenda não hospeda cliente de terceiro** — é só da empresa.
  → **Um servidor só.** Não precisa de VPS separada nem de licença de cPanel.
  Se um dia entrar cliente pagante, a regra fica registrada: **outro servidor**, nunca
  o mesmo do ERP (site de terceiro invadido é porta de entrada para comissão, chave PIX
  e token do WhatsApp). Painéis grátis, se quiser conforto visual: CyberPanel, HestiaCP,
  CloudPanel. Para o dia a dia, o WinSCP por **SFTP** já resolve.

- **Claude Code vai rodar dentro da VPS.** Aprovado. Node já estará lá por causa do Medusa.
  Regras de uso: **usuário próprio, nunca root**, escopo na pasta do projeto, e trabalho em
  cópia/branch antes de tocar produção.
  Por que importa: hoje o ciclo de conserto é *vigia diagnostica → dono clica "Copiar os N
  erros" → cola no chat → eu escrevo → WinSCP publica*. Com o Claude Code no servidor eu leio
  o `error_log` e o banco direto. E destrava o que ficou registrado como impossível em 26/07:
  *"conserto automático exige sair do WinSCP-direto-pra-produção"* — com git no servidor,
  passa a ser erro → proposta de conserto → **dono aprova com um clique**.

## Ganhos concretos de sair do compartilhado (cada um é um incidente já documentado)

| Dor registrada no ESTADO.md do sistema irmão | Na VPS |
|---|---|
| Backup falhou 07, 08 e 09/08 com `HTTP 0` — CLI sem saída pra internet | Resolvido |
| Espelho WinSCP: 36h desligado, arquivo que não sobe, apagado que não some (gerou `limpar-mortos.php` e `espelho-conferir.php`) | `git pull` |
| Publicação direto em produção, sem staging, num sistema que move saque | Staging na mesma máquina |
| `getaddrinfo() thread failed to start` (aperto de recurso da conta) — obrigou 3 tentativas no cron de carrinho | Recurso dedicado |
| Cron com `php` pelado morria calado (virou `wget` + `ea-php81`) | Cron normal do Linux |
| Log de 8,5 GB | `logrotate` |
| Evolution GO no easypanel (mensalidade + sem controle) | Na própria máquina |
| SSL Comodo como upsell | Let's Encrypt grátis |

**Contrapartida assumida:** segurança e atualização passam a ser nossas
(mitigação: `unattended-upgrades`, UFW, fail2ban, snapshot diário da Hostinger),
e não há suporte de terceiro para acionar em queda.

## ⛔ BLOQUEIO ATUAL — a Onda 1 não começa sem isso

**1. Servidor — em medição.** O dono perguntou se o cPanel compartilhado atual serve.
Resposta curta: provavelmente não, e a evidência é do próprio sistema — **processo de CLI
nesta hospedagem não tem saída para a internet** (backup falhou 07/08/09 de agosto com
`HTTP 0`). Sem isso, um servidor Medusa não consegue falar com o Mercado Pago.
→ Criado `scripts/diag-hospedagem.php` (só leitura) para o dono subir, rodar e colar o
resultado. Ele mede Node, PostgreSQL, Redis, recursos e a saída de internet pelo CLI.
→ Custo revisado para baixo: VPS inicial de 2 vCPU/4 GB sai por **~R$ 25–40/mês**
(o valor de R$ 100–370 do relatório era o cenário com volume).

**2. Admin da Nuvemshop.** O dono ofereceu acesso. **Não recebo credencial** — o caminho é
ele abrir as telas logado (navegador dele) e eu ler, ou mandar prints/export.
Telas necessárias: Pagamentos · Envio/frete · Aplicativos instalados · Cupons ·
Produtos (contagem e export) · Clientes (contagem) · campos extras do checkout · tema.

---

## Fila (próximas tarefas)

- [ ] Onda 1 — Docker + Medusa + Postgres + Redis + Commerce API + `/health` (bloqueada)
- [ ] Onda 2 — importador de catálogo idempotente
- [ ] Conferir `SHOW CREATE TABLE pedidos_cache` em produção (o `banco.sql` está desatualizado)
- [ ] TD-10 do `TECH-DEBT.md`: base do cashback vai passar a incluir frete na loja nova —
      resolver **antes** da Onda 9
