feat(seed): mitgelieferte Vorlagen am Schluessel erkennen
Der Seed erkannte seine sieben Vorlagen am Namen. Wer eine umbenannte, bekam beim naechsten Lauf eine zweite -- und der Schnellstart stand auf der Geraeteseite doppelt. Vorlage.seedSchluessel traegt die Kennung, eindeutig wo gesetzt (partieller Index, weil eigene Vorlagen keinen tragen). Das Austauschformat kennt das Feld als seedSchluessel; nicht als schluessel, wie das Issue plante, denn so heisst dort schon das Feld einer Variablen. Der Rueckfall auf den Namen bleibt, sonst bekaeme eine Installation von vor diesem Feld beim ersten Lauf danach genau die Dubletten, die es verhindern soll. Wird sie so gefunden, traegt der Seed den Schluessel nach -- an der Entwicklungsdatenbank gefahren: sieben nachgetragen, nichts neu angelegt. Der Import setzt den Schluessel nicht, auch nicht wenn das Dokument ihn mitbringt, und der Export schreibt ihn nicht: eine eingespielte Kopie soll nicht den Platz des Originals einnehmen. Gegenprobe gefahren: ohne die Suche am Schluessel werden vier Tests rot. Closes #32
This commit is contained in:
@@ -1,11 +1,11 @@
|
||||
# #021 Stabiler Schlüssel für Seed-Vorlagen
|
||||
|
||||
**Status:** offen
|
||||
**Status:** erledigt
|
||||
**Im Tracker:** [#32](https://git.wilde-server.de/florian.wilde/Laufzettel/issues/32) — die Zählung dort schließt Pull Requests ein und läuft deshalb auseinander
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** phase-2, backend
|
||||
|
||||
**Geschätzt:** 2 h **Tatsächlich:** –
|
||||
**Geschätzt:** 2 h **Tatsächlich:** 55 min
|
||||
|
||||
## Ziel
|
||||
|
||||
@@ -15,17 +15,19 @@ Geräteseite doppelt. Aufgefallen im Review zu [#017](017-seed-sieben-vorlagen.m
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Ein optionales Feld `schluessel` im [Austauschformat](../vorlagen-format.md) — gedacht für
|
||||
- [x] Ein optionales Feld `seedSchluessel` im [Austauschformat](../vorlagen-format.md) — **nicht**
|
||||
`schluessel` wie hier geplant: so heißt im Format schon das Feld einer Variablen, und zwei
|
||||
Dinge gleichen Namens in derselben Datei wären eine Lesefalle — gedacht für
|
||||
mitgelieferte Vorlagen, nicht für die Oberfläche; beim Import **nicht** übernommen, damit eine
|
||||
eingespielte Kopie nicht den Platz des Originals einnimmt
|
||||
- [ ] `Vorlage.seedSchluessel` mit partiellem eindeutigen Index (nur wo gesetzt)
|
||||
- [ ] Der Seed sucht über den Schlüssel und fällt auf den Namen zurück, solange noch keiner gesetzt
|
||||
- [x] `Vorlage.seedSchluessel` mit partiellem eindeutigen Index (nur wo gesetzt)
|
||||
- [x] Der Seed sucht über den Schlüssel und fällt auf den Namen zurück, solange noch keiner gesetzt
|
||||
ist — eine bestehende Installation darf beim ersten Lauf danach keine Dubletten bekommen
|
||||
- [ ] Dokumentieren, was der Schlüssel **nicht** tut: er macht eine Vorlage nicht unveränderlich und
|
||||
- [x] Dokumentieren, was der Schlüssel **nicht** tut: er macht eine Vorlage nicht unveränderlich und
|
||||
erlaubt dem Seed nicht, eine bearbeitete Vorlage zu überschreiben
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Test: umbenannte Seed-Vorlage, zweiter Seed-Lauf legt keine zweite an
|
||||
- [ ] Test: zweiter Lauf erzeugt keine zweite `GeraetetypVorlage`-Zeile
|
||||
- [ ] Test: eine über den Import eingespielte Kopie bekommt **keinen** Schlüssel
|
||||
- [x] Test: umbenannte Seed-Vorlage, zweiter Seed-Lauf legt keine zweite an
|
||||
- [x] Test: zweiter Lauf erzeugt keine zweite `GeraetetypVorlage`-Zeile
|
||||
- [x] Test: eine über den Import eingespielte Kopie bekommt **keinen** Schlüssel
|
||||
|
||||
@@ -0,0 +1,35 @@
|
||||
# #027 Die Editor-Abläufe lassen ihre Vorlagen stehen
|
||||
|
||||
**Status:** offen
|
||||
**Im Tracker:** –
|
||||
**Meilenstein:** v0.2.0
|
||||
**Labels:** phase-2, test
|
||||
**Geschätzt:** 1 h **Tatsächlich:** –
|
||||
|
||||
## Ziel
|
||||
|
||||
In der Entwicklungsdatenbank stehen über hundert Vorlagen mit Namen wie
|
||||
`ZZ E2E Editor 1790324192596 C`. Die Ende-zu-Ende-Abläufe legen sie an und räumen sie nicht weg; bei
|
||||
jedem Lauf kommen drei dazu.
|
||||
|
||||
Aufgefallen beim Nachsehen zu [#021](021-stabiler-schluessel-vorlagen.md), als eine Abfrage über
|
||||
`Vorlage` statt sieben Zeilen über hundert lieferte.
|
||||
|
||||
Das ist kein Schaden an den Tests — das `ZZ`-Präfix sortiert sie ans Ende, und jeder Ablauf legt
|
||||
seine eigenen an. Es ist ein Schaden an allem, was **danach** in dieselbe Datenbank sieht: die
|
||||
Vorlagenliste in der Oberfläche, Screenshots, und jede Abfrage von Hand. Bei einem Fehler, der
|
||||
„0 Treffer“ oder „zu viele Treffer“ heißt, kostet das Zeit.
|
||||
|
||||
## Aufgaben
|
||||
|
||||
- [ ] Die Abläufe unter `tests/e2e/`, die Vorlagen anlegen, räumen sie in einem Nachlauf wieder weg —
|
||||
über ihr Präfix, nicht über gemerkte Kennungen (ein abgebrochener Lauf merkt sich nichts)
|
||||
- [ ] Dasselbe für Geräte, Personen und Läufe prüfen, die die Abläufe anlegen
|
||||
- [ ] Einmalig aufräumen: die vorhandenen Reste aus der Entwicklungsdatenbank entfernen
|
||||
- [ ] Prüfen, ob ein Nachlauf das überhaupt leisten kann — ein Ablauf, der mitten im Lauf scheitert,
|
||||
darf den Nachlauf nicht überspringen
|
||||
|
||||
## Akzeptanzkriterien
|
||||
|
||||
- [ ] Nach `pnpm test:e2e` steht in `Vorlage` keine Zeile mit `ZZ E2E`
|
||||
- [ ] Ein abgebrochener Lauf lässt ebenfalls nichts stehen
|
||||
@@ -25,10 +25,11 @@ Diese Dateien sind die Quelle; `pnpm issues:sync` spiegelt sie in den Gitea-Trac
|
||||
| #018 | [M13 – E2E-Tests, Anleitung, PDF](018-e2e-anleitung-pdf.md) | erledigt | v0.1.0 | 14 h | 2 h 15 min |
|
||||
| #019 | [M14 – Betriebswege und Release v0.1.0](019-betrieb-release.md) | erledigt | v0.1.0 | 10 h | 5 h 25 min |
|
||||
| #020 | [Vorgesetzter auch für von Hand angelegte Personen](020-vorgesetzter-manuell.md) | offen | v0.2.0 | 3 h | – |
|
||||
| #021 | [Stabiler Schlüssel für Seed-Vorlagen](021-stabiler-schluessel-vorlagen.md) | offen | v0.2.0 | 2 h | – |
|
||||
| #021 | [Stabiler Schlüssel für Seed-Vorlagen](021-stabiler-schluessel-vorlagen.md) | erledigt | v0.2.0 | 2 h | 55 min |
|
||||
| #022 | [Schnellstart je Gerätetyp pflegen](022-schnellstart-pflegen.md) | offen | v0.2.0 | 3 h | – |
|
||||
| #023 | [Protokoll ansehen](023-protokoll-ansicht.md) | offen | v0.2.0 | 4 h | – |
|
||||
| #024 | [Proxmox-Einzeiler auf einem echten PVE-Host gegenprüfen](024-proxmox-echtlauf.md) | offen | v0.2.0 | 2 h | – |
|
||||
| #025 | [Healthcheck gibt die rohe Datenbankfehlermeldung heraus](025-gesundheit-fehlermeldung.md) | erledigt | v0.2.0 | 1 h | 25 min |
|
||||
| #026 | [Zwei Konventionen präzisieren, die strenger klingen als sie gemeint sind](026-konventionen-praezisieren.md) | erledigt | v0.2.0 | 1 h | 20 min |
|
||||
| | **Summe** | | | **152 h** | **36 h 05 min** |
|
||||
| #027 | [Die Editor-Abläufe lassen ihre Vorlagen stehen](027-e2e-reste-vorlagen.md) | offen | v0.2.0 | 1 h | – |
|
||||
| | **Summe** | | | **153 h** | **37 h 00 min** |
|
||||
|
||||
@@ -104,6 +104,7 @@ Platzhaltern. **JSON kennt keine Kommentare** — die Zeilen mit `//` müssen vo
|
||||
| -------------- | -------- | ------------------------------------------------------------------------------- |
|
||||
| `format` | Pflicht | Fassung des Austauschformats. Derzeit `1`; ein anderer Wert wird abgewiesen. |
|
||||
| `name` | Pflicht | Name der Vorlage, nicht leer. Namen sind **nicht** eindeutig. |
|
||||
| `seedSchluessel` | optional | **Nur für mitgelieferte Vorlagen.** Siehe unten — beim Import verfällt das Feld. |
|
||||
| `beschreibung` | optional | Ein bis zwei Sätze, was die Vorlage abdeckt. |
|
||||
| `kategorie` | optional | Freitext, gruppiert die Vorlagenliste (etwa `Onboarding`). |
|
||||
| `schlagworte` | optional | Liste nicht leerer Texte; Standard `[]`. |
|
||||
@@ -230,3 +231,33 @@ Das Feld `format` ist die Fassung des Formats, nicht die der Anwendung. Es gilt:
|
||||
der die Hälfte versteht und die andere Hälfte still verwirft, wäre schlimmer als ein Fehlschlag.
|
||||
|
||||
Die Zahl steht als `FORMAT_VERSION` in `src/lib/vorlagen-format.ts` an genau einer Stelle.
|
||||
|
||||
## `seedSchluessel` — nur für mitgelieferte Vorlagen
|
||||
|
||||
Die sieben Vorlagen, die Laufzettel mitbringt, tragen in ihrer Datei ein zusätzliches Feld:
|
||||
|
||||
```json
|
||||
{ "format": 1, "name": "PC Neuinstallation", "seedSchluessel": "pc-neuinstallation" }
|
||||
```
|
||||
|
||||
Daran erkennt der Seed sie wieder. Vorher ging das über den **Namen** — und wer eine mitgelieferte
|
||||
Vorlage umbenannte, bekam beim nächsten Seed-Lauf eine zweite, samt doppeltem Schnellstart auf der
|
||||
Geräteseite (#021).
|
||||
|
||||
**Was der Schlüssel nicht tut:**
|
||||
|
||||
- Er macht eine Vorlage **nicht unveränderlich.** Umbenennen, umbauen, archivieren — alles bleibt
|
||||
erlaubt. Der Seed erkennt sie danach wieder und lässt sie in Ruhe.
|
||||
- Er erlaubt dem Seed **nicht**, eine bearbeitete Vorlage zu überschreiben. Gibt es die Vorlage, legt
|
||||
er nichts an und ändert nichts. Das war vorher so und bleibt so.
|
||||
- Er ist **keine Kennung über Installationen hinweg.** Zwei Installationen haben für dieselbe
|
||||
mitgelieferte Vorlage denselben Schlüssel, aber verschiedene `id`s — der Schlüssel sagt nur
|
||||
„diese Zeile stammt aus dem Seed“.
|
||||
|
||||
**Beim Import verfällt das Feld.** Wer eine mitgelieferte Vorlage exportiert und wieder einspielt,
|
||||
bekommt eine gewöhnliche Vorlage ohne Schlüssel. Das ist Absicht: die Kopie soll nicht den Platz des
|
||||
Originals einnehmen, sonst hielte der Seed sie dafür und würde das Original ein zweites Mal anlegen.
|
||||
Der Export schreibt das Feld deshalb auch nicht — ein Feld, das beim Einlesen verfällt, verwirrt nur.
|
||||
|
||||
Eigene Vorlagen brauchen den Schlüssel nicht und sollten ihn nicht bekommen. Er ist eindeutig, wo er
|
||||
gesetzt ist; eine zweite Vorlage mit demselben Schlüssel weist die Datenbank ab.
|
||||
|
||||
Reference in New Issue
Block a user