From 564632522ee7b468b2a68daf21128c84628090d2 Mon Sep 17 00:00:00 2001 From: Daniel Michelberger Date: Thu, 6 Aug 2026 16:33:58 +0200 Subject: [PATCH] =?UTF-8?q?docs:=20Begr=C3=BCndung=20f=C3=BCr=20trails.cur?= =?UTF-8?q?rent=20statt=20active-Flag=20erg=C3=A4nzen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Die Alternative (bool active auf trail_versions) käme ohne Zirkelbezug aus, verlagert die Wahrheit aber in N Datensätze: zwei Schreibvorgänge beim Umschalten, ohne Transaktion kurzzeitig zwei aktive Versionen möglich. trails.current ändert genau ein Feld und kennt keinen ungültigen Zustand. Co-Authored-By: Claude Opus 5 (1M context) --- docs/superpowers/specs/2026-08-06-trails-design.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) 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.