trainlog/docs/releases/v0.1.6.md
2026-09-25 04:57:10 +02:00

3.4 KiB

Trainlog v0.1.6 closes the Web refinement and synchronization-recovery cycle. It improves factual Sleep and training presentation, preserves immutable history through difficult replay and recovery cases, and gives the repository a durable Catppuccin-based project entry point without widening frozen product contracts.

Local Web refinement

  • Dashboard activity uses calendar months and ISO weeks, progression is a factual global synthesis, and Analyse drills from BODY ZONES to exercises and measured detail without inventing missing exercise time.
  • A persistent French/English preference, Settings route, denser shared surfaces, responsive charts, and a shared BODY ZONES figure refine the local interface while presentation state remains outside business SQLite.
  • Equipment administration can transactionally merge a custom duplicate into a canonical identity while preserving history, MAX context, preparations, Programs, and causal deletion evidence.

Sleep facts and heart-rate timelines

  • The multi-night agenda, selected-night heart-rate detail, and vector PDF use one temporal projection of factual sleep intervals, awakenings, point events, medication occurrences, and exact bounds.
  • The shared 18:00-to-18:00 agenda keeps exact hourly geometry at desktop and narrow widths. A clearly labelled fallback estimate is presentation-only, non-medical, and never written to Sleep data.
  • Android wake capture records revisioned long-awake intervals, medication quantity survives persistence and synchronization, and Sleep revision payloads are append-only on both platforms.

Synchronization and recovery

  • Bluetooth restart recovery retains immutable generation identity and accepts the exact original generation/digest acknowledgement across conversation runs; direct MTP remains the wired recovery transport.
  • Android foreground and automatic synchronization share one ownership arbiter, and direct-MTP publication waits for MediaProvider visibility before exposing a mutable generation reference.
  • Divergent Sleep revision identities can be recovered without choosing an arbitrary winner. Strict payload checks reject reuse of a historical revision identity with different parentage or content.
  • A separate heart-rate correction companion removes samples strictly after a factual session end and prevents an older immutable generation from resurrecting the removed tail.

Compatibility and validation

  • Desktop schema v36 and Android schema v33 are additive migrations.
  • TRAINLOG_FORMAT_V1, mobile export V3, stable identities, generation/ACK semantics, and Bluetooth/MTP transport ownership remain unchanged.
  • The default automatic exchange remains V3; full-generation synchronization remains behind its trusted local opt-in.
  • Native Meson and Clang ASan/UBSan suites each pass 114/114. Android passes 317 tests (312 passed and five documented optional skips), debug assembly, signed release assembly, and signature verification. Web passes 32 files / 209 tests plus typecheck/build; JSON/import validation, changed-C formatting, and diff checks also pass at the release tag.

Assets

  • trainlog-android-v0.1.6.apk: signed public Android APK.
  • trainlog-tui-linux-x86_64-v0.1.6: Linux x86-64 runtime bundle containing the TUI, local Web adapter, synchronization helpers, and required catalogs.
  • SHA256SUMS: SHA-256 checksums for both artifacts.