release: prepare v0.1.5

This commit is contained in:
fy59 2026-09-23 21:10:11 +02:00
parent f2fd610b4f
commit f2747b357b
6 changed files with 99 additions and 46 deletions

View file

@ -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

View file

@ -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;

View file

@ -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` |

View file

@ -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)

59
docs/releases/v0.1.5.md Normal file
View file

@ -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.

View file

@ -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,