Skip to content

Glossar

Begriffe, die in Prilog-internen Diskussionen vorkommen — kurze Definitionen, damit beim Onboarding niemand raten muss.

A

ADR — Architecture Decision Record

Markdown-Dokument das eine architektonische Entscheidung festhält: Kontext, Optionen, Entscheidung, Konsequenzen. Hilft, später nachzu- vollziehen warum etwas so gebaut ist. Format-Skeleton in 05-templates.md.

Audience

Generische Klassifikation einer Person: staff, guardian, minor, external. Tenant-unabhängig, im Gegensatz zum userType (= Schul- spezifische Bezeichnung wie „Lehrkraft").

Audit-Log

Append-only-Tabelle, in der alle schreibenden Aktionen protokolliert werden. Pflicht für DSGVO-Compliance. Pro Eintrag: Tenant, Actor (mit optional pseudonymisiertem Hash), EventType, EntityRef, Before/After-JSON.

B

Break-Glass

Notfall-Zugriff auf eine Resource für die der User normalerweise keine Berechtigung hat. Pflicht-Begründung ≥ 20 Zeichen, max. 24h gültig, voll auditiert. Beispiel: Admin braucht Zugriff auf Zeugnis eines kranken Lehrers vor Zeugnisausgabe.

C

Capability-Flag

Boolean-Flag an einer Rolle (FunctionalRoleType), das einen Endpoint oder eine UI-Aktion freischaltet. Beispiele: canWriteSubjectReports, canApproveReports, manageUsers. Wir prüfen sie in Endpoint-Pre- Handlern (requireWorkspaceAdmin etc.).

Canary Deployment

Neuer Code geht zuerst auf 1 Tenant (oder 5 %), dann nach Zeit X ohne Vorfall auf alle. Begrenzt Schaden, wenn ein Deploy schief geht.

Compliance-Gate

Karte in der DSB-Konsole pro Datenschutz-Pflicht (DSFA, AVV, TOMs etc.). Schule muss vor Aktivierung eines Moduls die Karte „freigeben" — sonst darf der Modul-Endpoint nicht laufen. Implementiert in compliance.service.ts.

ContactView

Vereinheitlichtes Datenmodell im Frontend, das Mitglieder (UserAccount), externe Personen (Person) und Organisationen (Person.kind=organization) über das gleiche Layout darstellbar macht.

CRM-Foundation

Wir migrieren von einem alten UserDirectoryEntry-Modell zu einem neuen Person + UserAccount-Modell. „CRM v2" ist der neue Stand, isCrmV2(tenantId) zeigt ob ein Tenant migriert ist.

D

DoD — Definition of Done

Liste von Bedingungen, die erfüllt sein müssen, bevor ein Sprint als „done" markiert werden darf. Bei uns = die Pflicht-Checkliste in 01-pflicht-checkliste.md.

DoR — Definition of Ready

Liste von Bedingungen, die erfüllt sein müssen, bevor ein Ticket in einen Sprint aufgenommen werden darf (Spec klar, Akzeptanzkriterien existieren, …).

DSFA — Datenschutz-Folgenabschätzung

Pflicht-Anlage nach Art. 35 DSGVO bei riskanten Verarbeitungen (personenbezogene Daten von Minderjährigen, KI-Verarbeitung etc.). Prilog liefert Muster, Schule unterzeichnet + lädt hoch.

DSB-Konsole

Tab in Settings → Datenschutz, in dem der/die Datenschutzbeauftragte der Schule alle Datenschutz-Gates aktiviert/sperrt und Audit-Log durchsieht.

E

Event Sourcing

Pattern, bei dem nicht der aktuelle Zustand gespeichert wird, sondern jede Zustandsänderung als unveränderliches Event. Aktueller Zustand = Reduktion über alle Events.

F

Feature Flag

Schalter, der ein Feature ein/aus schaltet ohne Deploy. Pro Tenant unterschiedlich setzbar. Nützlich für Beta-Releases und Notfall-Kill.

Funktions-Rolle (FunctionalRoleType)

Schul-spezifische Rolle (z. B. „Klassenleitung", „Schulleitung", „Sekretariat"), an der die Capability-Flags hängen. Eine Person kann mehrere Funktions-Rollen haben (FunctionalRoleGrant).

G

GradeBand

Tenant-spezifisches Klassenstufen-Band (z. B. „Unterstufe 1-4", „Mittelstufe 5-8"). Wird im Stundenplaner für Lehrer-Präferenzen und für Klassenlehrer-Befähigung verwendet.

I

Idempotency Key

Vom Client generierte UUID, die bei wiederholtem POST-Aufruf dafür sorgt, dass die Aktion nur einmal ausgeführt wird. Wichtig für Stripe-Payments, Mail-Versand, alles wo Doppel-Ausführung Schaden anrichtet.

InstructionGroup

Im Stundenplaner: Gruppe von Schülern, die gemeinsam Unterricht haben. Meist deckungsgleich mit der Klasse, kann aber kleiner (Halbgruppe Englisch) oder klassen-übergreifend (Wahlpflicht) sein.

J

JWT

JSON Web Token. Enthält bei uns sub (matrixUserId), tenantId, roles[], schoolId, orgId. Wird bei jedem API-Call mitgeschickt als Authorization: Bearer <token>.

L

Lessons

Erkenntnisse aus realen Vorfällen, dokumentiert in 02-lessons-aus-prilog.md. Jede Regel im Manifest hat idealerweise eine Lesson als Ursprung.

LIVE-Stempel

Ein Sprint ist „LIVE" wenn ALLE Bedingungen aus 01-pflicht-checkliste.md erfüllt sind, inkl. Phase 6 (UX-Audit per Hand). „Tests grün + Deploy erfolgreich" ist nicht LIVE.

M

Matrix

Das Chat-Protokoll, auf dem Prilog aufbaut (Synapse als Server). Jeder User hat eine matrixUserId der Form @user.name:tenant.prilog.team. Räume sind Matrix-Rooms.

Memory (Auto-Memory)

File-basierte Datenbank in ~/.claude/projects/-home-lee/memory/, in der die KI (= ich) Erkenntnisse über User, Projekt, Architektur ablegt. Wird in jeder Session geladen.

Mein Fach

Persönliches DMS-Postfach pro User. Datei-Uploads landen hier, optional mit S3-Storage pro Tenant.

O

Outbox Pattern

Pattern, bei dem externe Aktionen (Mail-Versand, Webhook-Calls) erst in eine outbox-Tabelle geschrieben werden, ein separater Worker führt sie dann aus. Vorteil: keine Verluste bei Crash, automatischer Retry.

P

P0 / P0-Freeze

„Priority 0" — das Minimal-Funktionsumfang einer Domäne, der live gehen muss. „Freeze" = die Spec ist final + es kommt nichts mehr rein bevor das gebaut ist. Pattern aus dem Lean-Startup-Buch.

Person / UserAccount / UserDirectoryEntry

Drei Konzepte für „Mensch im System":

  • Person: CRM-Datensatz (Name, Adresse, E-Mail). Kann ohne Login existieren.
  • UserAccount: Login-fähiger Account, verknüpft mit einer Person.
  • UserDirectoryEntry: Legacy-Variante von UserAccount, vor CRM-v2.

Pflicht-Checkliste

Die Liste in 01-pflicht-checkliste.md, die vor jedem LIVE-Stempel abgehakt werden muss.

Postmortem

Strukturierte Nach-Vorfalls-Analyse: Timeline, Root Cause, Lessons, Action Items. Bei Prilog blameless (Fokus auf System-Schwächen, nicht Personen). Format in 05-templates.md.

Promote (Web-Client)

promote-web-client.sh <sha> setzt den stable-Channel auf einen bestimmten Build. Der nächste Reconcile-Sweep verteilt diesen Build auf alle Tenant-Subdomains.

Pseudonymisierung

DSGVO-Pflicht: in Audit-Logs werden Actor-IDs durch einen tenant-spezifisch gesalzenen Hash ersetzt. Klarsicht-Modus (zeigt echte IDs) erzeugt eigenen Audit-Eintrag (Self-tracking).

R

Reconcile-Sweep

Cron-Job, der täglich (03:30 UTC) für jeden Tenant prüft, ob der installierte Web-Client mit dem stable-Channel übereinstimmt. Bei Drift → SCP+atomic-swap → nginx-reload.

Refresh-Token

JWT, der 30 Tage gültig ist und nur zum Holen neuer Access-Tokens dient. Lebt im HttpOnly-Cookie.

Retention-Worker

Background-Job, der periodisch (24h-Tick) prüft, ob Daten ihr Aufbewahrungsfristen-Ende erreicht haben. Setzt retentionDueAt-Marker. Eigentliche Löschung manuell oder per Bulk-Endpoint.

RPO / RTO

  • RPO (Recovery Point Objective): wie viel Daten-Verlust ist akzeptabel? („max. 1 Stunde Daten weg")
  • RTO (Recovery Time Objective): wie schnell muss das System wieder laufen? („innerhalb 4 Stunden")

S

Sicht-Resolver

Backend-Funktion (canReadX, canWriteX) die prüft, ob ein User Zugriff auf eine Resource hat. Liefert { allowed: boolean, via?: string }. Wird in Pre-Handlern (assertCanRead...) aufgerufen.

Slide-Over

Panel, das von rechts in den Bildschirm einfährt. Prilog-Konvention statt zentrierten Modals (Memory feedback_no_modal_dialogs).

SLO — Service Level Objective

Quantitative Erwartung an die Software, z. B. „99 % der Login-Requests in unter 800 ms". Daraus leitet sich Error Budget ab.

Solver

Im Stundenplaner: CP-SAT-basierter Constraint-Solver (läuft auf der Whisper-Box), der einen vollständigen Stundenplan-Vorschlag aus den Stammdaten berechnet.

Source (ContactView)

'member' (= UserAccount mit Login), 'person' (= externer Kontakt ohne Login), 'organization' (= juristische Person).

Space

Matrix-Raum-Konstrukt für eine Gruppe (Klasse, Kollegium, Projekt). Hat Mitglieder, kann Subspaces enthalten, hat Chat + Dateien + Kalender.

Stable-Channel

Der stable-Symlink im prilog-artifacts-Repo zeigt auf den Build, der vom Reconcile-Sweep auf alle Tenants verteilt wird. Wird per promote-web-client.sh <sha> umgesetzt.

Stammraum

Im Stundenplaner: Standard-Raum einer Klasse, in dem alle Fächer unterrichtet werden, die keinen Spezialraum brauchen (also nicht Sport, Chemie, Musik). Solver pinnt automatisch dorthin.

T

TeacherClassTeacherCapability

Waldorf-spezifisch: Klassenlehrer-Befähigung pro Lehrer × GradeBand (z. B. „Unterstufe"). Ersetzt das Pflegen von einzelnen Fach- Qualifikationen bei Klassenlehrern, die im Hauptunterricht alles machen.

TeacherQualification

Fach-Lehrbefähigung pro Lehrer × Subject. Mit qualificationLevel (full/partial/in_training) und optional gradeLevels-Filter.

Tenant

Eine Schule. Hat eigene Subdomain (z. B. leander.prilog.team), eigene DB-Records mit tenantId-Filter, eigenen S3-Bereich, optional eigenen Synapse-Server (Tenant-in-a-Box).

Tenant-in-a-Box

Architektur-Vision: jeder Tenant bekommt einen eigenen Docker-Compose- Stack mit eigenem Postgres + MinIO + Synapse, anstatt sich einen Shared- Stack zu teilen. Aktiv für Enterprise-Kunden, optional für andere.

TimetableEntry

Eine einzelne Stundenplan-Zelle: (InstructionGroup, Subject, Wochentag, PeriodSlot) + Lehrer-Zuordnungen. Hat Status (published, committed, …) und Gültigkeitsbereich (validFrom/validUntil).

U

UserType

Schul-spezifische Rolle (z. B. „Lehrkraft", „Schüler:in", „Eltern"). Hat audience (für Datenschutz-Logik), color (für UI-Tönung), canBroadcast (Infotafel-Recht) etc.

V

Visibility (Kontakt)

Wer sieht den Kontakt? tenant-wide, staff-only, space-only. Wird am UserType konfiguriert.

W

Web-Client

Das Frontend für Schul-User. Vite-React-App, deployed als statisches Bundle pro Tenant-Subdomain.

Workspace-Admin

Person mit manageModules oder analog hoher Capability. Sieht in Sicht-Resolver-Listen alle Reports (Metadaten-Bypass), aber nicht Inhalte ohne Break-Glass.

Z

Zeugnisprogramm

Modul für Textzeugnisse (Waldorf-Style + andere reformpädagogische Schulen). Aktueller Stand siehe prilog_docs/umsetzung/Zeugnis/13-status.md.