release: prepare v0.1.6

This commit is contained in:
fy59 2026-09-25 04:57:10 +02:00
parent bb20aa44ef
commit 7d214102e3
7 changed files with 89 additions and 21 deletions

View file

@ -1,6 +1,6 @@
# Changelog
## Unreleased — 0.1.6
## 0.1.6 — 2026-09-25
- Corrected delayed session finalization so a heart-rate capture cannot extend
beyond the explicit factual session end. Android now transactionally removes

View file

@ -17,8 +17,8 @@ exchanges, and user-controlled storage. Plans never become performed work until
they are actually recorded, continuous activities are not disguised as sets,
and estimates are kept distinct from measurements.
> **Release line:** Trainlog `0.1.6` is in development. The latest stable
> release is [`v0.1.5`](https://github.com/labfytools/trainlog/releases/tag/v0.1.5).
> **Release line:** The latest stable release is
> [`v0.1.6`](https://github.com/labfytools/trainlog/releases/tag/v0.1.6).
## ✦ Showcase
@ -26,7 +26,7 @@ and estimates are kept distinct from measurements.
<img src="docs/reviews/evidence/sleep-diary-alignment-firefox.png" alt="Trainlog Web Analyse workspace showing the Sleep Diary agenda and factual heart-rate timeline" width="100%">
</p>
<p align="center"><sub>Web Analyse in the 0.1.6 development line — synchronized Sleep facts and measured heart-rate data on one timeline.</sub></p>
<p align="center"><sub>Web Analyse in Trainlog 0.1.6 — synchronized Sleep facts and measured heart-rate data on one timeline.</sub></p>
The repository currently tracks real-browser evidence for the Web interface.
Its Android overview asset is a clearly labelled static design study with
@ -231,7 +231,7 @@ chronological detail in the [`CHANGELOG`](CHANGELOG.md).
| Boundary | Current state |
| ------------------- | --------------------------------------------------------------------------------------------------------- |
| Product | `0.1.6` development; latest stable release `v0.1.5` |
| Product | `0.1.6` stable |
| Desktop persistence | SQLite schema v36 |
| Android persistence | SQLite schema v33 |
| Mobile exchange | V3 active; V1/V2 readable; V4 staged only |

View file

@ -14,7 +14,7 @@ ANDROID_BODY_SHELL=IMPLEMENTED
LOCAL_PERSISTENCE=IMPLEMENTED
DIRECT_STORAGE=IMPLEMENTED
MTP_SYNC=IMPLEMENTED
ANDROID_SCHEMA=17
ANDROID_SCHEMA=33
```
## Visual contract

View file

@ -81,8 +81,8 @@ is idempotent and no transport carries SQLite. The Bluetooth transport does not
yet ingest heart-rate sensor data.
The public Android release chain advances from v0.1.1 versionCode 2 through
v0.1.2 versionCode 3 and v0.1.3 versionCode 4 to v0.1.4 versionCode 5 under
certificate SHA-256
v0.1.2 versionCode 3, v0.1.3 versionCode 4, v0.1.4 versionCode 5 and v0.1.5
versionCode 6 to v0.1.6 versionCode 7 under certificate SHA-256
`5ef41117da107c9805ae3215c5ec823cff06216610e6e4f7542a754161c71bd2`.
Higher-numbered private validation builds used a separate Android Debug
certificate and are not members of the public update-signature chain.
@ -97,7 +97,7 @@ The rollout packager now keeps the legacy request daemon and one-shot helper in
the same relocatable, hashed bundle as the Web generation coordinator, avoiding
mixed-checkout user-service execution during the controlled rollout.
Snapshot date: **2026-09-24**.
Snapshot date: **2026-09-25**.
`TRAINLOG_CODE_READABILITY_V1` normalizes the recent generation-MTP,
generation/ACK, Android-backup, Web Dashboard serialization, tests, doubles and
@ -132,7 +132,7 @@ parallel implementation of its rules.
| Android SQLite | schema v33; v33 makes Sleep revision payload tables append-only; v32 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.6` development, synchronized across Android and desktop; latest stable release: `v0.1.5` |
| Trainlog product version | `0.1.6` stable, synchronized across Android and desktop; latest stable release: `v0.1.6` |
| 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` |
@ -176,7 +176,8 @@ parallel implementation of its rules.
| 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 | 0.1.6 Sleep graph overlays, shared agenda estimate and denser responsive agenda axis validated and privately served from Web code commit `a60e1aa`; immutable stable v0.1.5 remains unchanged. |
| 0.1.6 validation | `TRAINLOG_0_1_6_VALIDATION_V1=PASS`: native Meson 114/114 and Clang ASan/UBSan 114/114; Android 317 tests (312 passed, five documented optional skips), debug APK and signed release APK; Web 32 files / 209 tests plus typecheck/build; JSON/import, changed-C formatting and diff checks pass. |
| Current operational cursor | Stable v0.1.6 closes the Web refinement, Sleep timeline, synchronization recovery and factual session-finalization cycle; subsequent stabilization opens as 0.1.7 after the immutable release tag. |
| Sleep awake/selection/PDF refinement | `TRAINLOG_SLEEP_AWAKE_SELECTION_PDF_V1=PASS`: one temporal projection drives agenda and selected HR detail; a separate inclusive night-start date range drives preview/export from the loaded period. The agenda axis and rows share 24 exact hour columns; estimated sleep duration is consistent and remains non-persistent. |
| Sleep Réveil interval policy | Android Réveil creates a revisioned 30-minute `long_awake` window; repeated taps extend it and Levé clamps it. The real 2026-09-23 night is causally repaired on Android/desktop and renders two orange intervals in agenda, HR and PDF; Android 307 passed plus five optional skips, and Web 208/208 passed. |
| Sleep revision collision recovery | `TRAINLOG_SLEEP_REVISION_COLLISION_RECOVERY_V1=PASS`: one unpublished divergent desktop tip was re-identified without payload loss, the immutable Android identity was restored exactly, and a fresh successor retained the non-conflicting union. The original generation was consumed with a full SQLite ACK; the real 24/09 session, Sleep facts, cardio samples, timeline, feedback, and Program provenance are visible on Desktop/Web. Schema v36/v33 and importer payload checks prevent recurrence. |
@ -512,8 +513,7 @@ The full Android lint comparison against an isolated clean `main` worktree is
unchanged at ten pre-existing errors: one `NewApi`, one
`LocalContextConfigurationRead`, and eight bilingual `StringFormatMatches`
diagnostics. This UI tranche adds no lint error and changes no lint policy.
The stable Android v0.1.5 tag uses `versionName=0.1.5` and public versionCode 6.
The v0.1.6 development source starts at `versionName=0.1.6` and versionCode 7.
The stable Android v0.1.6 tag uses `versionName=0.1.6` and public versionCode 7.
Private validation builds may still supply only a strictly increasing
`versionCode` as a build-time override; that does not create a public release
or change schemas and protocols.

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.6](v0.1.6.md)
- [Trainlog v0.1.5](v0.1.5.md)
- [Trainlog v0.1.4](v0.1.4.md)
- [Trainlog v0.1.3](v0.1.3.md)

64
docs/releases/v0.1.6.md Normal file
View file

@ -0,0 +1,64 @@
Trainlog v0.1.6 closes the Web refinement and synchronization-recovery cycle.
It improves factual Sleep and training presentation, preserves immutable
history through difficult replay and recovery cases, and gives the repository
a durable Catppuccin-based project entry point without widening frozen product
contracts.
## Local Web refinement
- Dashboard activity uses calendar months and ISO weeks, progression is a
factual global synthesis, and Analyse drills from BODY ZONES to exercises and
measured detail without inventing missing exercise time.
- A persistent French/English preference, Settings route, denser shared
surfaces, responsive charts, and a shared BODY ZONES figure refine the local
interface while presentation state remains outside business SQLite.
- Equipment administration can transactionally merge a custom duplicate into
a canonical identity while preserving history, MAX context, preparations,
Programs, and causal deletion evidence.
## Sleep facts and heart-rate timelines
- The multi-night agenda, selected-night heart-rate detail, and vector PDF use
one temporal projection of factual sleep intervals, awakenings, point events,
medication occurrences, and exact bounds.
- The shared 18:00-to-18:00 agenda keeps exact hourly geometry at desktop and
narrow widths. A clearly labelled fallback estimate is presentation-only,
non-medical, and never written to Sleep data.
- Android wake capture records revisioned long-awake intervals, medication
quantity survives persistence and synchronization, and Sleep revision
payloads are append-only on both platforms.
## Synchronization and recovery
- Bluetooth restart recovery retains immutable generation identity and accepts
the exact original generation/digest acknowledgement across conversation
runs; direct MTP remains the wired recovery transport.
- Android foreground and automatic synchronization share one ownership arbiter,
and direct-MTP publication waits for MediaProvider visibility before exposing
a mutable generation reference.
- Divergent Sleep revision identities can be recovered without choosing an
arbitrary winner. Strict payload checks reject reuse of a historical revision
identity with different parentage or content.
- A separate heart-rate correction companion removes samples strictly after a
factual session end and prevents an older immutable generation from
resurrecting the removed tail.
## Compatibility and validation
- Desktop schema v36 and Android schema v33 are additive migrations.
- `TRAINLOG_FORMAT_V1`, mobile export V3, stable identities, generation/ACK
semantics, and Bluetooth/MTP transport ownership remain unchanged.
- The default automatic exchange remains V3; full-generation synchronization
remains behind its trusted local opt-in.
- Native Meson and Clang ASan/UBSan suites each pass 114/114. Android passes
317 tests (312 passed and five documented optional skips), debug assembly,
signed release assembly, and signature verification. Web passes 32 files / 209
tests plus typecheck/build; JSON/import validation, changed-C formatting, and
diff checks also pass at the release tag.
## Assets
- `trainlog-android-v0.1.6.apk`: signed public Android APK.
- `trainlog-tui-linux-x86_64-v0.1.6`: 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.5 is the release baseline for the v0.1.6 development cycle.
Stable v0.1.6 is the release baseline for the next stabilization cycle.
Desktop schema v36, Android schema v33, 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.5 baseline rather than treated as a current implementation plan.
v0.1.6 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
@ -48,7 +48,8 @@ Sessions → Programmes remains the technical administration/import, list,
detail, archive, and delete surface. Web Exercises V1, the factual
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.
capture/calibration/guidance chain and the 0.1.6 refinement/recovery work are
included in stable v0.1.6.
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
@ -57,23 +58,25 @@ mobile snapshot or `TRAINLOG_FORMAT_V1` contracts.
## Current cursor
Stable v0.1.5 closes Cardio V1 and the Sleep Tonight readiness cycle. Android
Stable v0.1.6 closes the Web refinement, Sleep timeline, synchronization
recovery, and factual session-finalization 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.
The 0.1.6 Web refinement now also projects factual Sleep intervals, every
The stable 0.1.6 Web refinement projects factual Sleep intervals, every
structured awakening, point events, medication intakes, bounds, and duration
through the agenda, selected-night HR detail, and selected-night PDF. Its
explicitly labeled fallback estimate is presentation-only, subtracts overlapping
structured awakenings for displayed duration, and is shared by all three views;
the agenda retains an exact hourly 18:00-to-18:00 geometry. Android lifecycle/ACK regressions now explicitly guard
pre-bed medication snapshots against restart, replay and stale ancestry.
Release work remains the next separate operational step.
pre-bed medication snapshots against restart, replay and stale ancestry. The
release closes this implementation cycle without reopening its frozen
contracts.
```text
CURRENT_OPERATIONAL_CURSOR=0.1.6 Sleep agenda/HR/PDF projection, active-night selection and Android medication persistence proof validated and privately deployed; stable release work remains separate.
CURRENT_OPERATIONAL_CURSOR=Stable v0.1.6 published; open 0.1.7 stabilization after the immutable release tag.
```
Sleep Diary V1 stays frozen/readable while active capable peers require