Documentazione

Registro di audit

Il registro di audit registra ogni modifica alla configurazione di un progetto: chi l’ha fatta, cosa ha cambiato, quando, tramite quale superficie e il valore di ogni campo modificato prima e dopo. È ricercabile, concatenato in modo che una riscrittura sia rilevabile, conservato 400 giorni in ogni piano ed esportabile in CSV, XLSX o PDF.

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:

MembroSignificato
atQuando la modifica è stata confermata (UTC)
actorChi: kind person, agent, service_client, staff o system, con id e name
approved_by, review_idLa persona che ha approvato una modifica proposta da un agente e la revisione che l’ha trattenuta
sourceLa superficie: dashboard, api, cli, mcp, staff, device, webhook o system
actionUn codice stabile, tipo di risorsa e verbo: screen.update, playlist.create, webhook.rotate_secret
resourcetype, id e il name della risorsa dopo la modifica
changesOgni membro modificato: path (un puntatore JSON come /label), before e after
revisionLa 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_ipLa richiesta attraverso cui è arrivata
seq, prev_hash, hashLa 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.

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.