Quelle: bugs.md #1 (Tester-Durchgang Runde 1, 2026-09-17) Confidence: hoch (Logikfehler direkt im Code nachvollzogen, nicht live reproduziert)
SetupViewModel.checkPortConflict(for:) schrieb das Ergebnis eines Task ohne Generation-Counter — bei schnellem Portwechsel konnte ein überholter, aber später fertiger Task das Ergebnis eines neueren Checks überschreiben ("last response wins" statt "last request wins").
Fehlerbild: Nutzer wählt Port A (Konflikt), wechselt schnell zu Port B (frei) — kommt As Ergebnis später zurück, zeigt die App fälschlich eine Warnung für den freien Port B, oder verschluckt umgekehrt eine echte Warnung.
Fix: Generation-Zähler portConflictRequestGeneration: [LanDhcpConfig.ID: Int] ergänzt — ein abgeschlossener Task schreibt sein Ergebnis nur, wenn seine Generation noch aktuell ist.
Verifikation: Build grün, 101 Unit-Tests grün. Noch nicht live gegenreproduziert.
**Quelle:** bugs.md #1 (Tester-Durchgang Runde 1, 2026-09-17)
**Confidence:** hoch (Logikfehler direkt im Code nachvollzogen, nicht live reproduziert)
`SetupViewModel.checkPortConflict(for:)` schrieb das Ergebnis eines `Task` ohne Generation-Counter — bei schnellem Portwechsel konnte ein überholter, aber später fertiger Task das Ergebnis eines neueren Checks überschreiben ("last response wins" statt "last request wins").
**Fehlerbild:** Nutzer wählt Port A (Konflikt), wechselt schnell zu Port B (frei) — kommt As Ergebnis später zurück, zeigt die App fälschlich eine Warnung für den freien Port B, oder verschluckt umgekehrt eine echte Warnung.
**Fix:** Generation-Zähler `portConflictRequestGeneration: [LanDhcpConfig.ID: Int]` ergänzt — ein abgeschlossener Task schreibt sein Ergebnis nur, wenn seine Generation noch aktuell ist.
**Verifikation:** Build grün, 101 Unit-Tests grün. Noch nicht live gegenreproduziert.
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Quelle: bugs.md #1 (Tester-Durchgang Runde 1, 2026-09-17)
Confidence: hoch (Logikfehler direkt im Code nachvollzogen, nicht live reproduziert)
SetupViewModel.checkPortConflict(for:)schrieb das Ergebnis einesTaskohne Generation-Counter — bei schnellem Portwechsel konnte ein überholter, aber später fertiger Task das Ergebnis eines neueren Checks überschreiben ("last response wins" statt "last request wins").Fehlerbild: Nutzer wählt Port A (Konflikt), wechselt schnell zu Port B (frei) — kommt As Ergebnis später zurück, zeigt die App fälschlich eine Warnung für den freien Port B, oder verschluckt umgekehrt eine echte Warnung.
Fix: Generation-Zähler
portConflictRequestGeneration: [LanDhcpConfig.ID: Int]ergänzt — ein abgeschlossener Task schreibt sein Ergebnis nur, wenn seine Generation noch aktuell ist.Verifikation: Build grün, 101 Unit-Tests grün. Noch nicht live gegenreproduziert.