Listenübersicht — Vollbild-Bearbeitungsmodus für Reihenfolge + Gruppen-Überschriften #170
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#170
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: Listenübersicht — Vollbild-Bearbeitungsmodus für Reihenfolge + Gruppen-Überschriften
As a Nutzer mit mehreren Listen,
I want to die Reihenfolge meiner Listen und Gruppen-Überschriften nur in einem eigenen, dafür vorgesehenen Bearbeitungsmodus ändern können — nicht mehr direkt in der alltäglichen Listenübersicht,
so that die alltägliche Übersicht aufgeräumter ist (mehr Platz für die Listentitel) und ich zusätzlich meine Listen in benannte Gruppen sortieren kann.
Kontext (verifiziert im Code, Folge-Story zu #147/#149):
TodoListMenu.tsxerlaubt aktuell direktes Umsortieren per Drag & Drop in der normalen Sidebar-Listenübersicht (SortableListRow, ein per Hover eingeblendeter Grip-Handle, absolut positioniert über dem bestehenden linken Padding jeder Zeile) — Backend:ReorderUserListsCommand/UserListOrderEntity, eine flache, rein pro Nutzer gespeicherte Reihenfolge (ListType,ListId,SortOrder), keine Gruppen-/Abschnitts-Struktur.t('todo.menu.addList')) sitzt aktuell als einzige Aktion oben in der Listenübersicht.Acceptance criteria:
Out of scope for this story:
Open questions: Keine mehr — siehe Entscheidung unten.
Entscheidung (2026-09-07, mit dem Menschen geklärt):
Claimed for this cycle. Starting: full-screen edit mode for list reorder + named group headings (backend: new group-heading entity/migration extending ReorderUserListsCommand/UserListOrderEntity; frontend: TodoListMenu rework with an Edit-mode screen, drag handle removed from the everyday sidebar).
Implemented and pushed to master (2 commits: backend
4ee367f, frontenda56e48a).Scope delivered (matches all acceptance criteria):
UserListOrderEntityordering sequence as a 5th pseudo-list type (ListType.GroupHeading) - a heading's position relative to lists falls out of the existing single-sequence design for free, since grouping is purely positional (no GroupId field on any list, no heading assignment required for a list).Backend:
GroupHeadingEntity(new migration),CreateGroupHeadingCommand/DeleteGroupHeadingCommand/GetGroupHeadingsOfCurrentUserQuery,AuthorizeGroupHeadingOwnerAccessQueryHandler(ownership gate, mirrorsAuthorizeApiKeyOwnerAccessQueryHandler's shape), andReorderUserListsCommandHandlerextended to validate submitted headings server-side against the user's own current set (5th composed query, run concurrently with the existing 4). 12 new backend tests, all passing (843/843 full suite green).Frontend: new
ListOrderEditScreen.tsx(rendered via a React portal intodocument.body- the sidebar'smd:translate-x-0transform would otherwise trap a nestedposition: fixedoverlay inside its own narrow bounds; caught by manually testing in a browser, not by any automated test, since jsdom doesn't model CSS containing blocks).TodoListMenu.tsxsimplified to drop all dnd-kit wiring. 8 new/updated frontend tests, all passing (1218/1218 full suite green).tsc -bandnpm run buildboth clean.Self-review + security-review skill: ran both as the
/code-reviewsubstitute (seeCLAUDE.mdstep 3) - no findings. Ownership checks verified:CreateGroupHeadingCommandsetsUserIdfrom the session, never from client input;DeleteGroupHeadingCommandis gated by the new owner-access authorize query;GetGroupHeadingsOfCurrentUserQueryand the reorder validation both scope strictly to the current user server-side.Known limitation this cycle: Docker Desktop crashed mid-cycle (WSL2 backend stuck, unrelated to this change) after one successful manual browser verification pass through the feature - couldn't get a second rebuild+revisit in after the portal fix. The fix itself is a well-understood, standard CSS containing-block issue (not a guess), and everything is covered by the automated suites above; noting this transparently rather than claiming a rebuild that didn't happen.
Follow-up: Docker Desktop recovered a few minutes after the closing comment above. Rebuilt the review container and fully re-verified live: logged in, opened "+ Edit" and confirmed the screen now genuinely covers the whole viewport (the portal fix works), created a test group heading (appeared at the end with a delete button), closed edit mode and confirmed the sidebar renders it as a plain read-only divider with no drag handle, then reopened edit mode and deleted the heading (the 3 lists were untouched). No remaining gaps.