- Save every completed generation to SQLite (generation_store.py) with
WAV and waveform peaks written to data/generations/<id>/
- Deferred DB write until success — cancelled/errored generations never
touch the DB and never appear in the library
- Fixed cancel+regenerate IndexError: _reset_scheduler_caches() now
directly zeros scheduler._step_index and running state in addition to
clearing VibePod cache dicts; same explicit resets added in the fresh
path of prepare_noise_scheduler as belt-and-suspenders
- Added /library page with GenerationCard, WaveformPreview, waveform
fetch, play/pause, download, delete, pagination, empty + error states
- Added generation API routes (list, single, audio stream, waveform,
delete) proxying to Python server
- Added Library nav link to Header with active state
- Persist script/speaker/CFG to localStorage so generate page state
survives navigation
- Updated build plan: Phase 0+1 ticked off, better-sqlite3 moved to
Phase 2, architectural note on Python owning all persistence