chore(release): v0.2.0 vorbereiten
Version auf 0.2.0, Changelog-Abschnitt geschlossen, Phasenzusammenfassung im Devlog. Der Tag selbst folgt getrennt. Gemessen, nicht uebernommen: 40.781 Zeilen unter src/ (ohne erzeugten Prisma-Client), 25 Tabellen, 13 Aufzaehlungen, 14 Migrationen, 56 namentlich aufgezaehlte Datenbankregeln, 1457 Vitest-Tests in 61 Dateien, 115 Ende-zu-Ende-Ablaeufe in 16 Dateien, 38 Issue-Dateien. Der Seed ist unveraendert bei 7 Vorlagen mit 155 Schritten. 38 h 35 min fuer zwoelf Issues, geschaetzt waren 90 h. Acht davon waren Meilensteine (M15-M22); zwei der nuetzlichsten (#036, #038) stammen aus keinem Plan, sondern aus der Durchsicht. Was offen bleibt, steht in der Zusammenfassung: #024 (Proxmox auf einem echten Host) und zwei benannte Grenzen — gegen einen echten Entra-Mandanten und gegen echte SCIM-Anbieter ist nichts gelaufen, die Formen in den Tests stammen aus der Dokumentation. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Opus 5
parent
75c335df23
commit
150188274a
@@ -7,6 +7,8 @@ und dieses Projekt folgt [Semantic Versioning](https://semver.org/lang/de/).
|
||||
|
||||
## [Unveröffentlicht]
|
||||
|
||||
## [0.2.0] – 2026-10-11
|
||||
|
||||
### Geändert
|
||||
|
||||
- **Wer sich anmeldet und in keiner Rollengruppe steht, bekommt nicht mehr automatisch `LESER`.**
|
||||
|
||||
@@ -1673,3 +1673,92 @@ stehen in `docs/betrieb/scim.md`.
|
||||
einen Host, den es hier nicht gibt.
|
||||
- **v0.2.0 ist damit reif für einen Tag**: Changelog-Abschnitt, Devlog-Phasenzusammenfassung, Tag,
|
||||
Release-Notiz. Die Bedingung aus Sitzung 23 („vorher gehört #038 entschieden“) ist erfüllt.
|
||||
|
||||
|
||||
---
|
||||
|
||||
## Phase 2 abgeschlossen: was aus dem Plan wurde
|
||||
|
||||
**38 h 35 min**, geschätzt waren **90 h** für die zwölf Issues dieser Version. Acht davon waren
|
||||
Meilensteine (M15–M22), die übrigen entstanden **während** der Arbeit — und zwei der nützlichsten
|
||||
(#036, #038) stammen gar nicht aus einem Plan, sondern aus der Durchsicht.
|
||||
|
||||
### Was dazugekommen ist
|
||||
|
||||
| | v0.1.0 | v0.2.0 |
|
||||
|---|---|---|
|
||||
| Quelltext unter `src/` | rund 30.000 Zeilen | **40.781 Zeilen** (ohne erzeugten Prisma-Client) |
|
||||
| Datenmodell | 20 Tabellen, 9 Aufzählungen, 2 Migrationen | **25 Tabellen, 13 Aufzählungen, 14 Migrationen** |
|
||||
| Datenbankregeln namentlich | — | **56** (CHECKs, partielle Indizes, Trigger, zusammengesetzte Fremdschlüssel) |
|
||||
| Vitest | 1131 Tests | **1457 Tests** in 61 Dateien |
|
||||
| Ende-zu-Ende | 101 Abläufe | **115 Abläufe** in 16 Dateien |
|
||||
| Verzeichnisquellen | LDAP | **LDAP, Microsoft Graph, SCIM** |
|
||||
| Dokumentation | 9 Kapitel, 14 Issue-Dateien | 9 Kapitel, 8 Betriebsseiten, **38 Issue-Dateien** |
|
||||
|
||||
Der Seed ist unverändert bei 7 Vorlagen mit 155 Schritten — nachgezählt, nicht übernommen.
|
||||
|
||||
### Die acht Meilensteine
|
||||
|
||||
| | | Zeit |
|
||||
|---|---|---|
|
||||
| M15 | Quellenarten und Microsoft-Graph-Quelle (#028) | 4 h 10 |
|
||||
| M16 | SCIM-Endpunkt als Alternative zum Abgleich (#029) | 4 h 05 |
|
||||
| M17 | Wiederverwendbare Bausteine (#030) | 2 h 25 |
|
||||
| M18 | Abteilungsspezifische Zusatzabschnitte (#031) | 1 h 35 |
|
||||
| M19 | Anhänge und Fotos an Schritten (#032) | 3 h 05 |
|
||||
| M20 | Live-Aktualisierung per SSE statt Polling (#033) | 1 h 40 |
|
||||
| M21 | Benachrichtigungen per Mail und Webhook (#034) | 3 h 30 |
|
||||
| M22 | Mitarbeiter-Selbstauskunft (#035) | 2 h 50 |
|
||||
|
||||
### Was diese Phase gelehrt hat
|
||||
|
||||
**Die teuersten Fehler waren dreimal derselbe: eine Zusage ohne Prüfer.** Nicht falscher Code —
|
||||
Code, der *aussieht*, als prüfte er etwas.
|
||||
|
||||
- Ein Kommentar sagte, ein `select` hole Notizen „gar nicht erst“, während ein anderer Codepfad den
|
||||
Test rettete (#035).
|
||||
- `docs/betrieb/sicherung.md` sagte „kein Upload-Verzeichnis“, nachdem die Anhänge dazugekommen
|
||||
waren — eine Sicherung nach der alten Anleitung hätte still Daten verloren (#032). Dasselbe
|
||||
Dokument hatte in #036 wieder einen Satz, der zu keiner Installation passte.
|
||||
- „Jede Seite prüft selbst“ steht seit #007 in `CLAUDE.md` und hielt bis #038 **nur durch Nachsehen
|
||||
von Hand**. Der Review hat alle 27 Seiten durchgesehen — ein Ergebnis, das für genau einen Tag
|
||||
gilt.
|
||||
|
||||
**Die Gegenprobe ist das Werkzeug, das sie findet.** Regel brechen, Test muss rot werden. In dieser
|
||||
Phase blieben fünf Gegenproben grün, und jede davon war ein Befund: `PATCH remove` wirkte gar nicht,
|
||||
Entra IDs `"True"` wäre beim *Aktivieren* kaputt gewesen, der Anhang-Handler hatte keinen Test,
|
||||
`/api/scim` stand in keiner Allowlist-Prüfung, und der Link in der Abgleich-Meldung war ein 404.
|
||||
|
||||
**Ein Fehler, der nur in einer Richtung sichtbar ist, ist der teuerste.** Entra ID schickt `active`
|
||||
als `"True"`/`"False"`. Beim Deaktivieren kommt mit einem reinen `value === true` zufällig das
|
||||
Richtige heraus — nur das Aktivieren wäre kaputt gewesen: ein wieder freigeschaltetes Konto, das für
|
||||
immer inaktiv bleibt.
|
||||
|
||||
**Eine Attrappe ohne die Form der Wirklichkeit prüft etwas anderes als die Wirklichkeit.** Zweimal
|
||||
gelernt, von beiden Seiten: der Graph-Doppelgänger fand einen echten Fehler, **weil** er den Filter
|
||||
wirklich auswertete (#028); die Sitzungs-Attrappe `{}` verdeckte einen, weil sie keine `benutzerId`
|
||||
hatte (#036).
|
||||
|
||||
**Ein gemeinsamer Helfer in einer Testsuite ist geteilter Zustand.** Das Anmelde-Warten für einen
|
||||
neuen Fall aufzuweichen machte zwei unverwandte Abläufe unzuverlässig — sichtbar nur im vollen
|
||||
Durchgang (#037).
|
||||
|
||||
### Wo die Zeit hinging
|
||||
|
||||
Die beiden Verzeichnis-Meilensteine (#028, #029) waren mit 8 h 15 zusammen die teuersten, und zwar
|
||||
**nicht** wegen der Protokolle: beide liefen gegen Doppelgänger, und in beiden Fällen entschied die
|
||||
Strenge der Attrappe, ob ein Fehler gefunden wurde. Die eigentliche Arbeit war, die Weiche an genau
|
||||
einer Stelle zu halten und beide Richtungen eines CHECKs aufzuschreiben — was eine Art braucht, und
|
||||
was sie **nicht haben darf**.
|
||||
|
||||
### Was offen bleibt
|
||||
|
||||
**#024** — der Proxmox-Einzeiler ist auf einem echten PVE-Host nie gelaufen. Das steht seit v0.1.0
|
||||
so da, und es bleibt stehen, weil es einen Host verlangt, den diese Umgebung nicht hat. Die Prüfliste
|
||||
liegt bereit.
|
||||
|
||||
Zwei Grenzen gehören dazu genannt, beide in den Issues festgehalten: **gegen einen echten
|
||||
Entra-Mandanten** und **gegen echte SCIM-Anbieter** ist nichts gelaufen. Die Formen in den Tests
|
||||
stammen aus der Dokumentation, nicht aus Mitschnitten. Stimmt eine Form nicht, stimmen Test und
|
||||
Wirklichkeit nicht — die Prüflisten stehen in `docs/betrieb/entra-id.md` und
|
||||
`docs/betrieb/scim.md`.
|
||||
|
||||
+1
-1
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "laufzettel",
|
||||
"version": "0.1.0",
|
||||
"version": "0.2.0",
|
||||
"private": true,
|
||||
"type": "module",
|
||||
"description": "Checklisten fuer wiederkehrende IT-Arbeiten: versionierte Vorlagen, Laeufe, Archiv, QR-Tags",
|
||||
|
||||
Reference in New Issue
Block a user