chore: start 0.1.3 development
This commit is contained in:
parent
fdf4301502
commit
5701e2a541
9 changed files with 24 additions and 19 deletions
|
|
@ -1,5 +1,9 @@
|
||||||
# Changelog
|
# Changelog
|
||||||
|
|
||||||
|
## Unreleased — 0.1.3
|
||||||
|
|
||||||
|
Development opened after the stable v0.1.2 release.
|
||||||
|
|
||||||
## 0.1.2 — 2026-09-20
|
## 0.1.2 — 2026-09-20
|
||||||
|
|
||||||
- Added USB-priority full-generation synchronization with a separately
|
- Added USB-priority full-generation synchronization with a separately
|
||||||
|
|
|
||||||
|
|
@ -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. |
|
| 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.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
|
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
|
||||||
|
|
@ -50,9 +50,9 @@ Each published stable release provides:
|
||||||
- SHA-256 checksums.
|
- SHA-256 checksums.
|
||||||
|
|
||||||
Both mirrors publish the same Trainlog product version and release assets. The
|
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
|
current development version is **0.1.3** on Android and desktop; this is one
|
||||||
Trainlog version, not separate interface versions. Version 0.1.1 is the
|
shared Trainlog version, not separate interface versions. Version 0.1.2 is the
|
||||||
previous stable release.
|
latest stable release.
|
||||||
|
|
||||||
Trainlog presents French by default, with English selectable
|
Trainlog presents French by default, with English selectable
|
||||||
from **Settings → Language** on Android and the desktop TUI. The selection is
|
from **Settings → Language** on Android and the desktop TUI. The selection is
|
||||||
|
|
|
||||||
|
|
@ -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")
|
||||||
} ?: 3
|
} ?: 4
|
||||||
|
|
||||||
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.2"
|
versionName = "0.1.3"
|
||||||
testInstrumentationRunner =
|
testInstrumentationRunner =
|
||||||
"androidx.test.runner.AndroidJUnitRunner"
|
"androidx.test.runner.AndroidJUnitRunner"
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ parallel implementation of its rules.
|
||||||
| Android SQLite | schema v25 |
|
| Android SQLite | schema v25 |
|
||||||
| 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.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 |
|
| 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` |
|
||||||
|
|
|
||||||
|
|
@ -28,10 +28,11 @@ distinction between measured values and estimates.
|
||||||
|
|
||||||
## Current baseline
|
## Current baseline
|
||||||
|
|
||||||
Stable v0.1.2 is the release baseline. Desktop schema v28, Android schema v25, Notcurses, direct
|
Stable v0.1.2 is the release baseline for the v0.1.3 development cycle.
|
||||||
`Documents/Trainlog` storage, mobile export V3, Training Knowledge V1, Body
|
Desktop schema v28, Android schema v25, Notcurses, direct `Documents/Trainlog`
|
||||||
Zones V1, Training Feedback V1/V2, STATS V1, and Session Generator V1 are
|
storage, mobile export V3, Training Knowledge V1, Body Zones V1, Training
|
||||||
implemented. Session Generator V1 is hidden pending V2. AI session-draft
|
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.
|
exchange and APP_SHELL_V1 retain their explicit manual validation/review gates.
|
||||||
`TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`; its local-only
|
`TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`; its local-only
|
||||||
CLI/HTTP infrastructure, embedded frontend shell and the frozen Dashboard data
|
CLI/HTTP infrastructure, embedded frontend shell and the frozen Dashboard data
|
||||||
|
|
@ -50,9 +51,9 @@ mobile snapshot or `TRAINLOG_FORMAT_V1` contracts.
|
||||||
|
|
||||||
## Current cursor
|
## Current cursor
|
||||||
|
|
||||||
The stable v0.1.2 baseline is closed; future work proceeds from its validated
|
The v0.1.3 development cursor proceeds from the closed stable v0.1.2 baseline
|
||||||
Web, Program execution, USB/Drive generation, ACK, and causal-deletion
|
and its validated Web, Program execution, USB/Drive generation, ACK, and
|
||||||
contracts without reopening those completed gates.
|
causal-deletion contracts without reopening those completed gates.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
CURRENT_OPERATIONAL_CURSOR=TRAINLOG_WEB_V1_NEXT_CONTRACT
|
CURRENT_OPERATIONAL_CURSOR=TRAINLOG_WEB_V1_NEXT_CONTRACT
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
project(
|
project(
|
||||||
'trainlog',
|
'trainlog',
|
||||||
'c',
|
'c',
|
||||||
version: '0.1.2',
|
version: '0.1.3',
|
||||||
meson_version: '>=1.3.0',
|
meson_version: '>=1.3.0',
|
||||||
default_options: [
|
default_options: [
|
||||||
'c_std=c17',
|
'c_std=c17',
|
||||||
|
|
|
||||||
|
|
@ -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.2")
|
self.assertEqual(inventory["product_version"], "0.1.3")
|
||||||
self.assertEqual(inventory["desktop_schema"], 28)
|
self.assertEqual(inventory["desktop_schema"], 28)
|
||||||
self.assertEqual(inventory["android_schema"], 25)
|
self.assertEqual(inventory["android_schema"], 25)
|
||||||
self.assertIn("session-preparations-v2", inventory["protocols"])
|
self.assertIn("session-preparations-v2", inventory["protocols"])
|
||||||
|
|
@ -84,7 +84,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.2", linked.stdout)
|
self.assertIn("trainlog 0.1.3", linked.stdout)
|
||||||
imported = subprocess.run(
|
imported = subprocess.run(
|
||||||
[
|
[
|
||||||
"python3",
|
"python3",
|
||||||
|
|
|
||||||
|
|
@ -103,7 +103,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.2",
|
"product_version": "0.1.3",
|
||||||
"desktop_schema": 28,
|
"desktop_schema": 28,
|
||||||
"android_schema": 25,
|
"android_schema": 25,
|
||||||
"protocols": [
|
"protocols": [
|
||||||
|
|
|
||||||
|
|
@ -308,7 +308,7 @@ static bool test_http_contract(TrainlogDatabase *database) {
|
||||||
CHECK(strstr(response, "Access-Control-Allow-Origin") == NULL);
|
CHECK(strstr(response, "Access-Control-Allow-Origin") == NULL);
|
||||||
CHECK(strstr(response,
|
CHECK(strstr(response,
|
||||||
"{\"api_version\":1,\"status\":\"ok\",\"product\":\"trainlog\","
|
"{\"api_version\":1,\"status\":\"ok\",\"product\":\"trainlog\","
|
||||||
"\"version\":\"0.1.2\"}") != NULL);
|
"\"version\":\"0.1.3\"}") != NULL);
|
||||||
{
|
{
|
||||||
char token[80];
|
char token[80];
|
||||||
CHECK(exchange(port,
|
CHECK(exchange(port,
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue