chore: open 0.1.5 development

This commit is contained in:
fy59 2026-09-22 18:45:49 +02:00
parent 5d58071601
commit e1d6372338
8 changed files with 21 additions and 15 deletions

View file

@ -1,5 +1,9 @@
# Changelog # Changelog
## Unreleased — 0.1.5
Development opened after stable v0.1.4 release.
## 0.1.4 — 2026-09-22 ## 0.1.4 — 2026-09-22
- Added the frozen Bluetooth Classic RFCOMM synchronization transport without - Added the frozen Bluetooth Classic RFCOMM synchronization transport without

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. | | 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. | | Desktop TUI | Administer, inspect, maintain, import/export, correct canonical history, and provide technical tools. |
| Local Web (0.1.4) | 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 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. |
No interface reconstructs business truth from SQLite tables. The local Web is 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 a sibling adapter, not an extension of the TUI. On `main`, its loopback-only
@ -34,8 +34,9 @@ make the remaining placeholder routes functional.
The top-level `/programmes` route is an operational daily calendar for active The top-level `/programmes` route is an operational daily calendar for active
Programs. Sessions → Programmes remains the technical administration/import, Programs. Sessions → Programmes remains the technical administration/import,
list, detail, archive, and delete surface. list, detail, archive, and delete surface.
Web Exercises administration is implemented. Version 0.1.4 also includes the Web Exercises administration, the factual Dashboard/Analyse read model, and the
factual Dashboard/Analyse read model and the synchronized Sleep Diary workspace. synchronized Sleep Diary workspace are the stable v0.1.4 baseline. Version
0.1.5 development is focused on cardio and heart-rate sensor capture.
## Releases ## Releases

View file

