Ce qui est consigné
La modification d’un écran, d’un dossier d’écrans, d’une liste de lecture, d’un fichier ou d’un dossier multimédia, d’une application, d’une carte, d’un horaire ou d’un niveau, d’une campagne, d’une notification, d’un webhook, d’un déclencheur, d’une source, d’un lien de flotte, d’un horaire de rapport, d’une sourdine d’alerte, d’un membre ou d’un rôle, d’une invitation, d’un client de service, d’une connexion d’agent, d’un paramètre d’authentification unique ou SCIM, d’un utilisateur ou d’un groupe provisionné par un fournisseur d’identité, d’une liaison de groupe, ou d’un paramètre du projet ou de l’organisation constitue une entrée. Il en va de même d’une commande envoyée à un écran (redémarrer, recharger, identifier, vider le cache, redémarrer l’application, mettre à jour, message à l’écran, capture d’écran) et d’une action sur la flotte, avec les paramètres qu’elle portait.
Une entrée contient :
| Membre | Sens |
|---|---|
at | Quand la modification a été validée (UTC) |
actor | Qui : kind person, agent, service_client, staff ou system, avec id et name |
approved_by, review_id | La personne qui a approuvé une modification proposée par un agent, et la révision qui l’a retenue |
source | La surface : dashboard, api, cli, mcp, staff, device, webhook ou system |
action | Un code stable, type de ressource et verbe : screen.update, playlist.create, webhook.rotate_secret |
resource | type, id et le name de la ressource après la modification |
changes | Chaque membre modifié : path (un pointeur JSON tel que /label), before et after |
revision | La révision produite par la modification, liée plutôt que copiée (une révision de liste de lecture, une version de fichier multimédia, le numéro de révision propre à la ressource) |
request_id, route, client, client_ip | La requête par laquelle elle est passée |
seq, prev_hash, hash | La place de l’entrée dans la chaîne |
Les valeurs sont celles qui sont stockées : les noms, courriels, adresses, URL et identifiants se lisent tels quels. Un secret (un jeton, une clé d’API, un mot de passe, un secret de webhook ou de signature, un identifiant de source, un code de jumelage, une URL de destinataire qui est elle-même l’identifiant) s’affiche (redacted) des deux côtés, de sorte qu’une rotation apparaît comme une modification sans révéler aucune des deux valeurs. Une valeur de plus de 1 Kio est remplacée par sa taille et son SHA-256, et une entrée conserve au plus 100 modifications et 16 Kio ; truncated indique que d’autres champs ont changé. Les pages d’une liste de lecture et les octets d’un fichier multimédia ne sont pas copiés : l’entrée renvoie à la révision.
Les données de carte, les valeurs clé/valeur (y compris celles écrites par des webhooks et des sources) et la télémétrie du Player sont des données, non de la configuration. Elles ne figurent pas dans le journal d’audit ; le journal des événements du projet consigne qu’elles ont été écrites.
Recherche
GET /api/audit liste les entrées de la plus récente à la plus ancienne :
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
| Filtre | Sens |
|---|---|
actor | L’identifiant de la personne, de l’agent ou du client de service |
actor_kind | person, agent, service_client, staff ou system |
source | dashboard, api, cli, mcp, staff, device, webhook ou system |
resource_type, resource_id | Ce qui a été modifié |
action | Un code d’action, ou un préfixe se terminant par * |
field | Un pointeur JSON : les entrées qui ont modifié ce membre ou un membre situé en dessous |
since, until | Une période |
cursor, limit | Pagination : renvoyez next_cursor comme cursor ; de 1 à 200 par page |
La page Audit du tableau de bord, sous Projet, liste les mêmes entrées avec ces filtres et présente chaque modification avec son avant et son après.
Qui peut le lire
Le propriétaire du projet, un administrateur de son organisation et un membre du personnel qui observe le projet le lisent dans le tableau de bord. Un agent ou un client de service ayant la capacité du projet le lit par l’API et la CLI. Les modifications des administrateurs, des domaines et des paramètres de facturation d’une organisation relèvent du journal propre à l’organisation : GET /api/organizations/{org_id}/audit, pour ses administrateurs.
Résistance à la falsification
Rien n’écrit, ne modifie ni ne supprime une entrée : il n’existe aucune route pour cela. Chaque entrée est chaînée à la précédente dans son projet : son hash est le SHA-256 de l’empreinte de l’entrée précédente, de sa position et de son contenu. Quelques secondes après une modification, l’entrée porte son seq et son hash.
screenrig audit head
screenrig audit verify
screenrig audit verify --anchor 128:3f2c0b6e9a4d81c7f5e0a2b4c6d8e0f1a3b5c7d9e1f30415263748596a7b8c9d
audit verify (GET /api/audit/verify) recalcule chaque empreinte à partir du contenu stocké et vérifie chaque lien, la continuité de seq et la tête de chaîne ; il signale hash_mismatch, prev_mismatch, gap, head_mismatch, anchor_mismatch ou floor_mismatch pour l’entrée en cause et se termine avec le code 13 lorsque la chaîne n’est pas vérifiée. Un appel vérifie jusqu’à 5 000 entrées et renvoie next_seq pour poursuivre. Une ancre est une tête de chaîne (SEQ:HASH) que vous avez conservée d’une exportation antérieure ou de audit head : la vérification par rapport à elle prouve que l’historique jusqu’à cette entrée est inchangé et n’a pas été tronqué.
Conservation et suppression
Les entrées sont conservées 400 jours, quel que soit le forfait. Une entrée échue est supprimée en commençant par la plus ancienne, et la chaîne consigne où elle commence désormais (floor_seq, floor_hash), de sorte qu’une suppression ailleurs est détectée. Lorsqu’un projet est supprimé, son journal d’audit l’est avec lui. screenrig project export DIR écrit le journal dans log/audit.jsonl, avec la tête de chaîne dans log/audit-head.json : une copie survit ainsi au projet et reste vérifiable par rapport à son ancre.
Exportation
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 écrit le journal filtré avec le même moteur de rendu que tous les rapports : une ligne par champ modifié, de la plus ancienne à la plus récente, les 30 derniers jours sauf indication contraire de since, jusqu’à 50 000 lignes (truncated indique quand le fichier ne contient que les premières lignes). La tête de chaîne et le plancher de conservation figurent dans le fichier : une copie que vous gardez sert donc d’ancre à un audit verify ultérieur.