feat(vorlagen): bedingte Abschnitte und Schritte (#039)
Ein Abschnitt oder ein einzelner Schritt erscheint nur, wenn seine Bedingung zutrifft — abhaengig von einer Variable des Laufs oder vom Zustand eines anderen Schritts. Der echte Fall steht im Seed: "Mitarbeiter-Onboarding" traegt beide Konto-Abschnitte, fuenf AD-Schritte und vier fuer Entra ID, und `konto_typ` sagt beim Start, welcher gilt. Bisher klickte ein Techniker die anderen neun bei jedem Onboarding weg. Entscheidungen, alle im Issue begruendet: - Laufend ausgewertet, nicht beim Start festgeschrieben. Fuer die Abteilungsabschnitte (#031) ist Festschreiben richtig; fuer Bedingungen nicht — die Antwort auf "ist Pruefen fehlgeschlagen?" entsteht erst waehrend der Arbeit. Ein struktureller Test prueft, dass alle drei Schichten (Abschlussregel, Abarbeitung, Druck) die Auswertung rufen. - Nicht entscheidbar heisst: gilt. Ein Lauf ohne konto_typ zeigt beide Abschnitte — genau wie vorher. Ein Abschnitt zu viel ist sichtbar und korrigierbar, ein fehlender faellt niemandem auf. - OFFEN ist eine Antwort, keine Luecke: waere es unentscheidbar, waere ein bedingter Abschnitt von Anfang an sichtbar. - Eine Bedingung, kein Ausdrucksbaum. Kein und, kein oder. - Verwiesen wird ueber Titel-Pfade, nicht ueber Kennungen: vier Wege schreiben eine Struktur neu und geben neue Kennungen. Zwei stille Datenverluste gefunden, der zweite aelter als dieser Meilenstein: - Der Import verwarf `nurFuerAbteilungen`. Der Export schreibt es seit #031, das Schema nimmt es an, der Import setzte es nicht — eine exportierte Vorlage verlor ihre Abteilungsabschnitte und galt dort fuer alle. - Die tiefe Kopie verwarf es ebenfalls, womit jedes "Bearbeiten" einer Vorlage alle Einschraenkungen verlor. Ursache war ein von Hand getippter Zwischentyp, der weniger Felder nannte als die Abfrage liefert; jetzt aus Prisma abgeleitet, beide Kopierwege teilen eine Stelle, und ein Test vergleicht Kopie und Original Feld fuer Feld. Gefunden hat beides die Klickprobe am gebauten Stand, nicht die Suite: im Editor stand "Bedingung gesetzt", nach "Bearbeiten" war sie weg. Dreizehn Gegenproben liefen, alle wurden rot — und der teuerste Befund lag ausserhalb von allen. 1499 Vitest-Tests (vorher 1457), 115 E2E-Ablaeufe gruen. Closes #39 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
2f247b3617
commit
a2330ef682
@@ -387,6 +387,42 @@ Vom Mitarbeiter holt dieses Lesemodell **nur Name, UPN und Abteilung** — nicht
|
||||
alles und dann gefiltert. Ein Ausdruck liegt herum, wird kopiert und weitergegeben;
|
||||
was darauf steht, ist aus der Hand gegeben.
|
||||
|
||||
## 5f-2. Bedingte Teile: zwei Filter, eine Reihenfolge
|
||||
|
||||
Was ein Lauf zeigt, entsteht aus **zwei** Filtern uebereinander, und ihre
|
||||
Reihenfolge ist der ganze Inhalt von `geltendeStruktur` in
|
||||
`src/lib/bedingungen.ts`:
|
||||
|
||||
1. **Die Abteilungsauswahl (#031)** — beim Start festgeschrieben in
|
||||
`Lauf.geltendeAbschnitte`. Festgeschrieben, weil ein archivierter Lauf genau
|
||||
die Schritte zeigen muss, die damals abgearbeitet wurden, und ein spaeterer
|
||||
Abteilungswechsel keinen Schritt entfernen darf, an dem eine Notiz haengt.
|
||||
2. **Die Bedingungen (#039)** — **laufend** ausgewertet. Eine Bedingung auf einer
|
||||
Variable liesse sich auch festschreiben; eine auf einem Schrittergebnis nicht,
|
||||
denn ihre Antwort entsteht erst waehrend der Arbeit. Ein Abschnitt
|
||||
„Nacharbeit“, der erscheint, wenn der Restore-Test fehlschlaegt, ist der Fall,
|
||||
fuer den es gebaut ist.
|
||||
|
||||
Wer nur den ersten anwendet, bekommt Abschnitte, die nicht gelten; wer nur den
|
||||
zweiten anwendet, umgeht die Abteilungsregel. Drei Schichten brauchen beide — die
|
||||
Abschlussregel im Dienst, die Abarbeitung und die Druckansicht —, und
|
||||
`tests/bedingte-laeufe.test.ts` prueft **strukturell**, dass keine davon die
|
||||
zweite vergisst. Dieselbe Art Test wie „jede Seite prueft selbst“ (#038): die
|
||||
Zusage steht in der Vollstaendigkeit einer Liste, und die muss jemand bewachen.
|
||||
|
||||
**Nicht entscheidbar heisst: gilt.** Hat niemand den Kontotyp angegeben, stehen
|
||||
beide Konto-Abschnitte da — genau wie vor #039. Auszublenden hiesse, eine Antwort
|
||||
zu erfinden, die niemand gegeben hat; und die Richtung, in die der Zweifel
|
||||
faellt, soll die harmlose sein.
|
||||
|
||||
**Verwiesen wird ueber Titel-Pfade, nicht ueber Kennungen.** Vier Wege schreiben
|
||||
eine Struktur neu und geben dabei neue Kennungen: Import, Export, Seed und
|
||||
`entwurfSpeichern`. Eine Bedingung auf einer Kennung ueberlebte keinen davon —
|
||||
ein Titel-Pfad ueberlebt alle vier, und `bedingungAufloesen` ist fuer alle
|
||||
dieselbe Stelle. Dass eine Schritt-Bedingung auf **dieselbe Version** zeigt,
|
||||
haelt ein Trigger: nach dem Veroeffentlichen waere ein fremder Verweis nicht mehr
|
||||
entscheidbar, und der Abschnitt erschiene stillschweigend immer.
|
||||
|
||||
## 5g. Der Verzeichnis-Abgleich: vier Schichten und eine Notbremse
|
||||
|
||||
Eine Verzeichnisquelle hat seit #028 eine **Art** — `LDAP`, `GRAPH` oder `SCIM` —,
|
||||
|
||||
Reference in New Issue
Block a user