@ -43,7 +43,7 @@ val trainlogVersionCode =
providers.environmentVariable("TRAINLOG_ANDROID_VERSION_CODE").orNull?.let { raw -> providers.environmentVariable("TRAINLOG_ANDROID_VERSION_CODE").orNull?.let { raw ->
raw.toIntOrNull()?.takeIf { it in 1..Int.MAX_VALUE } raw.toIntOrNull()?.takeIf { it in 1..Int.MAX_VALUE }
?: throw GradleException("TRAINLOG_ANDROID_VERSION_CODE must be a positive integer") ?: throw GradleException("TRAINLOG_ANDROID_VERSION_CODE must be a positive integer")
} ?: 5 } ?: 6
android { android {
namespace = "com.labfytools.trainlog" namespace = "com.labfytools.trainlog"
@ -55,7 +55,7 @@ android {
targetSdk = 36 targetSdk = 36
versionCode = trainlogVersionCode versionCode = trainlogVersionCode
versionName = "0.1.4" versionName = "0.1.5"
testInstrumentationRunner = testInstrumentationRunner =
"androidx.test.runner.AndroidJUnitRunner" "androidx.test.runner.AndroidJUnitRunner"
} }

View file

@ -116,7 +116,7 @@ parallel implementation of its rules.
| Android SQLite | schema v26; Sleep Diary V1 is additive in v26 | | Android SQLite | schema v26; Sleep Diary V1 is additive in v26 |
| Mobile snapshot | V3 active; V1/V2 readable legacy inputs; explicit V4 codec staged, not selected by transport | | Mobile snapshot | V3 active; V1/V2 readable legacy inputs; explicit V4 codec staged, not selected by transport |
| Desktop terminal backend | Notcurses only | | Desktop terminal backend | Notcurses only |
| Trainlog product version | `0.1.4` stable, synchronized across Android and desktop; latest stable release: `v0.1.4` | | Trainlog product version | `0.1.5` development, synchronized across Android and desktop; latest stable release: `v0.1.4` |
| Interface language | `TRAINLOG_I18N_V0_1_1=PASS`: French default; English selectable in Settings → Language on both surfaces | | 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 history export | `TRAINLOG_AI_EXPORT_V1` active |
| AI session proposals | `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING` | | AI session proposals | `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING` |
@ -405,10 +405,11 @@ The full Android lint comparison against an isolated clean `main` worktree is
unchanged at ten pre-existing errors: one `NewApi`, one unchanged at ten pre-existing errors: one `NewApi`, one
`LocalContextConfigurationRead`, and eight bilingual `StringFormatMatches` `LocalContextConfigurationRead`, and eight bilingual `StringFormatMatches`
diagnostics. This UI tranche adds no lint error and changes no lint policy. diagnostics. This UI tranche adds no lint error and changes no lint policy.
The stable Android 0.1.4 source uses `versionName=0.1.4` and public The stable Android v0.1.4 tag uses `versionName=0.1.4` and public versionCode 5.
versionCode 5. Private validation builds may still supply only a strictly The v0.1.5 development source starts at `versionName=0.1.5` and versionCode 6.
increasing `versionCode` as a build-time override; that does not create a Private validation builds may still supply only a strictly increasing
public release or change schemas and protocols. `versionCode` as a build-time override; that does not create a public release
or change schemas and protocols.
The private Program execution rollout installed desktop schema v27 and the The private Program execution rollout installed desktop schema v27 and the
signed nondebuggable Android versionCode 17/schema v25 update without signed nondebuggable Android versionCode 17/schema v25 update without

View file

@ -30,7 +30,7 @@ estimates.
## Current baseline ## Current baseline
Stable v0.1.4 is the release baseline for subsequent development. 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` Desktop schema v29, Android schema v26, Notcurses, direct `Documents/Trainlog`
storage, mobile export V3, Training Knowledge V1, Body Zones V1, Training storage, mobile export V3, Training Knowledge V1, Body Zones V1, Training
Feedback V1/V2, STATS V1, and Session Generator V1 are implemented. Session Feedback V1/V2, STATS V1, and Session Generator V1 are implemented. Session

View file

@ -1,7 +1,7 @@
project( project(
'trainlog', 'trainlog',
'c', 'c',
version: '0.1.4', version: '0.1.5',
meson_version: '>=1.3.0', meson_version: '>=1.3.0',
default_options: [ default_options: [
'c_std=c17', 'c_std=c17',

View file

@ -65,7 +65,7 @@ class DeploymentToolsTest(unittest.TestCase):
) )
self.assertEqual(result.returncode, 0, result.stderr) self.assertEqual(result.returncode, 0, result.stderr)
inventory = json.loads((output / "candidate-inventory.json").read_text()) inventory = json.loads((output / "candidate-inventory.json").read_text())
self.assertEqual(inventory["product_version"], "0.1.4") self.assertEqual(inventory["product_version"], "0.1.5")
self.assertEqual(inventory["desktop_schema"], 29) self.assertEqual(inventory["desktop_schema"], 29)
self.assertEqual(inventory["android_schema"], 26) self.assertEqual(inventory["android_schema"], 26)
self.assertIn("session-preparations-v2", inventory["protocols"]) self.assertIn("session-preparations-v2", inventory["protocols"])
@ -96,7 +96,7 @@ class DeploymentToolsTest(unittest.TestCase):
text=True, text=True,
) )
self.assertEqual(linked.returncode, 0, linked.stderr) self.assertEqual(linked.returncode, 0, linked.stderr)
self.assertIn("trainlog 0.1.4", linked.stdout) self.assertIn("trainlog 0.1.5", linked.stdout)
imported = subprocess.run( imported = subprocess.run(
[ [
"python3", "python3",

View file

@ -113,7 +113,7 @@ def main() -> int:
"source_commit": subprocess.check_output( "source_commit": subprocess.check_output(
["git", "rev-parse", "HEAD"], cwd=ROOT, text=True ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True
).strip(), ).strip(),
"product_version": "0.1.4", "product_version": "0.1.5",
"desktop_schema": 29, "desktop_schema": 29,
"android_schema": 26, "android_schema": 26,
"protocols": [ "protocols": [