Skip to main content

Version log

The canonical record of every released version of each component. Update the relevant table on every release. Versions are independent per component (the recorder firmware, the app, and the web app do not share a number).

recorder 1.5.13 pendant 1.0.0 app 0.1.0 web 1.5.9 device-api v15

Where each version is defined (source of truth)

ComponentField / source of truthCurrent
Recorder firmwareSATE_Recorder/SATE_Recorder.inoFIRMWARE_VERSION1.5.13
Pendant firmwareSATE_Pendant/SATE_Pendant.inoFIRMWARE_VERSION (added 2026-07-22)1.0.0
Mobile appapp.json version (+ package.json)0.1.0
Web appreact_app_sate-ui_update/package.json version1.5.9
Backend (device-api)in-comment [vNN] header of .../functions/device-api/index.tsv15

:::note Pendant version field (new) SATE_Pendant.ino now has a FIRMWARE_VERSION constant (1.0.0, added 2026-07-22) so releases can be logged here. It is not yet exposed over BLE — add a version characteristic (or a Device Information Service firmware-revision string) so the app can read/verify what's flashed. The device already ships a BLEDfu OTA service. :::

git log remains the ground truth for what actually shipped; this page is the human-readable summary. The recorder source version can be ahead of the GitHub release asset tag (e.g. FIRMWARE_VERSION=1.5.13 while prebuilt bins are still tagged fw-1.5.12 if no release was cut).


Recorder firmware

VersionDateNotes
1.5.132026-07-22Server-verified trim (GET /api/sessions/verify before freeing SD audio) · reboot auto-resume of a local take (~5 s flush + restart empty part00) · crash-safe delete/renumber (NVS journal + boot heal). Source only — no GitHub release cut yet.
1.5.122026-07-21Sketch restructure + full hardware doc refresh; bounded reclaim trimPatientSyncedAudio (keep newest 5 synced sessions per patient).
1.5.92026-07Reclaim policy change: device holds the only copy until user delete (the three old auto-purge paths removed).
1.5.5 – 1.5.82026-07-01Battery calibration, Wi-Fi TX power, mic gain, loudness.
1.5.1 – 1.5.42026-07-01Unstick save; charging + battery fix; add cell-mV telemetry.
1.5.02026-06-30SLP-focused recorder UI, auto-dim, device telemetry to admin.
1.0.62026-06Battery ADC on GPIO34 (wrong for S3) → bootloop; fixed by moving to GPIO9.
1.0.x2026-06-16OTA firmware updates, battery %, MAC onboarding, web update UI.
1.0.12026-06-14Companion app → Supabase; chunk-upload path fix.
0.8.22026-06-13Record long sessions as 1-min segments + merge.

:::note Upload transport migration Early builds streamed device audio to Supabase over a WebSocket. That was replaced by the current resumable chunked HTTPS upload (POST /sessions/chunk, byte-verified on assembly), which survives connection drops and mid-upload reboots a single long-lived socket could not. See Architecture → Who triggers what. :::

Pendant firmware

VersionDateNotes
1.0.02026-07First versioned pendant firmware. BLE PCM streaming (16 kHz mono, 244 B notifies), DC-block HPF + tanh soft-clip gain, nap mode, overrun guard, DC/DC regulator, BLEDfu OTA. (Pendant work landed 2026-07-10; sketch moved to SATE_Pendant/ 2026-07-21; FIRMWARE_VERSION field added 2026-07-22.)

Mobile app

VersionDateNotes
0.1.0currentRecorder + Pendant + Plaud support; auto-sync; QR/mobile-link login.

Web app

VersionDateNotes
1.5.9currentClinician report, SALT transcript editing, annotations, clinical metrics, admin firmware publish, Stripe billing.

Backend — device-api

VersionDateNotes
v152026-07-22GET /sessions/verify (device-key, read-only) · storeSessionRecord idempotency probe (dedup a re-uploaded take) · publishFirmware validation (semver + 0xE9 magic + size).
v14Async processing state machine on sate_device_sessions.status (queued→processing→done|error, attempts) · POST /sessions/:id/retry. Processing moved to the container; process-device-session became a 200 no-op.
v12/sessions/chunk stores each slice as its own part and stitches on final (was quadratic) · accepts &total= from firmware ≥1.5.9 and rejects a size mismatch.

How to add a release entry

  1. Bump the version in its source of truth (table at the top).
  2. Add a row to that component's table here: | <version> | <YYYY-MM-DD> | <what changed> |.
  3. For firmware, also follow Firmware release & OTA (build, publish the .bin, insert the sate_firmware row).
  4. Commit both together so git log and this page agree.

The live deployed versions (what's actually running in the field) will also surface in the service-monitoring dashboard — the recorder reports its fw in each heartbeat, and the app/web report their build version.