Auto-Pack-Modal warnt zwar (templates/index.html:1626-1630), aber es gibt keinen Undo. Versehentlicher Klick und das gesamte manuelle Layout ist weg.
Ursache
saveLayout() (:1611) POSTet sofort items an /api/layout. Es gibt keine History und kein Diff-Snapshot vor Auto-Pack.
Akzeptanz
Mindestens: Vor Auto-Pack Snapshot in sessionStorage, Undo-Button im Toast "Layout automatisch angeordnet" für 10s
Optional: Volle Undo/Redo-History mit Strg+Z (größeres Refactor)
Im Toast steht klar "Rückgängig" mit funktionierendem Handler
## Symptom
Auto-Pack-Modal warnt zwar (`templates/index.html:1626-1630`), aber es gibt keinen Undo. Versehentlicher Klick und das gesamte manuelle Layout ist weg.
## Ursache
`saveLayout()` (`:1611`) POSTet sofort `items` an `/api/layout`. Es gibt keine History und kein Diff-Snapshot vor Auto-Pack.
## Akzeptanz
- Mindestens: Vor Auto-Pack Snapshot in `sessionStorage`, Undo-Button im Toast "Layout automatisch angeordnet" für 10s
- Optional: Volle Undo/Redo-History mit Strg+Z (größeres Refactor)
- Im Toast steht klar "Rückgängig" mit funktionierendem Handler
Action-Button ist klickbar trotz dismiss-on-click (eigener Listener mit stopPropagation).
Bei Undo-Klick: POST /api/layout mit den snapshot-Items → Server restored → renderGrid() → "Layout wiederhergestellt".
Modal-Text weist auf 10s Undo-Möglichkeit hin.
Statt sessionStorage: local closure. Vorteile: kein Storage-Bloat, keine Multi-Tab-Konflikte. Bei Page-Reload ist Undo weg (Server hält den letzten Stand als Source-of-Truth).
Wiederverwendbar: Das actionable-Toast-Pattern ist jetzt generisch. Andere Aktionen (z.B. "Snapshot wiederherstellen" aus Sidebar) können denselben Mechanismus nutzen.
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.
Symptom
Auto-Pack-Modal warnt zwar (
templates/index.html:1626-1630), aber es gibt keinen Undo. Versehentlicher Klick und das gesamte manuelle Layout ist weg.Ursache
saveLayout()(:1611) POSTet sofortitemsan/api/layout. Es gibt keine History und kein Diff-Snapshot vor Auto-Pack.Akzeptanz
sessionStorage, Undo-Button im Toast "Layout automatisch angeordnet" für 10sFixed in branch
fix/BUG-06-autopack-undo(commita465912, pushed).Fix:
packAll()speichertlayoutItemsals JSON-Snapshot in einer local closure (vor dem pack-Call).toast()bekommt neuen 4. Parameteraction={label, onClick}— Toast rendert Action-Button.dismiss-on-click(eigener Listener mitstopPropagation).POST /api/layoutmit den snapshot-Items → Server restored →renderGrid()→ "Layout wiederhergestellt".Statt sessionStorage: local closure. Vorteile: kein Storage-Bloat, keine Multi-Tab-Konflikte. Bei Page-Reload ist Undo weg (Server hält den letzten Stand als Source-of-Truth).
Wiederverwendbar: Das actionable-Toast-Pattern ist jetzt generisch. Andere Aktionen (z.B. "Snapshot wiederherstellen" aus Sidebar) können denselben Mechanismus nutzen.
Frischer Beweis:
node tests/test_autopack_undo.js→ 8/8 grünLive-Test:
GET /?demo=1 → 200, 90847 bytesPR: https://git.pkop.de/Vibecode/epaper-dashboard/pulls/new/fix/BUG-06-autopack-undo