# Anexo 037-C — E-mail projeto `proj_*@ligbox.com.br` (agente Ligbox)

**Parent:** [spec.md](./spec.md) · [037-B client-cf-account-lifecycle.md](./client-cf-account-lifecycle.md)  
**Solicitado por:** Roger · **2026-06-22**  
**Status:** 📋 Regra definida — implementação Fase 2

---

## Regra (Roger)

O **agente Ligbox** deve, para cada cliente em onboarding Cloudflare:

1. **Criar caixa real** `proj_{id}@ligbox.com.br` no Carbonio (domínio `ligbox.com.br`).
2. **Gerar senha** segura e **entregar ao cliente** (uma vez, no wizard / e-mail de boas-vindas).
3. **Referenciar este e-mail em todos os processos** ligados à nova conta e à administração dos apontamentos de email da plataforma.

Não é alias passivo — é **identidade operacional do projeto** até handoff ao `admin@{dominio_cliente}`.

---

## Ordem no fluxo (antes de CF + DNS cliente)

```mermaid
flowchart LR
  A[validate-domain] --> B[provision-project-email]
  B --> C[Entrega senha ao cliente]
  C --> D[provision-client-account CF]
  D --> E[provision-zone + apply DNS]
  E --> F[account/create admin@cliente]
  F --> G[handoff CF gestor]
```

| Passo | Acção | E-mail usado |
|-------|--------|--------------|
| 1 | `POST /project/provision-email` | Cria `proj_005@ligbox.com.br` |
| 2 | Resposta wizard | Senha + credenciais webmail `mail.ligbox.com.br` |
| 3 | `POST /dns/cloudflare/provision-client-account` | Membro CF = `proj_005@ligbox.com.br` |
| 4 | `POST /dns/cloudflare/apply` | `activity_log` + webhook com `ligbox_project_email` |
| 5 | `POST /account/create` | `admin@cliente.com.br` (domínio cliente) — **distinto** do proj |
| 6 | Handoff | Convite `admin@cliente` na CF; `proj_*` mantém-se suporte |

---

## Entrega da senha ao cliente

| Canal | Quando |
|-------|--------|
| **Wizard (primário)** | Painel «Credenciais do projeto» após criar `proj_*` — copiar uma vez |
| **E-mail** | Opcional: `notify_email` do wizard → template com link onboard (senha só no painel, não no email por segurança) |
| **Vault servidor** | `onboard_handoff` / vault projeto — TTL 24h; nunca logar senha em `activity_log` |

Texto sugerido no wizard:

> Use `proj_005@ligbox.com.br` para aceder à Cloudflare e acompanhar o setup.  
> Webmail: https://mail.ligbox.com.br/  
> Guarde a senha — não voltará a ser mostrada.

---

## Onde referenciar `ligbox_project_email`

| Sistema | Campo / uso |
|---------|-------------|
| `domain_registry` | `project_id`, `ligbox_project_email`, `ligbox_project_password_delivered_at` |
| Conta Cloudflare | Membro inicial + login convite |
| `POST /dns/cloudflare/apply` | Header interno / payload webhook `project_email` |
| `POST /account/create` | Body metadata `ligbox_project_email` (auditoria) |
| Ops webhook VM122 | `onboard.project_email` no funil 004 |
| `activity_log` | Tag `project:proj_005@ligbox.com.br` em passos DNS/CF |
| Purge / Spec 017 | Não apagar `proj_*` sem confirmação ops |

---

## Registo `domain_registry` (extensão)

```json
{
  "domain": "empresa.com.br",
  "project_id": "005",
  "ligbox_project_email": "proj_005@ligbox.com.br",
  "ligbox_project_display_name": "Projeto Empresa — empresa.com.br",
  "ligbox_project_created_at": "2026-06-22T14:00:00Z",
  "ligbox_project_password_delivered": true,
  "portal_admin_email": "admin@empresa.com.br",
  "cf_account_id": "…",
  "handoff_status": "pending"
}
```

---

## API planeadas (VM112)

| Método | Path | Descrição |
|--------|------|-----------|
| POST | `/api/onboarding/project/provision-email` | Aloca `project_id`, cria `proj_*@ligbox.com.br`, regista domínio |
| GET | `/api/onboarding/project/{domain}` | Estado identidade projeto (sem senha) |
| POST | `/api/onboarding/project/reveal-password` | Uma vez por sessão — devolve senha do vault |

**Implementação Carbonio:** reutilizar `carbonio.create_account_full()` no domínio `ligbox.com.br` (já existe em VM112).

---

## Código (monorepo)

| Ficheiro | Função |
|----------|--------|
| `projects/wizard/backend/app/services/project_identity.py` | Aloca ID, cria caixa, vault senha, registo |
| `deploy/vm112-wizard/project-counter.txt` | Contador sequencial (ou SQLite futuro) |

---

## Critérios de aceitação

1. Cliente recebe `proj_{id}@ligbox.com.br` + senha antes do passo DNS Cloudflare.
2. Mesmo e-mail aparece em CF, registry, webhooks e logs de DNS.
3. `admin@{dominio}` criado no passo 5 permanece e-mail principal do **mail do cliente**.
4. BYO / registrador externo **não** criam `proj_*` (só caminho Cloudflare Ligbox).
