Não lançado
Em desenvolvimentoAdded
- Página `/conta` com DSAR self-service: download do export de dados (route handler com `Content-Disposition` e `no-store`) e exclusão de conta com confirmação digitada validada no servidor; link "Minha conta" no dashboard. E2E `dsar.spec.ts` + baseline a11y. (#11)
- Playback de vídeo Bunny Stream: `BunnyService` com Token Authentication HMAC-SHA256 (`node:crypto`, fixado em unit test com fixture), endpoint unificado `GET /videos/lesson/:lessonId/playback` com validação de matrícula, componente `VideoPlayer` com hls.js dinâmico, renovação de token e estados de processamento do `video_jobs`. (#9)
- Schema de billing agnóstico de provedor (ADR 0016): tabelas `plans`, `subscriptions`, `payments` com RLS FORCE, FK composta anti-cross-tenant, grants por coluna e testes de isolamento; decisão de provedor adiada. (#8)
- Testes de isolamento RLS para `badge_classes` e `certificates` — 100% das tabelas com `tenant_id` cobertas. (#5)
- E2E para fluxos críticos: quiz (aprovação/reprovação/tentativas), matrícula via catálogo e gestão de membros admin. (#10)
- Coverage v8 no CI com artifact e thresholds ratchet; unit tests em `packages/shared` (sanitizeContentRef, schemas Zod), `packages/auth` (CASL) e `apps/web` (PKCE/OIDC); job `ai-workers-lint` (ruff). (#6)
Fixed
- Build standalone do Next.js não copiava `.next/static`/`public`: o servidor E2E respondia 404 para todos os chunks e nenhuma página hidratava — testes de cliente eram impossíveis. Alinhado ao comportamento do Dockerfile de produção. (#10)
- Job Semgrep quebrado silenciosamente: a imagem `latest` (1.164.0) falha na validação de regras do registry e o `continue-on-error` mascarava; imagem pinada em `semgrep/semgrep:1.116.0`. (#7)
- Duas violações sérias de contraste (WCAG AA) em `/app` e `/cursos`, detectáveis após a correção de hidratação. (#10)
- `PRIVACY.md` descrevia export/exclusão com comportamento que o código não tem (email assíncrono; anonimização com agregados); alinhado ao tratamento real e ao canal `/conta`. (#11)
Security
- Jobs Trivy e Semgrep do CI tornados bloqueantes após triagem completa (Trivy: 0 CVEs HIGH/CRITICAL; Semgrep: 2 findings resolvidos). (#7)
- `verify-publish-guards.cjs`: `execSync` com interpolação de path trocado por `execFileSync` sem shell (elimina injeção de comando). (#7)
- Endpoint unificado de playback valida matrícula ativa do aluno — o endpoint antigo validava apenas tenant. (#9)
Changed
- RELEASE_NOTES.md atualizado com backfill narrativo v0.1.0 → v1.0.0. (#6)
- Links de comparação do changelog apontam para o repositório real e incluem a v1.0.0.