chore: start 0.1.3 development

This commit is contained in:
fy59 2026-09-20 08:26:43 +02:00
parent fdf4301502
commit 5701e2a541
9 changed files with 24 additions and 19 deletions

View file

@ -1,5 +1,9 @@
# Changelog
## Unreleased — 0.1.3
Development opened after the stable v0.1.2 release.
## 0.1.2 — 2026-09-20
- Added USB-priority full-generation synchronization with a separately

View file

@ -24,7 +24,7 @@ over direct MTP; 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.2) | Display the Dashboard, the operational top-level Programmes daily active-program calendar, and the implemented Sessions inventory, deletion, manual preparation, Android-delivery, and Programs administration workflow through typed Trainlog Core/API boundaries. Programs has responsive detail, terminal logical deletion, and a privately deployed read-only Android projection. Analyse and Exercises remain placeholders. |
| Local Web (0.1.3 development) | Display the Dashboard, the operational top-level Programmes daily active-program calendar, and the implemented Sessions inventory, deletion, manual preparation, Android-delivery, and Programs administration workflow through typed Trainlog Core/API boundaries. Programs has responsive detail, terminal logical deletion, and a privately deployed read-only Android projection. Analyse and Exercises remain placeholders. |
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
@ -50,9 +50,9 @@ 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.2** on Android and desktop; this is one shared
Trainlog version, not separate interface versions. Version 0.1.1 is the
previous stable release.
current development version is **0.1.3** on Android and desktop; this is one
shared Trainlog version, not separate interface versions. Version 0.1.2 is the
latest stable release.
Trainlog presents French by default, with English selectable
from **Settings → Language** on Android and the desktop TUI. The selection is

View file

@ -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")
} ?: 3
} ?: 4
android {
namespace = "com.labfytools.trainlog"
@ -55,7 +55,7 @@ android {
targetSdk = 36
versionCode = trainlogVersionCode
versionName = "0.1.2"
versionName = "0.1.3"
testInstrumentationRunner =
"androidx.test.runner.AndroidJUnitRunner"
}

View file

@ -76,7 +76,7 @@ parallel implementation of its rules.
| Android SQLite | schema v25 |
| 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.2`, synchronized across Android and desktop; latest stable release: `v0.1.2` (`v0.1.1` is the previous stable release) |
| Trainlog product version | `0.1.3` development, synchronized across Android and desktop; latest stable release: `v0.1.2` |
| 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` |

View file

@ -28,10 +28,11 @@ distinction between measured values and estimates.
## Current baseline
Stable v0.1.2 is the release baseline. Desktop schema v28, Android schema v25, 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
Stable v0.1.2 is the release baseline for the v0.1.3 development cycle.
Desktop schema v28, Android schema v25, 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 and APP_SHELL_V1 retain their explicit manual validation/review gates.
`TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`; its local-only
CLI/HTTP infrastructure, embedded frontend shell and the frozen Dashboard data
@ -50,9 +51,9 @@ mobile snapshot or `TRAINLOG_FORMAT_V1` contracts.
## Current cursor
The stable v0.1.2 baseline is closed; future work proceeds from its validated
Web, Program execution, USB/Drive generation, ACK, and causal-deletion
contracts without reopening those completed gates.
The v0.1.3 development cursor proceeds from the closed stable v0.1.2 baseline
and its validated Web, Program execution, USB/Drive generation, ACK, and
causal-deletion contracts without reopening those completed gates.
```text
CURRENT_OPERATIONAL_CURSOR=TRAINLOG_WEB_V1_NEXT_CONTRACT

View file

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

View file

@ -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.2")
self.assertEqual(inventory["product_version"], "0.1.3")
self.assertEqual(inventory["desktop_schema"], 28)
self.assertEqual(inventory["android_schema"], 25)
self.assertIn("session-preparations-v2", inventory["protocols"])
@ -84,7 +84,7 @@ class DeploymentToolsTest(unittest.TestCase):
text=True,
)
self.assertEqual(linked.returncode, 0, linked.stderr)
self.assertIn("trainlog 0.1.2", linked.stdout)
self.assertIn("trainlog 0.1.3", linked.stdout)
imported = subprocess.run(
[
"python3",

View file

@ -103,7 +103,7 @@ def main() -> int:
"source_commit": subprocess.check_output(
["git", "rev-parse", "HEAD"], cwd=ROOT, text=True
).strip(),
"product_version": "0.1.2",
"product_version": "0.1.3",
"desktop_schema": 28,
"android_schema": 25,
"protocols": [

View file

@ -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.2\"}") != NULL);
"\"version\":\"0.1.3\"}") != NULL);
{
char token[80];
CHECK(exchange(port,