Trainlog v0.1.5 completes the factual cardio capture cycle and makes the Android-to-Web Sleep workflow ready for real nightly use without adding medical, sleep-stage, or causal inference. ## Heart-rate capture and cardio sessions - Android persistently acquires real CYCPLUS Heart Rate Service measurements, retains factual observation timestamps, BPM and raw RR values, and exposes a global fresh/stale/disconnected indicator. - Training occurrences have explicit start/end timelines so synchronized heart-rate samples retain their stable exercise ownership instead of inferring it later from time overlap. - Dedicated `cardio` sessions, measured calibration profiles and fresh-signal BPM-guided phases use separate versioned companions and preserve the frozen historical session formats. - Guidance suspends on stale signal and records measured facts only; it does not estimate fitness, recovery, readiness or medical state. ## Factual Web timelines - History and Sleep display synchronized heart-rate samples through one bounded native read model and responsive Web timeline. - Full-source min/mean/max and RR counts remain exact while large visual projections are bounded. - Cardio timelines show factual occurrence bounds, resolved targets, instruction changes and measured calibration points. - Sleep highlights notable relative rises and falls with a deterministic local median rule, explicitly without assigning a sleep stage or cause. ## Sleep capture and medication quantity - Medication can be recorded before Couché. The first intake creates one durable pending 18:00-to-18:00 night; Couché advances the same stable entry, Réveil leaves heart-rate capture running, and Levé closes it at the factual final-get-up timestamp. - A missing sensor fabricates neither a capture nor a sample. - Sleep Diary V2 carries structured per-intake quantity while published V1 remains strict and readable; historical intakes default to quantity one. - The Web agenda renders every night in the selected period on one aligned 18:00-to-18:00 axis, and the selected night owns the full-width heart-rate detail. PDF reports retain their multi-night behavior and display quantity without replacing per-unit dose. ## Compatibility and validation - Desktop schema v35 and Android schema v32 are additive migrations. - `TRAINLOG_FORMAT_V1`, mobile export V3, stable identities, causal revision lineage, generation/ACK semantics and Bluetooth/MTP transport ownership are unchanged. - Native tests, Android unit tests and APK assembly, Web tests/typecheck/build, JSON/import validation, changed-C formatting and exact Sleep V2 replay all pass at the release tag. ## Assets - `trainlog-android-v0.1.5.apk`: signed public Android APK. - `trainlog-tui-linux-x86_64-v0.1.5`: Linux x86-64 runtime bundle containing the TUI, local Web adapter, synchronization helpers and required catalogs. - `SHA256SUMS`: SHA-256 checksums for both artifacts.