From f2747b357bb0281d316fb4378797a7deff08bae9 Mon Sep 17 00:00:00 2001 From: fy59 Date: Wed, 23 Sep 2026 21:10:11 +0200 Subject: [PATCH] release: prepare v0.1.5 --- CHANGELOG.md | 6 ++--- README.md | 16 ++++++----- docs/current_state.md | 8 +++--- docs/releases/README.md | 1 + docs/releases/v0.1.5.md | 59 +++++++++++++++++++++++++++++++++++++++++ docs/roadmap.md | 55 +++++++++++++++----------------------- 6 files changed, 99 insertions(+), 46 deletions(-) create mode 100644 docs/releases/v0.1.5.md diff --git a/CHANGELOG.md b/CHANGELOG.md index ac6016a..4f60fa6 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,9 +1,9 @@ # Changelog -## Unreleased — 0.1.5 +## 0.1.5 — 2026-09-23 -- Completed the software-validated Sleep Tonight readiness delta without a - device-rollout or stable-release claim. Pre-bed medication now creates or +- Completed the Sleep Tonight readiness delta and its non-destructive private + vc47 rollout. Pre-bed medication now creates or reuses one durable pending 18:00-to-18:00 Sleep entry; Couché appends bedtime to that same stable identity, while Réveil/Levé remain unavailable before bedtime. Pending quick facts are publishable through a distinct marker and diff --git a/README.md b/README.md index 47535e6..38fc275 100644 --- a/README.md +++ b/README.md @@ -24,7 +24,7 @@ it never copies SQLite database files between devices. |---|---| | Android | Capture and quickly correct sets, repetitions, loads, durations, and continuous activities; reorder active and completed-session occurrences; capture feedback, J+1 follow-ups, body measurements, and AI proposals; trigger sync; show quick summaries. | | Desktop TUI | Administer, inspect, maintain, import/export, correct canonical history, and provide technical tools. | -| Local Web (0.1.5 development) | Display Dashboard, Programmes, Sessions, Exercises and factual Analyse workspaces. Analyse includes the Sleep Diary editor, 18:00-to-18:00 agenda and local vector PDF export. | +| Local Web (0.1.5) | Display Dashboard, Programmes, Sessions, Exercises and factual Analyse workspaces. Analyse includes the Sleep Diary editor, multi-night 18:00-to-18:00 agenda, factual heart-rate timelines and local vector PDF export. | No interface reconstructs business truth from SQLite tables. The local Web is a sibling adapter, not an extension of the TUI. On `main`, its loopback-only @@ -35,8 +35,12 @@ The top-level `/programmes` route is an operational daily calendar for active 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; software validation is complete; private-device visual review is the current implementation cursor. +synchronized Sleep Diary workspace are the stable v0.1.4 baseline. Stable +0.1.5 adds persistent CYCPLUS acquisition, the global `♥ BPM` indicator, +training exercise timestamps, structured 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. ## Releases @@ -53,8 +57,8 @@ Each published stable release provides: - SHA-256 checksums. Both mirrors publish the same Trainlog product version and release assets. The -latest stable version is **0.1.4** on Android and desktop; this is one shared -Trainlog version, not separate interface versions. Version 0.1.3 is the +latest stable version is **0.1.5** on Android and desktop; this is one shared +Trainlog version, not separate interface versions. Version 0.1.4 is the previous stable release. Trainlog presents French by default, with English selectable @@ -158,7 +162,7 @@ updates; generating a replacement key is not a normal release procedure. ### Linux runtime dependencies -The published v0.1.4 x86-64 desktop runtime is dynamically linked. Its tagged +The published v0.1.5 x86-64 desktop runtime is dynamically linked. Its tagged source directly requires compatible versions of: - glibc and the GCC support runtime; diff --git a/docs/current_state.md b/docs/current_state.md index 57540fc..159b9f8 100644 --- a/docs/current_state.md +++ b/docs/current_state.md @@ -116,7 +116,7 @@ parallel implementation of its rules. | Android SQLite | schema v32; v32 additively gives every Sleep medication intake a structured `quantity` (1..99), defaults historical rows to 1, and records a distinct quick-publication tip | | Mobile snapshot | V3 active; V1/V2 readable legacy inputs; explicit V4 codec staged, not selected by transport | | Desktop terminal backend | Notcurses only | -| Trainlog product version | `0.1.5` development, synchronized across Android and desktop; latest stable release: `v0.1.4` | +| Trainlog product version | `0.1.5` stable, synchronized across Android and desktop; latest stable release: `v0.1.5` | | Interface language | `TRAINLOG_I18N_V0_1_1=PASS`: French default; English selectable in Settings → Language on both surfaces | | AI history export | `TRAINLOG_AI_EXPORT_V1` active | | AI session proposals | `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING` | @@ -156,10 +156,10 @@ 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 | -| Sleep tonight readiness delta | Software validated: Meson 111/111, import checks 6/6, Android `testDebugUnitTest` plus `assembleDebug`, and Web 191/191 plus typecheck/build. It adds no device rollout evidence and authorizes no stable release. | -| 0.1.5 validation | `TRAINLOG_0_1_5_VALIDATION_V1=SOFTWARE_PASS / DEVICE_VISUAL_PASS`: native 111/111; Android 304 tests (299 pass + 5 historical skips) and debug APK build; Web 183/183 + typecheck/build baseline. Private vc46 preserves the live HR capture and samples across Training → Cardio, drives measured guidance, and renders Sommeil and Calibration cardio without mutation. No stable release is authorized by this status. | +| Sleep tonight readiness delta | `TRAINLOG_SLEEP_TONIGHT_CLOSEOUT_V1=PASS`: Meson 111/111, import checks 6/6, Android `testDebugUnitTest` plus `assembleDebug`, Web 191/191 plus typecheck/build, exact V2 quantity replay, private vc47 schema-v32 migration, fresh CYCPLUS BPM and non-mutating Android/Web visual review. | +| 0.1.5 validation | `TRAINLOG_0_1_5_VALIDATION_V1=PASS`: native 111/111; Android unit-test task and APK build; Web 191/191 plus typecheck/build; JSON/import, C-format and diff checks pass. Private vc47 preserves real data through schema v32, renders pre-bed medication quantity controls, reconnects the CYCPLUS and presents the multi-night Web Sleep agenda. | | Tomorrow session readiness | `TRAINLOG_TOMORROW_SESSION_CARDIO_READINESS_V1=PASS`: the private vc46 is clean on schema v31 with fresh CYCPLUS BPM and the next Program session is unambiguous; one combined regression proves two ordered occurrences loaded from the synchronized Program, Program provenance, factual timeline/HR ownership, finalization, full generation, desktop import, replay and correlated ACK | -| Current operational cursor | Sleep Tonight Readiness V2 is software-validated; private-device rollout and visual review remain separate authorization, and no stable 0.1.5 tag or release is authorized. | +| Current operational cursor | Stable v0.1.5 closes the cardio and Sleep Tonight cycle; subsequent development opens as 0.1.6 after the immutable release tag. | | 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/releases/README.md b/docs/releases/README.md index 45d4a04..6ff7539 100644 --- a/docs/releases/README.md +++ b/docs/releases/README.md @@ -6,6 +6,7 @@ than later development. GitHub and Forgejo publication must preserve the existing release, tag, status, and assets while keeping their note bodies equal to the corresponding source file. +- [Trainlog v0.1.5](v0.1.5.md) - [Trainlog v0.1.4](v0.1.4.md) - [Trainlog v0.1.3](v0.1.3.md) - [Trainlog v0.1.2](v0.1.2.md) diff --git a/docs/releases/v0.1.5.md b/docs/releases/v0.1.5.md new file mode 100644 index 0000000..2fc17f6 --- /dev/null +++ b/docs/releases/v0.1.5.md @@ -0,0 +1,59 @@ +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. diff --git a/docs/roadmap.md b/docs/roadmap.md index fb41b02..8e73d7a 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -30,14 +30,14 @@ estimates. ## Current baseline -Stable v0.1.4 is the release baseline for the v0.1.5 development cycle. -Desktop schema v29, Android schema v26, Notcurses, direct `Documents/Trainlog` +Stable v0.1.5 is the release baseline for the next development cycle. +Desktop schema v35, Android schema v32, Notcurses, direct `Documents/Trainlog` storage, mobile export V3, Training Knowledge V1, Body Zones V1, Training Feedback V1/V2, STATS V1, and Session Generator V1 are implemented. Session Generator V1 is hidden pending V2. AI session-draft exchange retains its explicit manual validation gate. APP_SHELL_V1 remains useful historical design evidence, but its September 2026 observations must be revalidated against the -v0.1.4 baseline rather than treated as a current implementation plan. +v0.1.5 baseline rather than treated as a current implementation plan. `TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`; its local-only CLI/HTTP infrastructure, embedded frontend shell and the frozen Dashboard data contract, frozen interactive grid, versioned layout persistence and factual @@ -46,8 +46,9 @@ visualizations and Sessions V1 are implemented. The top-level `/programmes` route is an operational daily active-Program calendar, while Sessions → Programmes remains the technical administration/import, list, detail, archive, and delete surface. Web Exercises V1, the factual -Dashboard/Analyse read-model foundation, and Sleep Diary V1 are included in -stable v0.1.4. +Dashboard/Analyse read-model foundation, Sleep Diary V1/V2, synchronized +factual heart-rate timelines, and the complete Cardio V1 +capture/calibration/guidance chain are included in stable v0.1.5. The corrective prepared-item projection, bounded phase-owned MTP outbox, Sessions presentation correction, local date preference and durable preparation withdrawal are implemented. The withdrawal uses the separate versioned @@ -56,29 +57,19 @@ mobile snapshot or `TRAINLOG_FORMAT_V1` contracts. ## Current cursor -Stable v0.1.4 closes the Analyse/Sleep Diary cycle and freezes the Bluetooth -Classic synchronization transport independently from future sensor work. - -The 0.1.5 cycle owns cardio end to end. Android alone discovers and reads the -heart-rate sensor, exposes the global ♥ BPM state, timestamps training -session/exercise boundaries, provides one-tap Sleep capture, and records the -new dedicated cardio session type. Cardio starts with a versioned Calibration -exercise and later drives phase guidance from fresh BPM. Desktop/Web consume -only synchronized recorded measurements and never connect directly to the -sensor. Heart-rate ingestion must not reuse or overload the frozen Trainlog -Bluetooth synchronization transport contract. +Stable v0.1.5 closes Cardio V1 and the Sleep Tonight readiness cycle. Android +alone discovers and reads the heart-rate sensor; desktop/Web consume only +synchronized factual measurements and never connect directly to the sensor. +The heart-rate path remains independent from the frozen Bluetooth Trainlog +synchronization transport. ```text -CURRENT_OPERATIONAL_CURSOR=Sleep Tonight Readiness V2 software validation complete; private-device rollout remains a separate decision. +CURRENT_OPERATIONAL_CURSOR=Stable v0.1.5 published; open 0.1.6 development without reopening frozen 0.1.5 contracts. ``` -The current development cursor is the validated Sleep Tonight readiness delta: -V1 stays frozen/readable while active capable peers require `sleep-diary-v2`. -The remaining operational work, if authorized separately, is a non-destructive -private-device rollout and visual review; it must not be represented as a -stable release or a medical/readiness claim. The Web’s relative HR rise/fall -overlays are descriptive measured-series presentation only, never inferred -sleep states or causes. +Sleep Diary V1 stays frozen/readable while active capable peers require +`sleep-diary-v2`. The Web’s relative HR rise/fall overlays remain descriptive +measured-series presentation only, never inferred sleep states or causes. The vc45 real-device smoke found that selecting Cardio after live capture had already started on the default Training draft left the durable capture tagged @@ -89,15 +80,13 @@ transition through an active exercise and guidance event. The vc46 re-smoke then passed with the same capture, preserved pre-transition samples, measured guidance, and non-mutating Sommeil/Calibration screen checks. -Tomorrow's next synchronized Program session is unambiguously -`S1 D — Haut du corps machines` on 2026-09-24 with seven occurrences. The -private phone remains on Android schema v31 with integrity/FK checks clean and -no active draft, timeline, HR capture, guidance phase or calibration. A single -combined regression now proves Program start and provenance through two -ordered occurrences originating in the synchronized Program payload, four HR -ownership positions, finalization, full generation, desktop import, idempotent -replay and correlated ACK. This readiness result does not authorize a stable -0.1.5 tag or release. +The private phone advanced non-destructively to Android schema v32 on vc47 with +integrity/FK checks clean and preserved business counts. The preceding +tomorrow-session readiness regression proves Program start and provenance +through two ordered occurrences originating in the synchronized Program +payload, four HR ownership positions, finalization, full generation, desktop +import, idempotent replay and correlated ACK. That readiness evidence is now +part of the stable v0.1.5 validation record rather than the active cursor. The focused `TRAINLOG_SYNC_CAUSAL_DELETE_V1_CLOSEOUT` is complete before this cursor: complete predecessor state, imported built-in authorization,