Cosa viene registrato
Una modifica a uno schermo, a una cartella di schermi, a una playlist, a un file o a una cartella multimediale, a un’applicazione, a una card, a una programmazione o a un livello, a una campagna, a una notifica, a un webhook, a un trigger, a una sorgente, a un link di flotta, a una pianificazione di report, a un silenziamento di alert, a un membro o a un ruolo, a un invito, a un client di servizio, a una connessione di agente, a un’impostazione di accesso singolo o di SCIM, a un utente o a un gruppo di cui un provider di identità esegue il provisioning, a un collegamento di gruppo o a un’impostazione del progetto o dell’organizzazione è una voce. Lo è anche un comando inviato a uno schermo (riavvio, ricaricamento, identificazione, svuotamento della cache, riavvio dell’app, aggiornamento, avviso a schermo, screenshot) e un’azione di flotta, con i parametri che portava.
Una voce contiene:
| Membro | Significato |
|---|---|
at | Quando la modifica è stata confermata (UTC) |
actor | Chi: kind person, agent, service_client, staff o system, con id e name |
approved_by, review_id | La persona che ha approvato una modifica proposta da un agente e la revisione che l’ha trattenuta |
source | La superficie: dashboard, api, cli, mcp, staff, device, webhook o system |
action | Un codice stabile, tipo di risorsa e verbo: screen.update, playlist.create, webhook.rotate_secret |
resource | type, id e il name della risorsa dopo la modifica |
changes | Ogni membro modificato: path (un puntatore JSON come /label), before e after |
revision | La revisione prodotta dalla modifica, collegata anziché copiata (una revisione di playlist, una versione di file multimediale, il numero di revisione della risorsa stessa) |
request_id, route, client, client_ip | La richiesta attraverso cui è arrivata |
seq, prev_hash, hash | La posizione della voce nella catena |
I valori sono quelli memorizzati: nomi, email, indirizzi, URL e id si leggono così come sono. Un segreto (un token, una chiave API, una password, un segreto di webhook o di firma, una credenziale di sorgente, un codice di abbinamento, un URL del ricevente che è esso stesso la credenziale) appare come (redacted) su entrambi i lati, così una rotazione si vede come una modifica senza mostrare nessuno dei due valori. Un valore oltre 1 KiB è sostituito dalla sua dimensione e dal suo SHA-256, e una voce conserva al massimo 100 modifiche e 16 KiB; truncated indica che sono cambiate più cose. Le pagine di una playlist e i byte di un file multimediale non vengono copiati: la voce collega la revisione.
I dati delle card, i valori chiave/valore (compresi quelli scritti da webhook e sorgenti) e la telemetria del Player sono dati, non configurazione. Non sono nel registro di audit; il registro eventi del progetto segnala che sono stati scritti.
Ricerca
GET /api/audit elenca le voci, dalla più recente:
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 | Significato |
|---|---|
actor | L’id della persona, dell’agente o del client di servizio |
actor_kind | person, agent, service_client, staff o system |
source | dashboard, api, cli, mcp, staff, device, webhook o system |
resource_type, resource_id | Cosa è stato modificato |
action | Un codice azione o un prefisso che termina con * |
field | Un puntatore JSON: le voci che hanno modificato questo membro o uno sottostante |
since, until | Un intervallo di tempo |
cursor, limit | Paginazione: restituite next_cursor come cursor; da 1 a 200 per pagina |
La pagina Audit della dashboard, sotto Progetto, elenca le stesse voci con questi filtri e mostra ogni modifica con il prima e il dopo.
Chi può leggerlo
Il proprietario del progetto, un amministratore della sua organizzazione e un membro dello staff che segue il progetto lo leggono nella dashboard. Un agente o un client di servizio con la capacità del progetto lo legge tramite l’API e la CLI. Le modifiche agli amministratori, ai domini e alle impostazioni di fatturazione di un’organizzazione sono il registro proprio dell’organizzazione: GET /api/organizations/{org_id}/audit, per i suoi amministratori.
Resistenza alla manomissione
Nulla scrive, modifica o elimina una voce: non esiste alcuna route per farlo. Ogni voce è concatenata alla precedente nel suo progetto: il suo hash è lo SHA-256 dell’hash della voce precedente, della sua posizione e del suo contenuto. Pochi secondi dopo una modifica, la voce porta il suo seq e il suo hash.
screenrig audit head
screenrig audit verify
screenrig audit verify --anchor 128:3f2c0b6e9a4d81c7f5e0a2b4c6d8e0f1a3b5c7d9e1f30415263748596a7b8c9d
audit verify (GET /api/audit/verify) ricalcola ogni hash dal contenuto memorizzato e controlla ogni collegamento, la continuità di seq e la testa della catena; segnala hash_mismatch, prev_mismatch, gap, head_mismatch, anchor_mismatch o floor_mismatch per la voce difettosa e termina con il codice 13 quando la catena non risulta verificata. Una chiamata controlla fino a 5.000 voci e restituisce next_seq per proseguire. Un’ancora è una testa della catena (SEQ:HASH) che avete conservato da un’esportazione precedente o da audit head: verificare rispetto ad essa dimostra che la cronologia fino a quella voce non è cambiata e non è stata troncata.
Conservazione ed eliminazione
Le voci sono conservate per 400 giorni in ogni piano. Una voce oltre il termine viene rimossa partendo dalla più vecchia, e la catena registra da dove ora inizia (floor_seq, floor_hash), così una rimozione in qualsiasi altro punto viene rilevata. Quando un progetto viene eliminato, il suo registro di audit viene eliminato con esso. screenrig project export DIR scrive il registro in log/audit.jsonl, con la testa della catena in log/audit-head.json, così una copia sopravvive al progetto e resta verificabile rispetto alla propria ancora.
Esportazione
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 scrive il registro filtrato con lo stesso motore di rendering di ogni report: una riga per campo modificato, dalla più vecchia, gli ultimi 30 giorni salvo diversa indicazione di since, fino a 50.000 righe (truncated indica quando il file contiene solo le prime righe). La testa della catena e il limite di conservazione sono nel file, quindi una copia che conservate funge da ancora per un successivo audit verify.