Dokumentation

Audit-Protokoll

Das Audit-Protokoll erfasst jede Änderung an der Konfiguration eines Projekts: wer sie vorgenommen hat, was sie geändert hat, wann, über welche Oberfläche, und den Wert jedes geänderten Felds davor und danach. Es ist durchsuchbar, verkettet, sodass ein Umschreiben erkennbar ist, wird in jedem Tarif 400 Tage aufbewahrt und lässt sich als CSV, XLSX oder PDF exportieren.

Was erfasst wird

Eine Änderung an einem Bildschirm, einem Bildschirmordner, einer Wiedergabeliste, einer Mediendatei oder einem Medienordner, einer Anwendung, einer Karte, einem Zeitplan oder einer Ebene, einer Kampagne, einer Benachrichtigung, einem Webhook, einem Auslöser, einer Quelle, einem Flottenlink, einem Berichtszeitplan, einer Alarm-Stummschaltung, einem Mitglied oder einer Rolle, einer Einladung, einem Service-Client, einer Agentenverbindung, einer Single-Sign-on- oder SCIM-Einstellung, einem von einem Identitätsanbieter bereitgestellten Benutzer oder einer solchen Gruppe, einer Gruppenbindung oder einer Projekt- oder Organisationseinstellung ist ein Eintrag. Ebenso ein an einen Bildschirm gesendeter Befehl (Neustart, Neuladen, Identifizieren, Cache leeren, App neu starten, Aktualisieren, Hinweis einblenden, Screenshot) und eine Flottenaktion, mit den Parametern, die sie trug.

Ein Eintrag enthält:

FeldBedeutung
atWann die Änderung festgeschrieben wurde (UTC)
actorWer: kind person, agent, service_client, staff oder system, mit id und name
approved_by, review_idDie Person, die eine von einem Agenten vorgeschlagene Änderung genehmigt hat, und die Prüfung, die sie zurückgehalten hat
sourceDie Oberfläche: dashboard, api, cli, mcp, staff, device, webhook oder system
actionEin stabiler Code, Ressourcentyp und Verb: screen.update, playlist.create, webhook.rotate_secret
resourcetype, id und der name der Ressource nach der Änderung
changesJedes geänderte Mitglied: path (ein JSON-Pointer wie /label), before und after
revisionDie Revision, die die Änderung erzeugt hat, verlinkt statt kopiert (eine Wiedergabelisten-Revision, eine Medienversion, die eigene Revisionsnummer der Ressource)
request_id, route, client, client_ipDie Anfrage, über die sie kam
seq, prev_hash, hashDie Position des Eintrags in der Kette

Werte sind die gespeicherten Werte: Namen, E-Mail-Adressen, Adressen, URLs und IDs werden unverändert gelesen. Ein Geheimnis (ein Token, ein API-Schlüssel, ein Passwort, ein Webhook- oder Signaturgeheimnis, eine Quellen-Zugangsdaten-Angabe, ein Kopplungscode, eine Empfänger-URL, die selbst als Zugangsdaten dient) erscheint auf beiden Seiten als (redacted), sodass eine Rotation als Änderung sichtbar wird, ohne einen der beiden Werte zu zeigen. Ein Wert über 1 KiB wird durch seine Größe und seinen SHA-256 ersetzt, und ein Eintrag enthält höchstens 100 Änderungen und 16 KiB; truncated zeigt an, dass mehr geändert wurde. Die Seiten einer Wiedergabeliste und die Bytes einer Mediendatei werden nicht kopiert: Der Eintrag verlinkt die Revision.

Kartendaten, Schlüssel-Wert-Einträge (einschließlich der von Webhooks und Quellen geschriebenen) und Player-Telemetrie sind Daten, keine Konfiguration. Sie stehen nicht im Audit-Protokoll; das Ereignisprotokoll des Projekts hält fest, dass sie geschrieben wurden.

Wer es lesen kann

Der Inhaber des Projekts, ein Administrator seiner Organisation und ein Mitarbeiter, der das Projekt mitverfolgt, lesen es im Dashboard. Ein Agent oder Service-Client mit der Projektberechtigung liest es über die API und die CLI. Änderungen an den Administratoren, Domains und Abrechnungseinstellungen einer Organisation stehen im eigenen Protokoll der Organisation: GET /api/organizations/{org_id}/audit, für ihre Administratoren.

Manipulationssicherheit

Nichts schreibt, ändert oder löscht einen Eintrag: Dafür gibt es keine Route. Jeder Eintrag ist in seinem Projekt mit dem vorherigen verkettet: Sein hash ist der SHA-256 aus dem Hash des vorherigen Eintrags, seiner Position und seinem Inhalt. Wenige Sekunden nach einer Änderung trägt der Eintrag sein seq und sein hash.

screenrig audit head
screenrig audit verify
screenrig audit verify --anchor 128:3f2c0b6e9a4d81c7f5e0a2b4c6d8e0f1a3b5c7d9e1f30415263748596a7b8c9d

audit verify (GET /api/audit/verify) berechnet jeden Hash aus dem gespeicherten Inhalt neu und prüft jedes Glied, die Lückenlosigkeit von seq und den Kettenkopf; es meldet hash_mismatch, prev_mismatch, gap, head_mismatch, anchor_mismatch oder floor_mismatch für den fehlerhaften Eintrag und endet mit Code 13, wenn die Kette nicht verifiziert wird. Ein Aufruf prüft bis zu 5.000 Einträge und liefert next_seq zum Fortsetzen. Ein Anker ist ein Kettenkopf (SEQ:HASH), den Sie aus einem früheren Export oder von audit head aufbewahrt haben: Die Prüfung gegen ihn beweist, dass der Verlauf bis zu diesem Eintrag unverändert ist und nicht gekürzt wurde.

Aufbewahrung und Löschung

Einträge werden in jedem Tarif 400 Tage aufbewahrt. Ein abgelaufener Eintrag wird beginnend mit dem ältesten entfernt, und die Kette hält fest, wo sie jetzt beginnt (floor_seq, floor_hash), sodass eine Entfernung an anderer Stelle erkannt wird. Wird ein Projekt gelöscht, wird sein Audit-Protokoll mit gelöscht. screenrig project export DIR schreibt das Protokoll nach log/audit.jsonl, mit dem Kettenkopf in log/audit-head.json, sodass eine Kopie das Projekt überdauert und sich weiter gegen ihren Anker verifizieren lässt.

Export

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 schreibt das gefilterte Protokoll mit demselben Renderer wie jeden Bericht: eine Zeile pro geändertem Feld, älteste zuerst, die letzten 30 Tage, sofern since nichts anderes angibt, bis zu 50.000 Zeilen (truncated zeigt an, wenn die Datei nur die ersten Zeilen enthält). Kettenkopf und Aufbewahrungsgrenze stehen in der Datei, sodass eine aufbewahrte Kopie als Anker für ein späteres audit verify dient.