diff --git a/docs/superpowers/specs/2026-08-06-trails-design.md b/docs/superpowers/specs/2026-08-06-trails-design.md index 59670aa..85fddc4 100644 --- a/docs/superpowers/specs/2026-08-06-trails-design.md +++ b/docs/superpowers/specs/2026-08-06-trails-design.md @@ -65,6 +65,18 @@ Die dauerhafte Identität eines Trails. verträgt das, die Migration muss die Collections aber in zwei Schritten anlegen (siehe „Migration" unten). +**Warum nicht ein `active`-Flag auf `trail_versions`?** Das wäre ohne +Zirkelbezug ausgekommen, verlagert die Wahrheit aber in N Datensätze statt +einen: Beim Umschalten müssten zwei Versionen geschrieben werden, und ohne +Transaktion kann es kurzzeitig zwei aktive oder gar keine geben. Mit +`trails.current` ändert sich genau ein Feld, und ein ungültiger Zustand ist +nicht möglich. Der Zirkelbezug kostet dafür einen zusätzlichen +Migrationsschritt — einmalig, gegenüber einer Fehlerquelle im Betrieb. + +Dass `current` theoretisch auf eine Version eines anderen Trails zeigen +könnte, fängt das Frontend ab: `activate(versionId)` prüft vorher, dass die +Version zum Trail gehört. + ### `trail_versions` Jeder GPX-Upload erzeugt einen Datensatz. Sie werden nie überschrieben.