feat(platzhalter): Aufloesung, Namensregeln und Shell-Maskierung (#26)
Prüfung / pruefung (push) Canceled after 0s
Prüfung / e2e (push) Canceled after 0s

This commit was merged in pull request #26.
This commit is contained in:
2026-09-25 13:30:31 +00:00
parent f85bc87324
commit eec5de404a
21 changed files with 4069 additions and 166 deletions
+55 -2
View File
@@ -14,11 +14,12 @@ als Unterpunkte mit Aufgabe und Dauer.
| #009 | M4 – Vorlagen-Versionierung im Service | 1 h 20 min |
| #010 | M5 – Vorlagen-Editor | 2 h 10 min |
| #011 | M6 – Mitarbeiter, Abteilungen, Geräte | 2 h 15 min |
| | **Summe** | **11 h 15 min** |
| #012 | M7 – Platzhalter, Namensregeln, Escaping | 2 h 30 min |
| | **Summe** | **13 h 45 min** |
| Meilenstein | Tatsächlich | Status |
|---|---|---|
| v0.1.0 | 11 h 15 min | in Arbeit |
| v0.1.0 | 13 h 45 min | in Arbeit |
---
@@ -452,3 +453,55 @@ als Unterpunkte mit Aufgabe und Dauer.
- #012 Platzhalter, Namensregeln und Escaping: die reine Service-Schicht, aus der die fertigen
PowerShell-Befehle entstehen — mit dichter Testabdeckung, denn hier darf nichts schiefgehen.
---
## 2026-09-25 · Sitzung 8 · 12:55–15:35
**Issue:** #012 (M7)
**Version:** 0.1.0
### Erledigt
- `src/lib/shell.ts` (Sub-Agent): Maskierung je Shell, Skript-Kopie mit Kommentarzeilen
- `src/lib/namensregeln.ts` (Sub-Agent): Transliteration, `{v}`, `{nnn}`, `{kundenkuerzel}`,
Grenzen für `sam` und `hostname`
- `src/lib/passwort.ts`, `src/lib/platzhalter-werte.ts`, `src/server/services/platzhalter.ts` und
`src/server/services/befehle.ts`: das generierte Passwort, das Ersetzen und die fertigen Befehle
- Unabhängiger Review: **drei Blocker**, sieben weitere Befunde, alle abgearbeitet
- **810 Tests** grün (vorher 797 mit einem stillen Übersprung)
### Entscheidungen
- **PowerShell wird wirklich gegen PowerShell geprüft.** Auf dieser Maschine gibt es kein `pwsh`,
also nimmt der Test das Container-Abbild — und in CI bricht er ab, statt sich zu überspringen.
Der schwerste Befund des Meilensteins wäre ohne das nie aufgefallen.
- **Typografische Anführungszeichen werden auf ihre ASCII-Form gebracht und dann maskiert.** Als
Text durchreichen lassen sie sich nicht: PowerShell liest sie ohnehin als Begrenzer. Lieber ein
Zeichen, das anders aussieht als gedacht, als ein Befehl, der etwas anderes tut als er liest.
- **Ein Platzhalter außerhalb von Anführungszeichen wird abgewiesen**, nicht gefüllt. Die
Maskierung kann daraus kein Argument machen, und ein halb maskierter Befehl zum Kopieren wäre die
gefährlichste aller Antworten.
- **Gesperrt sind fünf Variablennamen, nicht alle eingebauten.** `techniker`, `datum`, `kunde`,
`kundenkuerzel` und `generiertes_passwort` machen eine Aussage über wer, wann und für wen. `upn`,
`sam` und `mail` bleiben frei — beim Onboarding gibt es die Person im Verzeichnis noch nicht.
- **Ein `sam` hält drei Stellen frei.** Ein einmal notierter Anmeldename muss auch morgen aus der
Regel herausfallen, wenn ein zweiter Träger desselben Namens dazukommt.
### Probleme
- **Ich bin in genau die Falle getappt, die ich in #010 repariert habe:** `$'` als Rückverweis in
`String.replaceAll`. Gefunden hat es mein eigener Test gegen echtes Bash — Lesen hätte es nicht
gefunden.
- **Meine erste HTML-Maskierung war doppelt**, weil ich vergessen hatte, dass React Textknoten
selbst maskiert. Aufgefallen beim Nachdenken über den Test, nicht beim Schreiben des Codes.
- **Der Review hat sich PowerShell in einem Container geholt.** Das ist der Unterschied zwischen
„nach bestem Wissen richtig“ und „gemessen“ — und der Unterschied war hier eine
Codeausführung auf dem Domänencontroller.
- **Vierter Meilenstein in Folge mit einem Kommentar, der ins Leere zeigt:** ein Testkommentar
verwies auf einen Beweis in einer anderen Datei, den es dort nicht gab.
### Nächster Schritt
- #013 Läufe: Service und Abarbeitung — Lauf anlegen, abarbeiten, abschließen, archivieren, mit
der Abarbeitungsansicht am Handy.