
Patch release with two recording-teardown fixes (#5). Fixed Recording crash on Stop: clicking Stop while data was still streaming could kill the per-stream acquisition thread with KeyError: '<stream>'. The acquire loop and session teardown are now synchronized through a dedicated per-stream lock, so an append already in flight cannot run after the session's Zarr stores have been cleared. The lock is separate from the buffer/window lock used by UI-facing reads, so disk writes never block the display path. Same-second session folder collision: starting a new recording within the same wall-clock second as stopping the previous one could destroy the new recording. Each session folder now gets a short unique suffix, so the previous session's background pack-and-zip step (which deletes its own folder) can no longer remove or collide with the new session's data. Silent loss masking: Session.append() now drops a late append for a finalized stream and logs it at debug level instead of raising, as defense in depth around the teardown path. Full changelog: https://github.com/NsquaredLab/MyoGestic/blob/main/CHANGELOG.md
