From f20e5c4d39f7745cb8ae01b235f34f48608e3c4d Mon Sep 17 00:00:00 2001 From: fy59 Date: Wed, 23 Sep 2026 21:19:33 +0200 Subject: [PATCH] chore: open 0.1.6 development --- CHANGELOG.md | 5 +++++ README.md | 4 +++- android/app/build.gradle.kts | 4 ++-- docs/current_state.md | 8 ++++---- docs/roadmap.md | 4 ++-- meson.build | 2 +- tests/test_sync_deployment_tools.py | 4 ++-- tools/package_sync_candidate.py | 2 +- tui/tests/test_web_server.c | 2 +- 9 files changed, 21 insertions(+), 14 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4f60fa6..d4fd89a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,10 @@ # Changelog +## Unreleased — 0.1.6 + +Development opened after the stable v0.1.5 release. No 0.1.6 feature tranche +is selected by this version-opening commit. + ## 0.1.5 — 2026-09-23 - Completed the Sleep Tonight readiness delta and its non-destructive private diff --git a/README.md b/README.md index 38fc275..60f4c06 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) | 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. | +| Local Web (0.1.6 development) | 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 @@ -41,6 +41,8 @@ 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. +Version 0.1.6 development is open without selecting a new feature tranche or +reopening the frozen 0.1.5 release contracts. ## Releases diff --git a/android/app/build.gradle.kts b/android/app/build.gradle.kts index 9437e5f..ffde25b 100644 --- a/android/app/build.gradle.kts +++ b/android/app/build.gradle.kts @@ -43,7 +43,7 @@ val trainlogVersionCode = providers.environmentVariable("TRAINLOG_ANDROID_VERSION_CODE").orNull?.let { raw -> raw.toIntOrNull()?.takeIf { it in 1..Int.MAX_VALUE } ?: throw GradleException("TRAINLOG_ANDROID_VERSION_CODE must be a positive integer") - } ?: 6 + } ?: 7 android { namespace = "com.labfytools.trainlog" @@ -55,7 +55,7 @@ android { targetSdk = 36 versionCode = trainlogVersionCode - versionName = "0.1.5" + versionName = "0.1.6" testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" } diff --git a/docs/current_state.md b/docs/current_state.md index 159b9f8..188bc06 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` stable, synchronized across Android and desktop; latest stable release: `v0.1.5` | +| Trainlog product version | `0.1.6` development, 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` | @@ -159,7 +159,7 @@ 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 | Stable v0.1.5 closes the cardio and Sleep Tonight cycle; subsequent development opens as 0.1.6 after the immutable release tag. | +| Current operational cursor | 0.1.6 development is open after immutable stable v0.1.5; no new feature tranche is selected by the version-opening commit. | | 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` | @@ -425,8 +425,8 @@ 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.4 tag uses `versionName=0.1.4` and public versionCode 5. -The v0.1.5 development source starts at `versionName=0.1.5` and versionCode 6. +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. 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. diff --git a/docs/roadmap.md b/docs/roadmap.md index 8e73d7a..5e507a9 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -30,7 +30,7 @@ estimates. ## Current baseline -Stable v0.1.5 is the release baseline for the next development cycle. +Stable v0.1.5 is the release baseline for the v0.1.6 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 @@ -64,7 +64,7 @@ The heart-rate path remains independent from the frozen Bluetooth Trainlog synchronization transport. ```text -CURRENT_OPERATIONAL_CURSOR=Stable v0.1.5 published; open 0.1.6 development without reopening frozen 0.1.5 contracts. +CURRENT_OPERATIONAL_CURSOR=0.1.6 development open; next feature tranche not selected. ``` Sleep Diary V1 stays frozen/readable while active capable peers require diff --git a/meson.build b/meson.build index d2fb8f3..5bea99e 100644 --- a/meson.build +++ b/meson.build @@ -1,7 +1,7 @@ project( 'trainlog', 'c', - version: '0.1.5', + version: '0.1.6', meson_version: '>=1.3.0', default_options: [ 'c_std=c17', diff --git a/tests/test_sync_deployment_tools.py b/tests/test_sync_deployment_tools.py index 136dd87..e971a9c 100644 --- a/tests/test_sync_deployment_tools.py +++ b/tests/test_sync_deployment_tools.py @@ -65,7 +65,7 @@ class DeploymentToolsTest(unittest.TestCase): ) self.assertEqual(result.returncode, 0, result.stderr) inventory = json.loads((output / "candidate-inventory.json").read_text()) - self.assertEqual(inventory["product_version"], "0.1.5") + self.assertEqual(inventory["product_version"], "0.1.6") self.assertEqual(inventory["desktop_schema"], 35) self.assertEqual(inventory["android_schema"], 32) self.assertIn("session-preparations-v2", inventory["protocols"]) @@ -102,7 +102,7 @@ class DeploymentToolsTest(unittest.TestCase): text=True, ) self.assertEqual(linked.returncode, 0, linked.stderr) - self.assertIn("trainlog 0.1.5", linked.stdout) + self.assertIn("trainlog 0.1.6", linked.stdout) imported = subprocess.run( [ "python3", diff --git a/tools/package_sync_candidate.py b/tools/package_sync_candidate.py index 205290e..cbbfce2 100644 --- a/tools/package_sync_candidate.py +++ b/tools/package_sync_candidate.py @@ -118,7 +118,7 @@ def main() -> int: "source_commit": subprocess.check_output( ["git", "rev-parse", "HEAD"], cwd=ROOT, text=True ).strip(), - "product_version": "0.1.5", + "product_version": "0.1.6", "desktop_schema": 35, "android_schema": 32, "protocols": [ diff --git a/tui/tests/test_web_server.c b/tui/tests/test_web_server.c index 4dcf582..39048a3 100644 --- a/tui/tests/test_web_server.c +++ b/tui/tests/test_web_server.c @@ -308,7 +308,7 @@ static bool test_http_contract(TrainlogDatabase *database) { CHECK(strstr(response, "Access-Control-Allow-Origin") == NULL); CHECK(strstr(response, "{\"api_version\":1,\"status\":\"ok\",\"product\":\"trainlog\"," - "\"version\":\"0.1.5\"}") != NULL); + "\"version\":\"0.1.6\"}") != NULL); { char token[80]; CHECK(exchange(port,