···7788## [Unreleased]
991010+## [0.3.0] — 2026-03-19
1111+1012### Added
1111-- Empty Trash button to permanently delete all trashed documents at once
1313+- **Version history panel** (Cmd+Shift+H): slide-in sidebar showing all saved versions with relative timestamps, named versions with star badges, word/cell count diffs, restore with confirmation
1414+- **IndexedDB local backup**: every save backed up locally, crash recovery falls back to local when server fails, keeps last 3 backups per document with FNV-1a hash verification
1515+- **Save retry**: 3-attempt exponential backoff (1s, 2s, 4s) on server failure
1616+- **Save indicator**: colored dot (green=saved, orange=saving, red=error) with pulse animation, Cmd+S to force save
1717+- **beforeunload protection**: browser warns on unsaved changes, emergency IndexedDB backup
1818+- **Named versions**: "Name this version" via PUT metadata endpoint
1919+- **ExcelJS**: replaced SheetJS with ExcelJS for proper cell style extraction (background colors, text colors, fonts)
2020+- **Empty Trash button**: permanently delete all trashed documents at once
2121+- **Playwright e2e tests**: 16 tests covering document/sheet lifecycle, import, collaboration
2222+- **CI test gate**: unit + e2e tests run before build, blocking broken deploys
2323+2424+### Fixed
2525+- XLSX import crash: missing `ensureSheet`/`renderSheetTabs` parameters
2626+- Trash toggle: list now renders and displays correctly when expanded
2727+- Import naming: files use filename (minus extension) as document name
2828+- Title select-all: clicking title selects all text for easy renaming
1229- Auto-versioning: snapshots auto-created every 5 minutes for recovery
1313-- Save protection: `_hadSnapshot` persists across saves, not just loads
14301531## [0.2.0] — 2026-03-19
1632