# Wireframes — Spec 030 Agentic Ops UI

**Data:** 2026-06-20  
**View Desk:** `agentic-ops` · `#agentic-ops-content`

---

## 1. Status bar (fixo no topo da view)

```text
┌─────────────────────────────────────────────────────────────────────────┐
│ Agentic Ops                    Tier [T1]  Ollama ●  qwen2.5:7b          │
│                                Último tick: há 4 min  ·  Worker OK      │
│                                Abertos: 2 alto · 2 aviso · 5 ok         │
│                                                      [Actualizar] [Tick]│
└─────────────────────────────────────────────────────────────────────────┘
```

**Dados:** `GET /api/v1/agents/overview` (novo) ou compor de `/health` + último run em `/action-log`.

**Estados Ollama:**
- `● verde` — tier t1 + ollama true
- `● amarelo` — tier t1 + ollama false (fallback T0)
- `T0` badge — LLM desligado

---

## 2. Fleet rail (coluna esquerda, ~220px)

```text
┌──────────────────┐
│ FROTA  A0–A7     │
├──────────────────┤
│ ● Maestro    A0  │  ← pulse se orchestrator activo
│ ○ Pulso      A1  │
│ ○ Trilho     A2  │
│ ○ Carta      A3  │  (futuro — disabled/grey)
│ ○ Escudo     A4  │
│ ○ Sentinela  A5  │
│ ● Copiloto   A6  │  ← seleccionado para chat
│ ○ Remediador A7  │
├──────────────────┤
│ Vigia · Curador  │
├──────────────────┤
│ Filtrar: [Todos ▼]│
└──────────────────┘
```

**Interacção:** click agente filtra cards do board; double-click abre chat A6 pré-preenchido.

**Indicador pulse:** agente com ≥1 incidente `open` no cenário mapeado (Spec 029 `SCENARIO_AGENT_MAP`).

---

## 3. Mission Board — kanban por severidade

Colunas (horizontal scroll se necessário):

| Coluna | Cor borda | Max cards visíveis |
|--------|-----------|-------------------|
| CRÍTICO | `#ef4444` | todos |
| ALTO | `#f97316` | todos |
| AVISO | `#eab308` | 8 + “+N” |
| OK / Silencioso | `#64748b` | collapsible |

### Incident card (template)

```text
┌─────────────────────────────────────┐
│ [ALTO]  FOSSBilling VM123 down      │
│ Vigia · vm123.finance.stack         │
│ Detectado há 6 min · 12 ocorrências │
├─────────────────────────────────────┤
│ Acção: Verificar docker compose na  │
│ VM123 finance stack…                │
├─────────────────────────────────────┤
│ [Abrir]  [Ack]  [⋯]                 │
└─────────────────────────────────────┘
```

**Card activo:** borda `2px solid var(--accent)` + fundo `rgba(59,130,246,0.08)`.

**Menu ⋯:** Copiar acção · Ver runs · Criar ticket (futuro UI-E).

---

## 4. Context panel (coluna direita, ~360px)

Estados:

### A — Nenhum card seleccionado

```text
┌─────────────────────────┐
│ CONTEXTO                │
│ Seleccione um incidente │
│ no board ou use o       │
│ Copiloto abaixo.        │
├─────────────────────────┤
│ Chat Copiloto (A6)      │
│ [textarea]              │
│ [Perguntar]             │
└─────────────────────────┘
```

### B — Card seleccionado

```text
┌─────────────────────────┐
│ FOSSBilling VM123 down  │
│ Thread #47 · Vigia      │
├─────────────────────────┤
│ ▼ Timeline (3 eventos)  │
│ 06:32 tick · degraded   │
│ 06:22 tick · degraded   │
│ 06:12 finding criado    │
├─────────────────────────┤
│ [mensagens thread…]     │
│ [responder…] [Enviar]   │
├─────────────────────────┤
│ Copiloto A6             │
└─────────────────────────┘
```

---

## 5. Run timeline (faixa inferior, opcional collapsible)

```text
┌─────────────────────────────────────────────────────────────────────────┐
│ Últimas 24h — ticks worker                                              │
│ 06:32 ████ 9/9 cenários · 4 findings                                    │
│ 06:22 ████ · 4 findings                                                 │
│ 06:12 ████ · 4 findings                                                 │
└─────────────────────────────────────────────────────────────────────────┘
```

**Implementação v1:** lista simples; v2 sparkline SVG (como wizard SOC em `app.js`).

---

## 6. Mobile (<768px)

```text
┌─────────────────────────┐
│ Status bar (compact)    │
├─────────────────────────┤
│ [Board][Frota][Contexto]│  ← tabs
├─────────────────────────┤
│ (tab activa)            │
└─────────────────────────┘
```

---

## 7. Empty / loading / error

| Estado | UI |
|--------|-----|
| Loading | Skeleton 3 colunas + “Carregando mission board…” |
| Empty | Ilustração minimal + “Ambiente saudável — 9/9 cenários OK” |
| Error | Banner vermelho + botão retry (não substituir página inteira) |
| 401 | Redirect login (já via `api()` global) |

---

## CSS — classes propostas (prefixo `ao-`)

```css
.ao-shell { display: grid; grid-template-columns: 220px 1fr 360px; gap: 1rem; }
.ao-status-bar { … }
.ao-fleet-rail { … }
.ao-board { display: grid; grid-template-columns: repeat(4, minmax(200px, 1fr)); gap: .75rem; }
.ao-incident-card { min-height: 140px; cursor: pointer; }
.ao-incident-card--active { … }
.ao-severity--critical { border-left: 4px solid #ef4444; }
.ao-context-panel { display: flex; flex-direction: column; min-height: 480px; }
```

Integrar em `styles.css` ou ficheiro `agentic-ops.css` importado só na view.

---

## Migração desde layout 029 (3 colunas)

| 029 | 030 |
|-----|-----|
| Coluna roster expandido | Fleet rail compacto |
| Inbox lista longa | Cards no kanban |
| Findings lista duplicada | Merge no card |
| Dropdown threads | Context panel ao seleccionar |
| Chat no fundo | Chat fixo no context panel |

**Rollback:** feature flag `AGENTIC_UI_V2=true` em `.env` ou toggle módulo Desk (Spec 015).
