# Anais de Referência — Serviços IaaS: Performance, UX Escopo OPS, Blocklist

**Data:** 2026-06-25  
**Utilizador:** Roger  
**Sistema:** Desk VM122 (`10.10.10.122`) · Wizard VM112 (`10.10.10.112`)  
**Specs:** 017 · 018 · 026 · 028 · 032 · 037

---

## 1. Resumo executivo

Sessão de melhorias na página **Serviços IaaS** (Desk):

1. **Performance** — cache VM112 lista + detalhe domínio; cache proxy VM122; SWR frontend.
2. **Modal purge** — skeleton imediato + loading animado (barra, etapas, spinner).
3. **Escopo OPS** — cards clicáveis com camada (tenant/app/infra), Spec e navegação.
4. **Blocklist UI** — `ligbox.com.br` e `itecnologys.com` visíveis na lista e painel Escopo.
5. **Alinhamento lista clientes** — badges agrupados (fix desalinhamento `itecnologys.com`).

---

## 2. Performance — resultados

| Pedido | Antes | Depois (cache quente) |
|--------|-------|------------------------|
| VM112 `GET /api/admin/domains` | ~5–11s | **~0,03s** |
| VM112 `GET /api/admin/domains/{domain}` | ~15–20s | **~0,04s** |
| Desk `GET /api/v1/vm112/domains` | ~16s | **~0,08s** |
| Desk detalhe domínio (2.º hit) | ~15s+ | **~0,1s** |
| Modal purge 1.º hit (cold) | ecrã branco | skeleton + ~10–15s |

**Patch VM112:** `deploy/vm112-wizard/perf-domains-list-20260625/`  
**Desk API:** `VM112_DOMAINS_CACHE_TTL=60`, `VM112_DOMAIN_DETAIL_TTL=45`  
**Poll Serviços:** 90s (`app.js`)

---

## 3. UX Escopo OPS — mapa cards

| Card | Camada | Spec | Destino |
|------|--------|------|---------|
| Carbonio | Aplicação MOSP | 017 | Modal Serviços |
| ligbox-sites | Tenant utilizador | 017 | Modal Serviços |
| Portal users | Tenant utilizador | 028 | Console `/admin/dominio` |
| Cloudflare | Infraestrutura | 037 | Console DNS Viewer |
| Traefik / SNI | Infraestrutura | 026 | Desk Infra CODE |
| Desk OPS | Aplicação MOSP | 017 | Eventos › Histórico purges |

**Helper navegação:** `window.DeskNavigate.go(view, { eventsTab })` — `app.js`

---

## 4. Blocklist purge

| Domínio | Purge API | UI |
|---------|-----------|-----|
| `ligbox.com.br` | HTTP 400 | 🔒 badge + banner Escopo + modal desactivado |
| `itecnologys.com` | HTTP 400 | idem |

Constante: `PURGE_BLOCKLIST` — `vm112_domains.py` + espelho `servicos.js`.

---

## 5. Ficheiros principais

| Ficheiro | Função |
|----------|--------|
| `frontend/assets/servicos.js` | Escopo OPS, loading modal, blocklist, cache SWR |
| `frontend/assets/styles.css` | `.vm112-load-*`, `.servicos-scope-*`, client row grid |
| `frontend/assets/app.js` | `DeskNavigate`, poll 90s |
| `frontend/assets/auth.js` | sessão resiliente rede |
| `frontend/index.html` | cache bust `20260625align1` |
| `api/app/vm112_domains.py` | cache proxy, `purge_blocked` |

---

## 6. Deploy VM122 (referência)

```bash
sshpass -p '805353' scp servicos.js styles.css app.js index.html root@10.10.10.122:/tmp/
ssh root@10.10.10.122 '
  C=ligbox-ops-platform_frontend_1
  docker cp /tmp/servicos.js $C:/usr/share/nginx/html/assets/servicos.js
  docker cp /tmp/styles.css $C:/usr/share/nginx/html/assets/styles.css
  docker cp /tmp/app.js $C:/usr/share/nginx/html/assets/app.js
  docker cp /tmp/index.html $C:/usr/share/nginx/html/index.html
'
```

**Hard refresh:** Ctrl+Shift+R em `https://desk.ligbox.com.br`

---

## 7. Versão frontend (cache bust)

| Asset | Query string |
|-------|----------------|
| `styles.css` | `?v=20260625align1` |
| `servicos.js` | `?v=20260625align1` |
| `app.js` | `?v=20260625align1` |

---

## 8. Specs actualizadas

| Spec | Secção |
|------|--------|
| 017 | Performance cache, UI loading/blocklist/Escopo |
| 018 | Performance, Escopo OPS cards, critérios aceite |
| 032 | UI blocklist |
| 026 | Destino card Traefik |
| 028 | Destino card Portal |
| 037 | Destino card Cloudflare |

---

## 9. Canais de arquivo

| Canal | Path |
|-------|------|
| Anais | `docs/anais-referencia/20260625_SERVICOS_IAAS_PERF_UX_ESCOPO.md` |
| Spec 017 | `specs/017-vm112-domain-orchestration/spec.md` |
| Spec 018 | `specs/018-service-orchestration/spec.md` |
| Patch VM112 | `deploy/vm112-wizard/perf-domains-list-20260625/` |
