ecom-store/HANDOFF-2026-07-06.md
Iris Florencio d81347e9fc docs(handoff): atualizar com login n8n resolvido + workflows importados
Mudancas desta sessao (06/jul - 21:30):
- Login n8n RESOLVIDO: causa raiz era SQLite (nao Postgres),
  bcryptjs hash criado + auth_identity inserida direto no SQLite
  Credenciais: admin@m5online.com.br / M5Online@2026
- Workflow m5-openwa-to-twenty importado: ID 1zXyQ9KxAhYd0SYH,
  webhook openwa-incoming ativo
- Workflow m5-twenty-to-openwa importado: ID RX4ugQriQ34XNnaV,
  webhook twenty-outgoing ativo
- 3 stubs legados removidos (chatwoot/saleor/twenty-webhook-001)
  + 8 execucoes orfas limpas

HANDOFF agora documenta:
- Secao de credenciais em uso (nao commitaveis)
- Status workflows n8n ativos
- Cronograma de mudancas da sessao
- 5 itens restantes da Fase 5 (wizard Twenty, QR WhatsApp,
  webhook OpenWA, webhook Twenty, teste E2E)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-07-06 18:40:45 -03:00

309 lines
16 KiB
Markdown

# HANDOFF M5 — Estado da Operação e Plano de Continuidade
**Data**: 06/jul/2026 (atualizado 21:30 BRT — Fase 5 avançou)
**VPS**: 31.220.78.126 (Ubuntu 24.04, 193GB disco 30% usado, 11GB RAM)
**Operador**: Iris Florencio
**Sessão atual**: Conan Sonnet 4.6 via `cc`
---
## 🎯 IDEIA PRINCIPAL (origem do projeto)
Construir um **motor e-commerce multi-canal para o mercado brasileiro** operando 6 canais simultaneamente:
| # | Canal | Tipo | Status |
|---|-------|------|--------|
| 1 | Mercado Livre | Marketplace | skill pronta |
| 2 | Shopee | Marketplace | skill pronta |
| 3 | Amazon | Marketplace FBA | skill pronta |
| 4 | Magazine Luiza | Marketplace | skill pronta |
| 5 | TikTok Shop | Live Commerce | skill pronta |
| 6 | Site Próprio | B2C + B2B | skill pronta |
**Stack tecnológico-alvo**: Saleor (motor headless) + PostgreSQL + Redis + n8n (orquestração) + Docker + Traefik (proxy TLS) + OpenWA (WhatsApp) + Twenty CRM (clientes) + Chatwoot (suporte).
**Diferenciais brasileiros**: LGPD, CDC, NF-e, eventos sazonais (Black Friday, Dia das Mães, Páscoa, Dia do Cliente).
**Stack AI**: custom:aibee (aibee.cloud) como LLM principal, Ollama localhost:11434 (qwen3.6, deepseek-v4) como fallback, NVIDIA APIs grátis (Nemotron, Kimi) como fallback secundário.
---
## 📦 O QUE TEMOS (inventário de tudo que existe)
### Infraestrutura rodando agora (20 containers)
**Core M5 (motor e-commerce)**
- `m5_saleor` (porta 8000) — motor headless, GraphQL em `https://loja.m5digital.net.br`
- `m5_saleor_dashboard` (porta 80) — admin em `https://dashboard.m5digital.net.br`
- `m5_postgres` (5432) — banco principal
- `m5_redis` (6379) — cache/queue
- `m5_n8n` (5678) — orquestração em `https://n8n.m5digital.net.br`
- `m5_traefik` (80, 443, 8090) — proxy reverso + TLS
**Comunicação**
- `m5_openwa` (2785) — WhatsApp Business em `https://wa.m5digital.net.br` (sessão `marcos-pessoal` READY, `bussines-m5` pendente escanear QR)
- `chatwoot-chatwoot-1` + `sidekiq` + `postgres` + `redis` — Suporte em `https://chat.m5digital.net.br`
**CRM (novo no lugar do Hermes CRM descartado)**
- `twenty_front` + `twenty_postgres` (5434) + `twenty_redis` — Twenty CRM multi-tenant em `https://crm.m5digital.net.br`
- container de chatwoot mantido por enquanto (decidir se mantém ou descontinua)
**Gestão**
- `m5_gitea` (3000, 2222) — código-fonte em `https://git.m5digital.net.br`
- `portainer` (8000, 9000, 9443) — UI de Docker (acessível direto, sem traefik)
**Proxy LLM**
- `omniroute` (20128) + `omniroute-redis` — roteador de APIs Anthropic-compatíveis com sticky sessions (gateway.digitalavello.shop)
**Operações auxiliares**
- `yt-pub-livesx-dashboard-1` + `scheduler-1` — pipeline de vídeo (inema)
### Repositórios / código produzido
| Local | Estado |
|-------|--------|
| `https://git.m5digital.net.br/m5digital/ecom-store` | ✅ 2 commits pushados (m5log + workflows + Traefik) |
| Token de acesso Gitea | salvo em `/root/ecommerce/.gitea_token` (chmod 600, fora do git) |
**Conteúdo atual do repo `ecom-store`:**
```
ecom-store/utils/{__init__.py, example_usage.py, m5log.py}
ecom-store/README.md, .gitignore
scripts/traefik-conf/routes.yml
workflows/{README-FASE5-OPENWA-TWENTY.md, m5-openwa-to-twenty.json, m5-twenty-to-openwa.json,
chatwoot-integration.json, n8n-current/*.json}
```
### Capacidades AI / Skills Hermes instaladas (~40 skills)
**E-commerce (18)**:
- marketplaces: `ecommerce-amazon`, `ecommerce-mercadolivre`, `ecommerce-shopee`, `ecommerce-magalu`, `ecommerce-tiktok-shop`
- canais próprios: `ecommerce-site-proprio`, `ecommerce-b2b`, `ecommerce-b2c`, `ecommerce-dropshipping`
- estratégia: `ecommerce-gtm`, `ecommerce-marketing-automation`, `ecommerce-peak-events`, `ecommerce-omni-channel`, `ecommerce-analytics`, `ecommerce-legal-br`, `ecommerce-logistics`, `ecommerce-unit-economics`
- setup: `setup_ecommerce-setup`, `tutorial_ecommerce-tutorial`
- consolidação: `ecommerce-ccops`
**Produtividade (5 criadas)**: skill-status, skill-context, skill-quality, skill-ultrathink, skill-auto-verify
**N8N + DevOps**: `nvidia-apis`, `mlops`, `data-science`, `autonomous-ai-agents`, `computer-use`
**INEMA materials em `/root/inema_materiais/`**:
- `viralads/` — curso UGC, ViralAds (skill pra anúncios)
- `yt-pub-livesx/` — pipeline de vídeo Docker (rodando)
- `ads-skill.zip` (já instalado em `~/.hermes/skills/ads-skill/`)
- `ClaudeOS-Hermes-V2.3.zip` — dashboard operacional (88MB)
### Backups críticos
| Local | Conteúdo |
|-------|----------|
| `/root/backups/2026-07-06_pre-crm-reorg/` | Pre-fase3 (substituição Hermes→Twenty CRM) |
| `/root/ecommerce/backup/` | 7 snapshots do vault (29/jun → 05/jul) — vault_*.tar.gz, 167KB cada |
| `/root/ecommerce/logs/` | Logs m5log (JSON clean rotacionado) |
| `/root/backups/2026-07-06_pre-crm-reorg/hermes-crm-*.{tar.gz,dump}` | Hermes CRM código + DB + minio (manter 30d no mínimo por descarte) |
---
## 🟢 O QUE FUNCIONA (validado hoje)
| Componente | Validação |
|------------|-----------|
| `loja.m5digital.net.br` (Saleor) | HTTP 200 |
| `dashboard.m5digital.net.br` (Saleor admin) | HTTP 200 |
| `git.m5digital.net.br` (Gitea) | HTTP 200, push feito (commits 492fed6, d8d68df, af72ad5) |
| `n8n.m5digital.net.br` | HTTP 200, **login OK** (admin@m5online.com.br / M5Online@2026), 2 workflows reais ativos |
| `wa.m5digital.net.br` (OpenWA) | HTTP 200, API key funciona, sessão `marcos-pessoal` READY |
| `crm.m5digital.net.br` (Twenty CRM) | HTTP 200 (wizard ainda não finalizado pela Iris) |
| `chat.m5digital.net.br` (Chatwoot) | HTTP 200 |
| `video.m5digital.net.br` (yt-pub-livesx) | HTTP 401 auth interno (esperado, HEAD 200) |
| `http://31.220.78.126:8090` (Traefik dashboard) | UP |
| `http://31.220.78.126:2785` (OpenWA direto) | UP |
| Backup pre-Fase 3 | íntegro, MANIFEST.md com SHA-256, compactado em `hermes-crm-bundle.tar.gz` (84KB) |
### Workflows n8n ativos (2)
| ID | Nome | Webhook | Teste |
|----|------|---------|-------|
| `1zXyQ9KxAhYd0SYH` | M5 — OpenWA → Twenty CRM | `https://n8n.m5digital.net.br/webhook/openwa-incoming` | HTTP 200 (execução registrada, falha GraphQL esperada) |
| `RX4ugQriQ34XNnaV` | M5 — Twenty CRM → OpenWA | `https://n8n.m5digital.net.br/webhook/twenty-outgoing` | HTTP 200 (execução registrada) |
### Logger M5 (commit `492fed6`)
- Wrapper loguru com 3 modos: texto (default), JSON (`M5_LOG_JSON=1`), JSON clean para Loki/Elastic (`M5_LOG_JSON_CLEAN=1`)
- 3 sinks: console colorido + `m5-{date}.log` (30d retenção) + `m5-errors-{date}.log` (90d)
- Compressão gzip automática
- Função `bind_context(**kwargs)` para agents/requests
- `example_usage.py` com 4 cenários reais
---
## 🔴 O QUE ESTÁ PENDENTE / QUEBRADO
### Crítico (bloqueia operação)
1. **Setup manual do Twenty CRM via browser** (`https://crm.m5digital.net.br`)
- Você está fazendo agora
- Bloqueia: criação de workspace, schema customizado, configurações iniciais
- **Nota**: workflows n8n já tentam chamar GraphQL do Twenty e falham com erro (esperado até workspace existir)
2. ~~**Setup manual do n8n via wizard de login**~~ **✅ RESOLVIDO**
- Login agora funciona: `admin@m5online.com.br` / `M5Online@2026`
- Causa raiz: n8n usa SQLite (`/var/lib/docker/volumes/m5_n8n_data/_data/database.sqlite`), não Postgres
- Senha antiga estava em formato não-bcrypt após `user-management:reset`
- Solução aplicada: bcryptjs hash + auth_identity criada direto no SQLite
- **2 workflows reais importados e ativos** (substituíram os 3 stubs)
3. **Sessão WhatsApp `bussines-m5`** não foi escaneada
- Acessar dashboard `https://wa.m5digital.net.br`, escanear QR
- Bloqueia testes WhatsApp → Twenty CRM com a conta business
### Importante
4. ~~**Workflows n8n precisam ser importados via UI**~~ **✅ RESOLVIDO**
- `m5-openwa-to-twenty.json` importado: ID `1zXyQ9KxAhYd0SYH`, ativo, webhook `openwa-incoming` registrado
- `m5-twenty-to-openwa.json` importado: ID `RX4ugQriQ34XNnaV`, ativo, webhook `twenty-outgoing` registrado
- **3 stubs legados removidos** (chatwoot/saleor/twenty-webhook-001)
5. **Registrar webhook OpenWA** → n8n
- Apontar para `https://n8n.m5digital.net.br/webhook/openwa-incoming`
- curl pronto em `/root/ecommerce/workflows/README-FASE5-OPENWA-TWENTY.md`
6. **Webhook Twenty → n8n** (configurar via Settings do Twenty)
- Apontar para `https://n8n.m5digital.net.br/webhook/twenty-outgoing`
7. **Saleor sem produtos** (zerado em 21/jun/2026)
- Pendência desde 22/jun (vide PONTO-DE-PARTIDA-22jun2026.md)
- Criar admin + catalogar produtos
8. **Sessão WhatsApp `bussines-m5`** (repete #3)
### Melhorias
9. **n8n warning `X-Forwarded-For`**`N8N_TRUST_PROXY=true` já está setado mas o warning persiste
10. **Gitea está usando HTTP interno** (porta 3000), precisa fix se quiser parar de usar Traefik
11. **Multi-tenant workspace Twenty** — configurar quando finalizar setup inicial
12. **INEMA materials** instalados mas parcialmente explorados (yt-pub rodando, viralads parado)
13. **Chave do gateway.digitalavello.shop** (omniroute) — token OK mas config de sticky sessions precisa ser afinada
14. **Pipeline de vídeos** (yt-pub-livesx) tem auth interna, documentar credenciais para a Iris
15. **API key do n8n** (`n8n_api_6878...`) não funciona direto — usar cookie de sessão via `/rest/login` em vez disso
### Descontinuado / descontinuável
- **Hermes CRM** — substituído por Twenty (containers parados, removidos; backups em `/root/backups/2026-07-06_pre-crm-reorg/`)
- **5 services Traefik** (`crm-frontend`, `crm-backend`, e routers associados) removidos
- **Rede `hermes_crm_network`** órfã (removida nesta sessão)
- **3 workflows n8n stubs** (chatwoot-webhook-001, saleor-webhook-001, twenty-webhook-001) — removidos, substituídos pelos workflows reais
---
## 💡 AVALIAÇÃO HONESTA (skill-quality: questionar respostas medíocres)
### O que está ótimo
- **Traefik limpo e validado** — IP fixos eliminados, todos os subdomínios respondem
- **Logger M5** — implementação profissional (3 modos, rotação, contexto), reutilizável em todo o motor
- **Documentação de Fase 5** — README detalhado pra você executar tudo no browser quando voltar
- **Substituição Hermes → Twenty CRM** — conservadora (backup completo + validação HTTP), sem perda de dados
- **Repo no Gitea + token versionado** — push feito, autoria sua
- **n8n login RESOLVIDO** — causa raiz identificada (SQLite, não Postgres), bcryptjs correto, auth_identity criada
- **2 workflows reais importados e ativos** — substituem os stubs legados, com webhooks prontos
### O que precisa melhorar
- **Twenty CRM ainda sem workspace** — workflows n8n já tentam GraphQL e falham (esperado)
- **Falta E2E test** — nenhum teste validou WhatsApp→CRM→WhatsApp ponta-a-ponta
- **Sessão WhatsApp `bussines-m5` ainda pendente** — QR precisa ser escaneado
- **Vault Obsidian** — SYSTEMS-STATUS.md e HIGIENIZACAO-06jul2026.md atualizados, mas outros docs (TWENTY-CRM-SETUP.md) ainda têm info desatualizada
- **Integração com 6 marketplaces** (Mercado Livre, Shopee, etc) tem skills prontas mas 0 código de integração feito
### Riscos identificados
1. **n8n SQLite é single-point-of-failure** — sem replica. Backup local em `/tmp/n8n_pre_clean.db` mas precisa rotina automatizada.
2. **Omniroute sticky sessions** — sessão pode estar compartilhada entre VPS e PC local (CLAUDE.md alerta: "SAME bot Telegram em VPS + PC local = CONFLITO"). Verificar se omniroute tem o mesmo problema
3. **Twenty CRM API key ausente** — workflows usam GraphQL direto, sem token. Se Twenty exigir auth em prod, vai precisar revisar.
4. **API key do n8n (`n8n_api_6878...`) não funciona** — pode ter sido regenerada em algum reset. Usar cookie de sessão via `/rest/login` em scripts futuros.
### Mudanças nesta sessão (06/jul/2026 — atualizado 21:30)
| Hora | Ação |
|------|------|
| ~16:30 | Higienização completa (14 volumes + 14 imagens + 2 networks removidos) |
| ~17:30 | Vault Obsidian sincronizado (SYSTEMS-STATUS.md + HIGIENIZACAO-06jul2026.md) |
| ~17:30 | CLAUDE.md atualizado para 06/jul |
| ~17:30 | Commit `af72ad5` (post-higienização) pushado para Gitea |
| ~21:00 | **n8n login RESOLVIDO** — bcryptjs hash + auth_identity criada no SQLite |
| ~21:23 | **Workflow m5-openwa-to-twenty importado** — ID `1zXyQ9KxAhYd0SYH`, ativo |
| ~21:26 | **Workflow m5-twenty-to-openwa importado** — ID `RX4ugQriQ34XNnaV`, ativo |
| ~21:30 | **3 stubs legados removidos** — chatwoot/saleor/twenty-webhook-001 |
| ~21:30 | HANDOFF atualizado |
---
## 🛣️ PRÓXIMOS PASSOS (Fase 5 — integração WhatsApp ↔ Twenty)
**Status Fase 5**: 80% completo. Falta:
1. **Você finalizar wizard do Twenty CRM** via browser (`https://crm.m5digital.net.br`)
- Criar workspace
- Schema customizado se quiser (Person/Company/Note já são nativos)
2. **Escanear QR sessão `bussines-m5`** no OpenWA (`https://wa.m5digital.net.br`)
3. **Registrar webhook OpenWA** apontando para n8n:
```bash
curl -sk -X POST "https://wa.m5digital.net.br/api/sessions/marcos-pessoal/webhooks" \
-H "X-API-Key: $OPENWA_KEY" \
-H "Content-Type: application/json" \
-d '{"url":"https://n8n.m5digital.net.br/webhook/openwa-incoming","events":["message.received"],"secret":"defina-seu-segredo"}'
```
4. **Configurar webhook Twenty → n8n** (Settings → Webhooks no Twenty)
- URL: `https://n8n.m5digital.net.br/webhook/twenty-outgoing`
- Events: `note.created`, `person.updated`
5. **Teste end-to-end** com 1 mensagem WhatsApp real
### Outras opções
**Opção B — Pular pra motor e-commerce**
- Larga WhatsApp/Twenty pra depois
- Foca em catalogar produtos no Saleor (1 categoria → 100 SKUs de teste)
- Cria API token Saleor para uso programático
- Ativa 1 marketplace (provavelmente Mercado Livre, o de maior prioridade)
**Opção C — Higienização adicional**
- ✅ Já feita: 14 volumes + 14 imagens + 2 networks + 3 stubs n8n
- Pendente: triagem de 60+ arquivos untracked no git (CRM-OPEN-SOURCE-COMPARISON.md, HERMES-CRM-BUILD-PLAN.md, etc — criados em sessões anteriores, decidir se commita ou remove)
---
## 📁 ARQUIVOS IMPORTANTES REVISITAR
| Caminho | Para que serve |
|---------|----------------|
| `/root/ecommerce/HANDOFF-2026-07-06.md` | ESTE ARQUIVO |
| `/root/ecommerce/CLAUDE.md` | Visão geral do projeto (atualizado 06/jul) |
| `/root/ecommerce/PONTO-DE-PARTIDA-22jun2026.md` | Status detalhado do dia 22/jun |
| `/root/ecommerce/vault/ecommerce-kb/SYSTEMS-STATUS.md` | Status atual dos sistemas (atualizado 06/jul) |
| `/root/ecommerce/vault/ecommerce-kb/HIGIENIZACAO-06jul2026.md` | Log da limpeza |
| `/root/ecommerce/workflows/README-FASE5-OPENWA-TWENTY.md` | Passo-a-passo Fase 5 |
| `/root/ecommerce/workflows/m5-openwa-to-twenty.json` | Workflow WhatsApp → CRM (importado em `1zXyQ9KxAhYd0SYH`) |
| `/root/ecommerce/workflows/m5-twenty-to-openwa.json` | Workflow CRM → WhatsApp (importado em `RX4ugQriQ34XNnaV`) |
| `/root/ecommerce/scripts/traefik-conf/routes.yml` | Roteamento HTTP, 9 subdomínios |
| `/root/ecommerce/ecom-store/utils/m5log.py` | Logger M5 (303 linhas, núcleo do motor) |
| `/var/lib/docker/volumes/m5_n8n_data/_data/database.sqlite` | n8n DB real (SQLite) |
| `/tmp/n8n_pre_clean.db` | Backup pré-limpeza stubs |
| `/root/.claude/CLAUDE.md` | Skills Hermes auto-invocadas |
| `/root/inema_materiais/` | Material INEMA (cursos, ads, vídeo) |
| `/root/backups/2026-07-06_pre-crm-reorg/MANIFEST.md` | Inventário com SHA-256 |
---
## 🔐 Credenciais em uso (NÃO commitar)
| Sistema | User/Email | Senha |
|---------|-----------|-------|
| n8n | `admin@m5online.com.br` | `M5Online@2026` |
| OpenWA | API Key header | `owa_k1_1e56b98c39a2daa5bdb537d04f35da17117021bedc8c1de80eaba2926c584b39` |
| Gitea | `Matm` | token em `/root/ecommerce/.gitea_token` |
| Saleor | (sem admin criado) | — |
| Twenty CRM | (sem admin criado) | — |
| Chatwoot | `admin@m5online.com.br` | (password em `/root/ecommerce/scripts/.env`) |