# Fase 13 — Cutover produção + rollback preparado

**Status:** runbooks + checker concluídos neste lab; **cutover não executado**  
**Data:** 2026-08-19  
**Aceite original do roteiro:** “aceite formal e iVMS desativado” — **não cumprido** (não há produção Windows/iVMS/HDD/VLAN neste host)

## Contexto de desenvolvimento

Host `evo` (4 vCPU, ~8 GB, pastas `disk01`/`disk02` no mesmo filesystem, câmeras lavfi, `192.168.20.x` inacessível). Executar o cutover aqui apagaria a única gravação de laboratório e não substituiria o iVMS.

## O que foi entregue

- [`docs/CUTOVER.md`](CUTOVER.md) — ordem, portões, lotes, o que não fazer
- [`docs/ROLLBACK.md`](ROLLBACK.md) — reinstall Windows+iVMS; histórico IPCAM não volta para o iVMS
- `php artisan ipcam:cutover-check` — lê estado; **não** liga gravação; **não** desliga iVMS; **não** formata
- `php artisan ipcam:export-cameras` — JSON **sem senhas** (URLs redigidas)
- Testes: lab = NO-GO e gravação intacta; manifesto sem secret; portões verdes no cenário simulado **sem** ligar recorder

## Resultado do checker neste lab (2026-08-19)

```text
Câmeras reais: 0 · lab/lavfi: 60 · gravando: 0
NO-GO: storage_root, disks_uuid, disks_independent, real_cameras,
       ivms_export, nvr_reserve, rollback_media
cutover_executed=false  ivms_disabled=false
```

Carga simulada **não** está gravando (portão `carga_off` ok). O checker não alterou `recording_enabled`.

## Aceite nesta fase (lab)

| Critério | Resultado |
|---|---|
| Runbook de cutover | OK |
| Runbook de rollback | OK |
| Checker não tem efeito colateral em `recording_enabled` | OK (teste) |
| Export sem senha | OK (teste) |
| iVMS desativado | **Não** — não há iVMS neste host |
| Aceite formal de produção | **Não** — aguarda hardware/VLAN/export reais |

## Fora desta fase

Executar o cutover de verdade (Ubuntu no servidor Windows, mounts UUID, 60 câmeras reais). WebRTC. Worker de reencode (NO-GO no lab, Fase 12).
