diff --git a/docs/current_state.md b/docs/current_state.md index d8ea7c2..7a94a92 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -148,8 +148,8 @@ parallel implementation of its rules. | Local Web | `TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED` | | Web Exercises V1 | `TRAINLOG_WEB_EXERCISES_V1=PASS` | | Cardio persistence/sync | `TRAINLOG_CARDIO_PERSISTENCE_SYNC_V1=PASS`: Android v27 + desktop v30, strict optional `trainlog-heart-rate` V1 Android→desktop companion, generation relation and correlated ACK | -| Cardio BLE diagnostics | `TRAINLOG_CARDIO_BLE_DIAGNOSTICS_V1=SOFTWARE_PASS / HARDWARE_VALIDATION_PENDING`: strict `0x2A37` parser, bounded HRS/expanded BLE scan, GATT service discovery and notification subscription are installed on Android 0.1.5 vc38; filtered real-device scan observed no advertising HRS device on 2026-09-23 | -| Current operational cursor | `TRAINLOG_CARDIO_BLE_HARDWARE_VALIDATION_V1`: identify the real armband, confirm `0x180D/0x2A37`, notification cadence and optional RR/contact/energy fields before persistent acquisition | +| Cardio BLE diagnostics | `TRAINLOG_CARDIO_BLE_DIAGNOSTICS_V1=PASS`: real CYCPLUS H2 validated on Android; `0x180D` + `0x2A37`, Battery Service, approximately 1 Hz notifications and one raw RR interval per observed notification; contact and energy fields absent in the observed payloads | +| Current operational cursor | `TRAINLOG_CARDIO_PERSISTENT_ACQUISITION_V1`: remember the validated sensor, persistent reconnecting Android acquisition service, stale-signal handling and global grey/orange/green `♥ BPM` indicator | | 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 dd7c046..3e41fd7 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_CARDIO_BLE_HARDWARE_VALIDATION_V1 +CURRENT_OPERATIONAL_CURSOR=TRAINLOG_CARDIO_PERSISTENT_ACQUISITION_V1 ``` The focused `TRAINLOG_SYNC_CAUSAL_DELETE_V1_CLOSEOUT` is complete before this diff --git a/docs/tests.md b/docs/tests.md index cc2b85c..ec78b38 100644 --- a/docs/tests.md +++ b/docs/tests.md @@ -1690,10 +1690,16 @@ On 2026-09-23 the diagnostic APK was installed non-destructively on the authorized SM_G990B as Trainlog 0.1.5 versionCode 38 using the same Android debug signing certificate as the existing private installation. Application startup completed without SQLite/crash errors and the diagnostic route opened. -The first real 10-second HRS-filtered scan completed cleanly but found no -device advertising Heart Rate Service. Real armband identification, GATT HRS -confirmation and notification-field characterization therefore remain -`HARDWARE_VALIDATION_PENDING` and are not represented as PASS. +The first real 10-second HRS-filtered scan completed cleanly before the armband +was positively identified. A subsequent expanded scan identified the real +CYCPLUS H2 advertising Heart Rate Service. Trainlog connected through GATT, +discovered `0x180D`, `0x2A37` and Battery Service, enabled notifications and +received live BPM successfully. The observed payloads carried one raw RR +interval, no sensor-contact field and no energy-expended field. A 12-second +measurement window advanced from 43 to 56 notifications (13 notifications), +confirming an approximately 1 Hz emission cadence. This closes the real-sensor +hardware characterization gate without recording device-specific MAC identity +in project documentation. The complete Android JVM inventory after this tranche reports **266 tests: 261 passed, five skipped, zero failures/errors**, and `assembleDebug` succeeds.