# Fase 11 — Carga 60 simuladas + endurecimento

**Status:** concluída neste ambiente de desenvolvimento (com teto honesto de hardware)  
**Data:** 2026-08-19

## Contexto de desenvolvimento

Este host (4 vCPU Xeon E5-2620, ~8 GB RAM, pastas `disk01`/`disk02` no mesmo filesystem, **sem HDD**, **sem câmeras reais**) **não** aguenta 60 FFmpeg simultâneos nem grade 4×4 em main. O roteiro já classificava a máquina como inadequada para isso.

## O que foi feito

- Cadastro de **60 câmeras lavfi** (`Carga 01`…`Carga 60`, grupo “Carga simulada”), **gravação desligada**
- Teto `IPCAM_RECORDER_MAX_FFMPEG` (default **8** no lab) — o supervisor não spawna além disso
- SLA: % das câmeras habilitadas com `last_segment_at` na janela `2 × segmento + 30 s` (limiar 95%)
- CLI: `ipcam:seed-load`, `ipcam:load-report`, `ipcam:load-run` (lote ≤ 12 sem `--force`)
- Endurecimento do recorder: `LimitNOFILE=4096`, `TasksMax=256`, heartbeat sem `relative_path`
- Índice `cameras.last_segment_at`
- Dashboard: card de SLA + teto FFmpeg
- Testes: seed sem ligar gravação; teto=1 grava 1 de 3; 3 lavfi concurrentes ≥95% SLA

## Aceite neste host

| Critério | Resultado |
|---|---|
| 60 simuladas cadastradas | OK (`ipcam:seed-load`) |
| Gravação em massa NÃO ligada | OK (protege CPU/disco do lab) |
| Teto de FFmpeg respeitado | OK (teste) |
| SLA ≥95% em lote pequeno (3) | OK (teste) |
| Relatório sem path/senha | OK |
| 60 FFmpeg reais neste host | **Fora de capacidade** — medir em staging/produção |

## Como operar

```bash
php artisan ipcam:seed-load --count=60
php artisan ipcam:load-report
```

Não execute `ipcam:load-run` com `ipcam-recorder.service` ativo.

## Fora desta fase

PoC reencode 8–30 dias (Fase 12 — **NO-GO** neste lab), cutover produção (Fase 13 — runbooks; cutover **não** executado neste lab), WebRTC, MediaMTX com 60 publishers.
