Post, comentário, clip, foto: tudo que um aluno publica entra na plataforma sem nenhuma verificação automática de segurança. O Judge Dredd fecha esse buraco sem tocar no core — a integração inteira são chamadas de 1 linha nos pontos de publicação. Se um dia quisermos agir (ocultar, revisar, notificar o produtor), a fundação já está pronta; a v1 só observa.
try/catch: qualquer falha do módulo
nunca chega no write path de quem postou.
O core não conhece o módulo — ele só avisa que algo nasceu.
AddCommentAction — comentárioPostAppController — post do alunoCreateShortAction — clip / reelValidateUploadedObjectAction — imagem e vídeo enviados
O ModerationConfig lê o nível global e o SamplingDecider tira a sorte
(fonte criptográfica) com a probabilidade daquele tipo de mídia. Ninguém sabe quando será
olhado — dissuasão sem o custo de analisar tudo.
none o JudgeDredd retorna antes de tocar o container: zero query, zero chamada externa, custo zeronone (falha segura)
Sorteado, vira um moderation_scan pendente e um job na fila de baixa prioridade.
Quem postou já seguiu a vida — a análise roda depois, e o job é idempotente
(reprocessar não duplica veredito nem custo).
Providers plugáveis atrás de contratos (TextModerationProvider / MediaModerationProvider) — o default é null, então nada quebra se ninguém estiver configurado.
DetectToxicContent só aceita en. Teste real em PT-BR: frase tóxica → harassment 0.979; frase inocente → cleanDetectModerationLabels, enviada em Bytes (≤ 5 MB), cross-region us-east-1StartContentModeration: exige o objeto na região do Rekognition, então o job copia para o bucket de staging vtp-moderation-staging (us-east-1, lifecycle de 1 dia) e vai buscando o resultado em polls agendadosNada é bloqueado nem ocultado: o resultado só é registrado.
moderation_scans — clean / flagged, labels e scores, com campos já prontos para uma revisão humana futuramoderation_usage_ledger — custo por análise, para saber quanto o nível escolhido está custando0.5Fase 5: os vereditos são consultáveis pela API admin — ainda sem tela no painel.
GET /api/v1/admin/moderation/scans
GET /api/v1/admin/moderation/scans/{scan}
GET /api/v1/admin/moderation/usage
Não bloqueia, não oculta, não devolve erro. Quem publica não nota absolutamente nada — a v1 só gera scan e veredito.
Amostragem por sorteio, não por regra visível. Ninguém consegue prever o que será analisado.
Qualquer exceção do módulo é engolida. O post nunca é afetado por um problema de moderação.
Cada análise registra veredito e custo em ledger próprio, append-only.
Tudo vive em app/Support/Moderation/, no molde da plataforma de IA. Sai do projeto sem cicatriz.
scan e verdict — nunca "report", que já é outra coisa no sistema (Report/ReportExport).
us-east-1: o Rekognition não existe em sa-east-1.low, análise fora do requestvtp-moderation-staging[-dev], us-east-1, lifecycle 1 dianone o custo é literalmente zero — nem query o módulo faz.medium — a conta é praticamente só o vídeo#188#189#190#192#191SUCCEEDEDStorePollingCommentController cria comentário sem passar pelo ganchomoderation.view + tela no painelMODERATION_LEVEL=slow # none | slow | medium | high | full
MODERATION_VIDEO_STAGING_BUCKET=vtp-moderation-staging # obrigatório em produção
MODERATION_LEVEL tem default none em
todo lugar, de propósito: o piloto só observa e reporta. E lembrar do gotcha de processo avulso —
rodar tinker contra o módulo exige REDIS_HOST=redis (circuit breaker).