diff --git a/README.md b/README.md index 320f99a..47535e6 100644 --- a/README.md +++ b/README.md @@ -36,7 +36,7 @@ Programs. Sessions → Programmes remains the technical administration/import, list, detail, archive, and delete surface. Web Exercises administration, the factual Dashboard/Analyse read model, and the synchronized Sleep Diary workspace are the stable v0.1.4 baseline. Version -0.1.5 development now has validated persistent CYCPLUS acquisition, the global `♥ BPM` indicator, training exercise timestamps, one-tap Android Sleep capture, dedicated synchronized `cardio` sessions, versioned measured Cardio calibration, fresh-signal BPM-guided phases and factual Web heart-rate timelines in History/Sleep; complete 0.1.5 validation is the current implementation cursor. +0.1.5 development now has validated persistent CYCPLUS acquisition, the global `♥ BPM` indicator, training exercise timestamps, one-tap Android Sleep capture, dedicated synchronized `cardio` sessions, versioned measured Cardio calibration, fresh-signal BPM-guided phases and factual Web heart-rate timelines in History/Sleep; software validation is complete; private-device visual review is the current implementation cursor. ## Releases diff --git a/docs/current_state.md b/docs/current_state.md index 230c419..6ef0955 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -156,7 +156,8 @@ parallel implementation of its rules. | Cardio calibration | `TRAINLOG_CARDIO_CALIBRATION_V1=PASS`: reserved system Calibration cardio exercise, real measured observed peak, ≥3 min recovery with bounded +1/+2/+3 min factual samples, immutable profile and Android→desktop calibration companion | | Cardio BPM guidance | `TRAINLOG_CARDIO_BPM_GUIDANCE_V1=PASS`: absolute/calibration-derived immutable BPM targets, 2 BPM hysteresis, 3 s confirmation, stale-signal suspension, durable phase/condition history, Android live guidance UI and strict Android→desktop `trainlog-cardio-guidance` V1 sync | | Cardio Web visualization | `TRAINLOG_CARDIO_WEB_VISUALIZATION_V1=PASS`: one bounded factual heart-rate timeline read model/HTTP endpoint powers Web History and Sleep with raw BPM/RR, real session/exercise/Sleep markers, guided targets/instructions and calibration facts; no sleep-stage or medical inference | -| Current operational cursor | `TRAINLOG_0_1_5_VALIDATION_V1`: complete Android/native/Web regression, migration, package, sync/replay and private-device smoke validation before any stable release decision | +| 0.1.5 validation | `TRAINLOG_0_1_5_VALIDATION_V1=SOFTWARE_PASS / DEVICE_VISUAL_PENDING`: complete native 111/111, Android 300 tests (295 pass + 5 historical skips), Web 183/183 + typecheck/build, vc43 in-place private update with schema v31/integrity/data preservation and live CYCPLUS 94–95 BPM foreground capture validated while locked | +| Current operational cursor | `TRAINLOG_0_1_5_DEVICE_VISUAL_REVIEW_V1`: unlock the private phone and visually smoke-test the Android Sommeil, Calibration cardio and active guided-cardio presentation before any stable release decision | | Complete synchronization gap contract | Frozen dependency contract; operational USB/Drive slices required by v0.1.2 are delivered | | Isolated synchronization test environment | `TRAINLOG_SYNC_TEST_ENV_V1=PASS/FROZEN` | | Synchronization characterization | `TRAINLOG_SYNC_CHARACTERIZATION_V1=PASS/FROZEN` | diff --git a/docs/roadmap.md b/docs/roadmap.md index 1b13003..96a5b48 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -69,7 +69,7 @@ sensor. Heart-rate ingestion must not reuse or overload the frozen Trainlog Bluetooth synchronization transport contract. ```text -CURRENT_OPERATIONAL_CURSOR=TRAINLOG_0_1_5_VALIDATION_V1 +CURRENT_OPERATIONAL_CURSOR=TRAINLOG_0_1_5_DEVICE_VISUAL_REVIEW_V1 ``` The focused `TRAINLOG_SYNC_CAUSAL_DELETE_V1_CLOSEOUT` is complete before this diff --git a/docs/tests.md b/docs/tests.md index f444d73..73095af 100644 --- a/docs/tests.md +++ b/docs/tests.md @@ -1862,3 +1862,35 @@ test covers valid empty GET, bad context rejection and GET-only semantics. The 2026-09-23 closeout passes the complete native inventory **111/111** and the complete Web inventory **29 files / 183 tests**; Web typecheck and production build also succeed. + +## Trainlog 0.1.5 complete validation + +`TRAINLOG_0_1_5_VALIDATION_V1=SOFTWARE_PASS / DEVICE_VISUAL_PENDING` closes the +complete software regression after Cardio Web visualization. The native Meson +inventory passes **111/111**. Android reports **300 JVM tests: 295 passed, five +historical/external skips, zero failures/errors**, and `assembleDebug` +succeeds. Web passes **29 files / 183 tests**, TypeScript typecheck and the +production Vite build. + +The authorized SM_G990B was backed up before the final private candidate. The +pre-update `trainlog-android.db` was copied while the app was force-stopped and +verified at 1,892,352 bytes. Private Trainlog 0.1.5 advanced in place from +versionCode 42 to versionCode 43 using the exact same Android debug signing +certificate; `adb install -r` succeeded without uninstall or data clear. + +Before and after vc43, the Android store remained schema v31 with identical +high-level business counts: 12 completed sessions, 45 catalogue exercises and +2 Sleep Diary entries. The four cardio-guidance tables are present after the +update, `PRAGMA integrity_check` returns `ok`, and +`PRAGMA foreign_key_check` returns no row. + +The locked-device background smoke test confirms both Trainlog foreground +services remain alive. `HeartRateSensorService` continued receiving the real +CYCPLUS H2 and exposed 94 then 95 BPM through its foreground notification while +the phone was dozing, proving the final candidate still acquires live heart +rate without requiring the activity to remain visible. + +The phone was locked during the final UI probe, so the visual smoke test of +Sommeil, Calibration cardio and active guided-cardio presentation remains +`DEVICE_VISUAL_PENDING`. No stable `v0.1.5` tag or release is authorized by +this closeout.