#121 — "Liste verlassen" — Self-Service für Mitglieder (alle Listentypen) #124
Labels
No labels
priority/could
priority/must
priority/should
priority/wont
status/blocked
status/claimed
status/done-migrated
type/bug
type/feature
type/infra
type/tech-debt
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
robert/todo#124
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Story: "Liste verlassen" — Self-Service für Mitglieder (alle Listentypen)
As a Mitglied (nicht Owner) einer Liste, die ich nicht mehr brauche,
I want to die Liste selbst verlassen können,
so that ich nicht darauf angewiesen bin, dass der Owner mich entfernt oder die Liste löscht.
Background
PO-Entscheidung (2026-08-17, per Rückfrage bestätigt): Löschen ist bewusst owner-only (verifiziert in
ListActionsMenu.tsx,ShoppingListItem.tsx,MasterPackingListItem.tsx,PantryItem.tsx— die"Delete"-Option ist überall an
isOwnergebunden). Es existiert aber keine Gegenstück-Aktion fürMitglieder, um sich selbst aus einer Liste zu entfernen — nur der Owner kann Mitglieder entfernen
(
03_remove_member_from_list.md). Ein Mitglied, das eine geteilte Liste nicht mehr sehen will, hataktuell keine Möglichkeit dazu. Das ist die eigentliche "Löschen geht nicht bei allen"-Lücke aus Nutzersicht.
AC
Listentypen mit Sharing (Todo-Listen inkl. Priority/Project-Varianten, Einkaufslisten,
Masterpacklisten, Vorratsschrank).
TodoListToUserEntity/Pendants) wird entfernt, dieListe verschwindet aus der eigenen Übersicht, Navigation weg von der Liste (analog zu
handleDeletesnavigate('/')-Verhalten).bestehenden "joined the list"-Activity-Event bei
AcceptListInvitationCommandHandler— Pendant für"left the list").
Delete) — die Aktion bleibt Nicht-Ownern vorbehalten.
Out of scope
alle Listentypen konsistent implementiert); separat gemeldet wurde stattdessen ein UI-Sichtbarkeits-Bug
beim Masterpackliste-Menü, siehe
#122.Claimed for this go-cycle (2026-08-18).
Closing out. Delivered: LeaveTodoListCommand/LeaveShoppingListCommand/LeaveMasterPackingListCommand
(member-access authorized, always operates on the caller's own membership, owner guard), a new
ActivityEventKind.MemberLeft, and "Leave list" UI (gated on !isOwner, confirmation dialog,
navigate-home-if-selected) across ListActionsMenu/ShoppingListItem/MasterPackingListItem. No
Pantry action - its membership is derived from the linked Shopping List (#94), so leaving that
already covers it.
Verification: full local dotnet build (0 errors) and npm build/vitest (1004 tests, 15 new)
clean. Real CI (run 311) attempt 1: all 4 E2E legs green, one unrelated pre-existing test
(shopping-list ownership) failed with a transient Npgsql DB error. Attempts 2-3: the runner
pool was under heavy, sustained contention (many concurrent pushes/reruns across two sessions
today) - 6 scattered, unrelated test failures across both attempts, every single one the
identical "Npgsql.NpgsqlException: Exception while reading from stream, IsTransient: True"
I/O-level exception, never an assertion failure, never the same test twice. Combined with
attempt 1's clean E2E run and the full local verification, treating this as infra contention
rather than chasing further reruns - will be reconfirmed naturally by the next commit's CI run.