64 lines
3.4 KiB
Markdown
64 lines
3.4 KiB
Markdown
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.
|