O que é registrado
Uma alteração em uma tela, uma pasta de telas, uma playlist, um arquivo ou pasta de mídia, um aplicativo, um card, uma programação ou um nível, uma campanha, uma notificação, um webhook, um gatilho, uma fonte, um link de frota, uma programação de relatório, um silenciamento de alerta, um membro ou papel, um convite, um cliente de serviço, uma conexão de agente, uma configuração de login único ou de SCIM, um usuário ou grupo provisionado por um provedor de identidade, um vínculo de grupo ou uma configuração do projeto ou da organização é uma entrada. Também é um comando enviado a uma tela (reiniciar, recarregar, identificar, limpar cache, reiniciar o app, atualizar, aviso na tela, captura de tela) e uma ação de frota, com os parâmetros que ela levava.
Uma entrada contém:
| Membro | Significado |
|---|---|
at | Quando a alteração foi confirmada (UTC) |
actor | Quem: kind person, agent, service_client, staff ou system, com id e name |
approved_by, review_id | A pessoa que aprovou uma alteração proposta por um agente e a revisão que a reteve |
source | A superfície: dashboard, api, cli, mcp, staff, device, webhook ou system |
action | Um código estável, tipo de recurso e verbo: screen.update, playlist.create, webhook.rotate_secret |
resource | type, id e o name do recurso após a alteração |
changes | Cada membro alterado: path (um ponteiro JSON como /label), before e after |
revision | A revisão que a alteração produziu, vinculada em vez de copiada (uma revisão de playlist, uma versão de mídia, o número de revisão do próprio recurso) |
request_id, route, client, client_ip | A requisição pela qual chegou |
seq, prev_hash, hash | A posição da entrada na cadeia |
Os valores são os armazenados: nomes, e-mails, endereços, URLs e ids aparecem como estão. Um segredo (um token, uma chave de API, uma senha, um segredo de webhook ou de assinatura, uma credencial de fonte, um código de pareamento, uma URL de receptor que é ela própria a credencial) aparece como (redacted) nos dois lados, de modo que uma rotação surge como uma alteração sem mostrar nenhum dos dois valores. Um valor acima de 1 KiB é substituído por seu tamanho e SHA-256, e uma entrada guarda no máximo 100 alterações e 16 KiB; truncated indica que mais coisas mudaram. As páginas de uma playlist e os bytes de um arquivo de mídia não são copiados: a entrada vincula a revisão.
Dados de card, valores de chave/valor (inclusive os gravados por webhooks e fontes) e telemetria do Player são dados, não configuração. Eles não estão no registro de auditoria; o registro de eventos do projeto indica que foram gravados.
Pesquisa
GET /api/audit lista as entradas da mais recente para a mais antiga:
screenrig audit list --resource-type screen --resource-id scr_ID
screenrig audit list --actor-kind agent --since 2026-10-01T00:00:00Z
screenrig audit list --action 'playlist.*' --source mcp --limit 20
screenrig audit list --field /label
screenrig audit show aud_ID
| Filtro | Significado |
|---|---|
actor | O id da pessoa, do agente ou do cliente de serviço |
actor_kind | person, agent, service_client, staff ou system |
source | dashboard, api, cli, mcp, staff, device, webhook ou system |
resource_type, resource_id | O que foi alterado |
action | Um código de ação ou um prefixo terminado em * |
field | Um ponteiro JSON: entradas que alteraram este membro ou um membro abaixo dele |
since, until | Uma janela de tempo |
cursor, limit | Paginação: devolva next_cursor como cursor; de 1 a 200 por página |
A página Auditoria do painel, em Projeto, lista as mesmas entradas com esses filtros e mostra cada alteração com seu antes e depois.
Quem pode ler
O proprietário do projeto, um administrador de sua organização e um membro da equipe que acompanha o projeto o leem no painel. Um agente ou cliente de serviço com a capacidade do projeto o lê pela API e pela CLI. As alterações nos administradores, domínios e configurações de cobrança de uma organização ficam no registro próprio da organização: GET /api/organizations/{org_id}/audit, para seus administradores.
Resistência a adulteração
Nada grava, edita ou exclui uma entrada: não existe rota para isso. Cada entrada é encadeada à anterior em seu projeto: seu hash é o SHA-256 do hash da entrada anterior, de sua posição e de seu conteúdo. Alguns segundos após uma alteração, a entrada recebe seu seq e seu hash.
screenrig audit head
screenrig audit verify
screenrig audit verify --anchor 128:3f2c0b6e9a4d81c7f5e0a2b4c6d8e0f1a3b5c7d9e1f30415263748596a7b8c9d
audit verify (GET /api/audit/verify) recalcula cada hash a partir do conteúdo armazenado e verifica cada elo, a continuidade de seq e o cabeçalho da cadeia; informa hash_mismatch, prev_mismatch, gap, head_mismatch, anchor_mismatch ou floor_mismatch para a entrada com problema e encerra com o código 13 quando a cadeia não é verificada. Uma chamada verifica até 5.000 entradas e retorna next_seq para continuar. Uma âncora é um cabeçalho de cadeia (SEQ:HASH) que você guardou de uma exportação anterior ou de audit head: verificar contra ela prova que o histórico até essa entrada não mudou e não foi truncado.
Retenção e exclusão
As entradas são mantidas por 400 dias em todos os planos. Uma entrada que passa desse prazo é removida, começando pela mais antiga, e a cadeia registra onde ela agora começa (floor_seq, floor_hash), de modo que uma remoção em qualquer outro ponto é detectada. Quando um projeto é excluído, seu registro de auditoria é excluído com ele. screenrig project export DIR grava o registro em log/audit.jsonl, com o cabeçalho da cadeia em log/audit-head.json, de modo que uma cópia sobrevive ao projeto e continua verificável contra sua âncora.
Exportação
screenrig audit export --format csv --output audit.csv
screenrig audit export --format xlsx --since 2026-07-01T00:00:00Z --until 2026-10-01T00:00:00Z
screenrig audit export --format pdf --resource-type playlist --output playlist-changes.pdf
GET /api/audit?format=csv|xlsx|pdf grava o registro filtrado com o mesmo renderizador de todos os relatórios: uma linha por campo alterado, da mais antiga para a mais recente, os últimos 30 dias, a menos que since diga outra coisa, até 50.000 linhas (truncated indica quando o arquivo contém só as primeiras linhas). O cabeçalho da cadeia e o limite de retenção estão no arquivo, então uma cópia que você guarda serve de âncora para um audit verify posterior.