v3.2.5
✨ New features
- Sleep stages on Aerivue — SomnoStage hypnograms now upload to Aerivue
in SomnoTrace's native SST1 binary format, in addition to the existing
CSV uploads to SMB:- 📦 Uploaded as-is — the original epoch grid is preserved (30 s for
AirSense 11 and full-rate rings, 32 s for Gen1 O2 Rings at 0.25 Hz) with
per-epoch confidence scores intact. No conversion, no resampling, no
Zeo grid. - 🔀 Per-backend format routing — each upload destination now declares
which stage format it consumes (SMB → CSV, Aerivue → SST), with separate
CSV and SST fingerprints in upload state. A rescore that changes the
.sst re-uploads to Aerivue without disturbing SMB's CSV state — and a
CSV-only change never re-triggers an SST upload. - 🔍 Direct SST discovery — valid
.sstsidecars are found directly
understreams/andoximetry/recordings/too, so a hypnogram still
uploads even when its CSV export doesn't exist (e.g. freshly-rescored
files).PARTIAL(still-growing) andINSUFFICIENT(not enough valid
oximetry) sidecars are never uploaded. - 📤 Each backend's refused/accepted stage files are logged from the
server's import response, and a refused stage file fails the day so it
retries instead of being silently marked done. - 🧩 Backend capacity raised 4 → 8 and BreathingRoom is pre-declared as an
SST consumer — adding the next stage endpoint is now a flag flip, not a
framework rework.
- 📦 Uploaded as-is — the original epoch grid is preserved (30 s for
🔧 Reliability fixes
- SMB "Test Connection" false failure (fixes #330) — after the first
successful upload the test wrongly reported "write test failed" forever:
itsDATALOGprobe hitSTATUS_OBJECT_NAME_COLLISION("directory already
exists"), which vendored libsmb2 never surfaces viasmb2_get_nterror().
The firmware now recovers the real status from libsmb2's error string —
no vendored-library patch needed. The same fix also repairs adaptive
SMB-signing retry when a subfolder path is configured (Windows 11 24H2+
servers that require signing were falsely reported as "folder not found").
📖 Docs & 🧪 tests
- 📄 New spec:
0015-somnostage-sst-format.md— the complete SST1 byte
layout, stage/confidence encoding, flag semantics and epoch-grid rules,
written for third-party endpoints implementing.sstingestion. - 🧪 Expanded host tests: dual-format tracking, format-isolated fingerprint
invalidation, SST header/size/flag validation, 32 s Gen1 grids, SST-only
discovery, and reboot persistence.