# Spec 037 V4 — Wizard DNS Viewer

**Spec:** [dns-viewer.md](../../specs/037-dns-multi-cloudflare-orchestration/dns-viewer.md) · **Rollback:** [DNS-VIEWER-ROLLBACK.md](../../specs/037-dns-multi-cloudflare-orchestration/deploy/DNS-VIEWER-ROLLBACK.md) § VM112

Painel **read-only** no **passo DNS existente** (step 1) — **não** é menu nem página nova.

**Estado:** 📋 patches versionados no monorepo · deploy VM112 **pendente** (SSH CT130 falha: LAN permission denied, WAN timeout).

---

## Pré-requisitos

| Variável | Valor | Onde |
|----------|-------|------|
| `DESK_API_URL` | `http://10.10.10.122:8080` | env wizard backend |
| `OPS_INTERNAL_TOKEN` | igual ao Desk | env wizard + Desk `.env` |

Desk endpoint aceita `X-Ops-Internal-Token` via `require_internal_or_user` (`main.py`).

---

## Backend

```bash
# Na VM112 (paths locais após git pull / rsync monorepo)
python3 /opt/ligbox-ops-platform/deploy/vm112-wizard/onboarding-dns-viewer-v4.patch.py
systemctl restart ligbox-wizard 2>/dev/null || docker compose -f /opt/ligbox-wizard/docker-compose.yml restart backend
```

| Item | Valor |
|------|-------|
| Endpoint | `GET /api/onboarding/dns/viewer/{domain}` |
| Auth sessão | Header `X-Onboarding-Session` |
| Proxy | Desk `GET /api/v1/dns/viewer/{domain}?email_service=true` |
| Resposta | Mesma shape Desk; `edit_links=[]`; `viewer_context=wizard_onboarding` |

---

## Frontend

```bash
python3 /opt/ligbox-ops-platform/deploy/vm112-wizard/frontend-dns-viewer-v4.patch.py
cd /opt/ligbox-wizard/frontend && npm run build
# Reiniciar serviço static/nginx conforme stack VM112
```

## UI (sem nova rota)

Painel lateral abaixo das opções DNS no step 1:

- Badge modo (Ligbox / externo / OpenPanel)
- Tabela registos (max 12 linhas)
- Secção «Serão aplicados» se `planned_records`

---

## Validação

```bash
# Com sessão onboarding válida
curl -sS -H "X-Onboarding-Session: <session>" \
  "http://127.0.0.1:8090/api/onboarding/dns/viewer/exemplo.com.br" | jq .mode_label,.summary
```

Browser: `onboard.ligbox.com.br` → passo DNS → painel «Apontamentos DNS (visualização)» após escolher caminho.

---

## SSH / deploy a partir do CT130

| Destino | Comando | Resultado conhecido |
|---------|---------|---------------------|
| LAN | `ssh root@10.10.10.112` | Permission denied (password `805353` não válida) |
| WAN | `ssh -p 2512 root@95.216.14.146` | Timeout a partir CT130 |

**Acção:** Roger aplica patches directamente na VM112 ou fornece credencial SSH correcta.

---

## Rollback

```bash
ssh root@10.10.10.112
cd /opt/ligbox-wizard
BACKUP=$(ls -td .backups/dns-viewer-* 2>/dev/null | head -1)
[ -n "$BACKUP" ] && cp -a "$BACKUP"/backend/. backend/
systemctl restart ligbox-wizard 2>/dev/null || docker compose restart backend
```

Ver também rollback completo em `DNS-VIEWER-ROLLBACK.md`.
