# Changelog

## [1.0.1] - 2026-06-21

### Correções de segurança
- **IDOR corrigido**: endpoints de posts, mídia e publicação agora verificam se o recurso pertence ao usuário autenticado antes de operar (helpers `findContentForUser` / `findSiteForUser`). Antes, um usuário podia acessar/editar/publicar/deletar conteúdo de outros trocando o ID na URL.
- **Vazamento de senha do WordPress**: o model `Site` agora oculta `wp_password` nas respostas da API (antes a senha criptografada era enviada ao frontend em toda listagem).
- **Rate limiter à prova de spoofing**: o IP do cliente só usa cabeçalhos de proxy (X-Forwarded-For, CF-Connecting-IP) quando `TRUSTED_PROXY=1` está configurado; caso contrário usa apenas `REMOTE_ADDR`.

### Correções de bugs
- **Booleanos no MySQL**: com `PDO::ATTR_EMULATE_PREPARES => false`, valores `true`/`false` eram gravados como string vazia em vez de `1`/`0`. Corrigido centralmente em `Database`. Isso restaura o funcionamento do dashboard de limites (`is_active`) e da deduplicação de alertas (`acknowledged`).
- **Posts agendados nunca publicavam**: adicionado `PublishService::publishDueScheduled()`, chamado pelo cron, que publica conteúdos cujo horário agendado já chegou.
- **`update()` reescrevia todos os campos**: implementado rastreamento de campos modificados (dirty tracking); agora o UPDATE só altera os campos realmente mudados, sem tocar em `created_at`/`updated_at` indevidamente.
- **Processamento duplicado de jobs**: adicionado lock atômico no `Queue` (`UPDATE ... WHERE status='pending'`) para evitar que execuções sobrepostas do cron processem o mesmo job duas vezes.
- **Filtro `?status=` ignorado** na listagem de posts: agora aplicado corretamente.
- **`where('coluna', null)`** deslocava o operador: corrigido usando `func_num_args()` em vez de checar se o valor é null.
- **Content-Type com sufixo** (`image/jpeg; charset=binary`) era rejeitado: agora extrai apenas o MIME base.
- **Vazamento de memória GD**: `processWithGD` agora libera os recursos de imagem mesmo em caso de erro (bloco `finally`).
- **Erro de cURL no upload** ao WordPress agora é detectado e reportado explicitamente.
- **Blacklist de tokens** crescia indefinidamente: o cron agora remove tokens expirados diariamente.

## [1.0.0] - 2026-06-19

### Adicionado
- Sistema completo de gestão de conteúdo com IA
- Integração com provedores de IA: Claude (Anthropic), Gemini (Google), OpenAI
- Geração e processamento de imagens (IA, stock, upload manual)
- Publicação automática e agendada no WordPress via REST API
- Dashboard administrativo interativo (Alpine.js)
- Editor de conteúdo com validação SEO em tempo real e versionamento
- Sistema de quotas e limites de imagens IA (diário/semanal/mensal/customizado)
- Alertas automáticos de limite com contagem regressiva de reset
- MCP Server para integração com Claude Desktop
- Sistema de fila de jobs assíncrono com retry automático
- Autenticação JWT própria com suporte a 2FA (TOTP)
- Sistema de roles (admin, editor, redator)
- Instalador web com wizard de 5 passos
- Auditoria SEO estilo Yoast (título, meta description, densidade de palavra-chave, H1/H2)
