docs: reconcile current state and v0.1.1 notes
This commit is contained in:
parent
14b863eb0f
commit
9b2da4e9e8
11 changed files with 172 additions and 52 deletions
34
AGENTS.md
34
AGENTS.md
|
|
@ -6,9 +6,11 @@ Trainlog consists of:
|
||||||
|
|
||||||
- a native Android application for fast workout and body-data capture;
|
- a native Android application for fast workout and body-data capture;
|
||||||
- a Unix/Linux C17 terminal TUI for durable history, correction, analysis,
|
- a Unix/Linux C17 terminal TUI for durable history, correction, analysis,
|
||||||
visualization, and manual synchronization. The current authorized
|
visualization, and manual synchronization, using Notcurses as its completed
|
||||||
`TUI_NOTCURSES_V1` infrastructure tranche migrates the active rendering/input
|
active rendering/input backend;
|
||||||
backend from legacy ncursesw to Notcurses without changing product semantics;
|
- a loopback-only local Web adapter whose Dashboard is implemented on the
|
||||||
|
0.1.2 development branch; its Analyse, Programmes, Sessions, and Exercises
|
||||||
|
routes remain placeholders pending separate contracts;
|
||||||
- a small user-session PC agent, `trainlog-syncd`, for Android-triggered
|
- a small user-session PC agent, `trainlog-syncd`, for Android-triggered
|
||||||
synchronization;
|
synchronization;
|
||||||
- versioned JSON synchronization artifacts exchanged over direct MTP.
|
- versioned JSON synchronization artifacts exchanged over direct MTP.
|
||||||
|
|
@ -215,9 +217,12 @@ trainlog-sync-receipt-v1.json
|
||||||
Android -> PC data uses:
|
Android -> PC data uses:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
trainlog-mobile-export-v1.json
|
trainlog-mobile-export-v3.json
|
||||||
```
|
```
|
||||||
|
|
||||||
|
V3 is the active completed-session snapshot. V1/V2 remain readable legacy
|
||||||
|
inputs and `TRAINLOG_FORMAT_V1` remains a separate frozen contract.
|
||||||
|
|
||||||
PC -> Android catalog data uses:
|
PC -> Android catalog data uses:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|
@ -264,6 +269,19 @@ User-facing code must not intentionally return placeholders such as
|
||||||
|
|
||||||
## 10. Documentation
|
## 10. Documentation
|
||||||
|
|
||||||
|
Repository documentation and publication language is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
README and canonical documentation: English
|
||||||
|
CHANGELOG and release notes: English
|
||||||
|
New or modified source comments: English
|
||||||
|
User interface: preserve its actual localization
|
||||||
|
```
|
||||||
|
|
||||||
|
Exact UI strings, user data, identifiers, commands, paths, protocol fields,
|
||||||
|
version/status markers, citations, and historical evidence are not translated
|
||||||
|
merely to satisfy the prose-language rule.
|
||||||
|
|
||||||
Canonical documents:
|
Canonical documents:
|
||||||
|
|
||||||
- `README.md`;
|
- `README.md`;
|
||||||
|
|
@ -289,6 +307,14 @@ Checkpoint history belongs in Git history and `docs/reviews`; canonical
|
||||||
documents describe the current state rather than accumulating obsolete
|
documents describe the current state rather than accumulating obsolete
|
||||||
`NEXT` sections.
|
`NEXT` sections.
|
||||||
|
|
||||||
|
Every functional change identifies the affected documentation. When relevant,
|
||||||
|
reconcile `docs/current_state.md`, `docs/roadmap.md`, and `CHANGELOG.md`; the
|
||||||
|
completion report lists updated documents or explains why none were affected.
|
||||||
|
Release publication verifies both GitHub and Forgejo notes, their English
|
||||||
|
language, and their correspondence with the exact tag independently of later
|
||||||
|
development. A requested status in prose is never sufficient evidence for a
|
||||||
|
`PASS` or `FROZEN` marker.
|
||||||
|
|
||||||
## 11. Validation
|
## 11. Validation
|
||||||
|
|
||||||
Before every meaningful push:
|
Before every meaningful push:
|
||||||
|
|
|
||||||
14
CHANGELOG.md
14
CHANGELOG.md
|
|
@ -2,6 +2,12 @@
|
||||||
|
|
||||||
## Unreleased — 0.1.2
|
## Unreleased — 0.1.2
|
||||||
|
|
||||||
|
- Reconciled canonical documentation with the implemented 0.1.2 development
|
||||||
|
state, kept v0.1.1 and future synchronization scope explicit, established
|
||||||
|
English as the repository documentation/release-note language, and added a
|
||||||
|
reusable tag-scoped English source for the v0.1.1 public notes. No production
|
||||||
|
behavior, schema, format, service, tag, or release asset changed.
|
||||||
|
|
||||||
- Completed `TRAINLOG_SYNC_TEST_ENV_V1` without changing production behavior,
|
- Completed `TRAINLOG_SYNC_TEST_ENV_V1` without changing production behavior,
|
||||||
schemas or formats. `tools/validate_sync_isolated.py` now validates JDK 17 and
|
schemas or formats. `tools/validate_sync_isolated.py` now validates JDK 17 and
|
||||||
the effective Gradle JVMs, creates unique private HOME/XDG/native/JVM tmp,
|
the effective Gradle JVMs, creates unique private HOME/XDG/native/JVM tmp,
|
||||||
|
|
@ -21,9 +27,11 @@
|
||||||
per-artifact rollback; existing Android coverage remains the proof of draft
|
per-artifact rollback; existing Android coverage remains the proof of draft
|
||||||
exclusion followed by finalized-session export.
|
exclusion followed by finalized-session export.
|
||||||
|
|
||||||
- Development opened after the stable `v0.1.1` release. The current
|
- Development opened after the stable `v0.1.1` release. The complete Web
|
||||||
implementation cursor remains `WEB_DASHBOARD_CHARACTERIZATION_V1`; no Web
|
Dashboard is now `WEB_DASHBOARD_V1=PASS/FROZEN`; Analyse, Programmes,
|
||||||
implementation has started.
|
Sessions, and Exercises remain placeholders. The current operational cursor
|
||||||
|
is `TRAINLOG_SYNC_CHARACTERIZATION_V1`; its future protocol work has not
|
||||||
|
started.
|
||||||
|
|
||||||
## 0.1.1 — 2026-09-16
|
## 0.1.1 — 2026-09-16
|
||||||
|
|
||||||
|
|
|
||||||
52
README.md
52
README.md
|
|
@ -3,8 +3,9 @@
|
||||||
Trainlog is a local-first workout and body-data system. Trainlog Core owns
|
Trainlog is a local-first workout and body-data system. Trainlog Core owns
|
||||||
business truth and canonical desktop persistence. Its native Android app is the
|
business truth and canonical desktop persistence. Its native Android app is the
|
||||||
field companion, its C17/Notcurses desktop TUI is the administration and
|
field companion, its C17/Notcurses desktop TUI is the administration and
|
||||||
technical surface, and its documented future local Web sibling is the analysis,
|
technical surface, and its local browser Web sibling provides the implemented
|
||||||
visualization, and program/session-preparation surface.
|
Dashboard while reserving later analysis, program, session, and exercise
|
||||||
|
modules for separately contracted work.
|
||||||
|
|
||||||
Android and desktop each own a local SQLite database. The desktop database is
|
Android and desktop each own a local SQLite database. The desktop database is
|
||||||
the canonical long-term history. Trainlog synchronizes versioned JSON artifacts
|
the canonical long-term history. Trainlog synchronizes versioned JSON artifacts
|
||||||
|
|
@ -16,11 +17,13 @@ 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 (planned) | Analyze and visualize canonical data; prepare programs and sessions through typed Trainlog Core services. |
|
| Local Web (0.1.2 development) | Display the implemented local Dashboard and persist its private layout through typed Trainlog Core/API boundaries. Analyse, Programmes, Sessions, 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. Its loopback-only CLI/HTTP
|
a sibling adapter, not an extension of the TUI. On `main`, its loopback-only
|
||||||
infrastructure is implemented; its frontend and business API are not.
|
CLI/HTTP adapter, embedded frontend, read-only Dashboard API, factual tiles,
|
||||||
|
visualizations, and private layout persistence are implemented. This does not
|
||||||
|
make the other four Web routes functional or publish version 0.1.2.
|
||||||
|
|
||||||
## Releases
|
## Releases
|
||||||
|
|
||||||
|
|
@ -127,8 +130,8 @@ updates; generating a replacement key is not a normal release procedure.
|
||||||
|
|
||||||
### Linux runtime dependencies
|
### Linux runtime dependencies
|
||||||
|
|
||||||
The published x86-64 TUI is dynamically linked. The current build directly
|
The published v0.1.1 x86-64 TUI is dynamically linked. Its tagged source
|
||||||
requires compatible versions of:
|
directly requires compatible versions of:
|
||||||
|
|
||||||
- glibc and the GCC support runtime;
|
- glibc and the GCC support runtime;
|
||||||
- SQLite 3;
|
- SQLite 3;
|
||||||
|
|
@ -137,9 +140,12 @@ requires compatible versions of:
|
||||||
- libudev;
|
- libudev;
|
||||||
- libmtp;
|
- libmtp;
|
||||||
- Notcurses Core;
|
- Notcurses Core;
|
||||||
- GNU libmicrohttpd;
|
|
||||||
- the standard math library.
|
- the standard math library.
|
||||||
|
|
||||||
|
The current 0.1.2 development source additionally links GNU libmicrohttpd and
|
||||||
|
yyjson for the local Web adapter and Dashboard layout configuration. Those are
|
||||||
|
not retroactive requirements of the pre-Web v0.1.1 tagged source.
|
||||||
|
|
||||||
Distribution packages may pull additional transitive libraries, including
|
Distribution packages may pull additional transitive libraries, including
|
||||||
libusb, ncursesw, unistring, gpm, libgcrypt, libgpg-error, and libdeflate.
|
libusb, ncursesw, unistring, gpm, libgcrypt, libgpg-error, and libdeflate.
|
||||||
Package names and ABI versions vary by distribution; inspect the release's
|
Package names and ABI versions vary by distribution; inspect the release's
|
||||||
|
|
@ -165,8 +171,8 @@ Desktop builds require:
|
||||||
- a C17 compiler toolchain;
|
- a C17 compiler toolchain;
|
||||||
- `pkg-config`;
|
- `pkg-config`;
|
||||||
- Notcurses Core development headers;
|
- Notcurses Core development headers;
|
||||||
- SQLite, libuuid, utf8proc, libudev, libmtp, and GNU libmicrohttpd development
|
- SQLite, libuuid, utf8proc, libudev, libmtp, GNU libmicrohttpd, and yyjson
|
||||||
headers;
|
development headers for the current development source;
|
||||||
- Python 3 for generated sources, validators, import/export helpers, and tests.
|
- Python 3 for generated sources, validators, import/export helpers, and tests.
|
||||||
|
|
||||||
The embedded Web frontend additionally uses Node and npm at build time only.
|
The embedded Web frontend additionally uses Node and npm at build time only.
|
||||||
|
|
@ -183,18 +189,25 @@ meson setup build -Dweb=enabled
|
||||||
meson compile -C build
|
meson compile -C build
|
||||||
```
|
```
|
||||||
|
|
||||||
Meson never runs `npm install` or downloads packages. The default `web=auto`
|
Meson never runs `npm install` or downloads packages. Run `npm ci` explicitly
|
||||||
|
for the exact lockfile before configuring a Web-enabled build. The default `web=auto`
|
||||||
embeds the frontend when Node, npm, and the prepared `web/node_modules` are
|
embeds the frontend when Node, npm, and the prepared `web/node_modules` are
|
||||||
available; otherwise it preserves a desktop-only build and `trainlog -w`
|
available; otherwise it preserves a desktop-only build and `trainlog -w`
|
||||||
reports that frontend support is absent. Release builds must use
|
reports that frontend support is absent. Release builds must use
|
||||||
`-Dweb=enabled`. `-Dweb=disabled` is the explicit desktop-only choice. Node,
|
`-Dweb=enabled`. `-Dweb=disabled` is the explicit desktop-only choice. Node,
|
||||||
npm, `node_modules`, and `web/dist` are not runtime dependencies.
|
npm, `node_modules`, and `web/dist` are not runtime dependencies.
|
||||||
|
|
||||||
|
For an existing build directory, change the option with `meson configure
|
||||||
|
build -Dweb=enabled` (or the required value) instead of running `meson setup`
|
||||||
|
as though the directory were new.
|
||||||
|
|
||||||
### Optional systemd user service for local Web development
|
### Optional systemd user service for local Web development
|
||||||
|
|
||||||
The versioned `systemd/trainlog-web.service` unit can keep `trainlog -w`
|
The versioned `systemd/trainlog-web.service` unit can keep `trainlog -w`
|
||||||
available on `127.0.0.1:8080` during an interactive user session. This is a
|
available on `127.0.0.1:8080` during an interactive user session. Without
|
||||||
development convenience, not a requirement of the final Trainlog distribution.
|
systemd user lingering, enabling it does not guarantee startup before login.
|
||||||
|
This is a development convenience, not a requirement of the final Trainlog
|
||||||
|
distribution.
|
||||||
It intentionally runs the canonical user entry point
|
It intentionally runs the canonical user entry point
|
||||||
`~/.local/bin/trainlog`; in a source checkout that entry point may be a symlink
|
`~/.local/bin/trainlog`; in a source checkout that entry point may be a symlink
|
||||||
to the current `build/tui/trainlog` binary, but the symlink must resolve to an
|
to the current `build/tui/trainlog` binary, but the symlink must resolve to an
|
||||||
|
|
@ -229,6 +242,11 @@ systemctl --user start trainlog-web
|
||||||
journalctl --user -u trainlog-web
|
journalctl --user -u trainlog-web
|
||||||
```
|
```
|
||||||
|
|
||||||
|
An operator may separately configure a local nginx proxy such as
|
||||||
|
`http://trainlog.perf`. That hostname and proxy are machine-local conveniences,
|
||||||
|
not a public Trainlog domain or a runtime dependency, and Trainlog does not
|
||||||
|
configure them automatically.
|
||||||
|
|
||||||
Uninstalling the integration disables the unit before removing only its user
|
Uninstalling the integration disables the unit before removing only its user
|
||||||
configuration symlink:
|
configuration symlink:
|
||||||
|
|
||||||
|
|
@ -287,7 +305,7 @@ not contain cloud credentials and does not run `rclone`.
|
||||||
|
|
||||||
## Current status
|
## Current status
|
||||||
|
|
||||||
As of 2026-09-15:
|
As of 2026-09-17:
|
||||||
|
|
||||||
- `TRAINLOG_FORMAT_V1=PASS/FROZEN`;
|
- `TRAINLOG_FORMAT_V1=PASS/FROZEN`;
|
||||||
- desktop SQLite schema v18 and Android SQLite schema v17;
|
- desktop SQLite schema v18 and Android SQLite schema v17;
|
||||||
|
|
@ -301,7 +319,11 @@ As of 2026-09-15:
|
||||||
- `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING` pending a real Drive plus
|
- `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING` pending a real Drive plus
|
||||||
Android-triggered bidirectional smoke test.
|
Android-triggered bidirectional smoke test.
|
||||||
- `WEB_FRONTEND_SHELL_V1=PASS/FROZEN` and
|
- `WEB_FRONTEND_SHELL_V1=PASS/FROZEN` and
|
||||||
`TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`.
|
`WEB_DASHBOARD_V1=PASS/FROZEN`; the other four Web routes remain placeholders;
|
||||||
|
- `TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`;
|
||||||
|
- `TRAINLOG_SYNC_GAP_CONTRACT_V1=CONTRACT_FROZEN /
|
||||||
|
IMPLEMENTATION_NOT_STARTED` and the next cursor remains
|
||||||
|
`TRAINLOG_SYNC_CHARACTERIZATION_V1`.
|
||||||
|
|
||||||
The latest executable result belongs in
|
The latest executable result belongs in
|
||||||
[current state](docs/current_state.md), not in multiple README narratives.
|
[current state](docs/current_state.md), not in multiple README narratives.
|
||||||
|
|
|
||||||
|
|
@ -18,8 +18,8 @@ evidence and chronology.
|
||||||
glanceable summaries, permissions, and Android interaction rules.
|
glanceable summaries, permissions, and Android interaction rules.
|
||||||
- [Desktop TUI](tui.md) owns Notcurses navigation, correction, detailed
|
- [Desktop TUI](tui.md) owns Notcurses navigation, correction, detailed
|
||||||
consultation, analytics, graphs, and long-term follow-up behavior.
|
consultation, analytics, graphs, and long-term follow-up behavior.
|
||||||
- [Architecture](architecture.md) owns the contract for the planned local Web
|
- [Architecture](architecture.md) owns the implemented and future boundaries of
|
||||||
sibling, including Core/API boundaries, loopback networking, shell,
|
the local Web sibling, including Core/API boundaries, loopback networking, shell,
|
||||||
Dashboard, layout, build/runtime separation, and security invariants.
|
Dashboard, layout, build/runtime separation, and security invariants.
|
||||||
|
|
||||||
## Data model
|
## Data model
|
||||||
|
|
@ -73,6 +73,8 @@ evidence and chronology.
|
||||||
- [Review records](reviews/) retain historical audits, incidents, checkpoints,
|
- [Review records](reviews/) retain historical audits, incidents, checkpoints,
|
||||||
and validation evidence. Their status and paths are historical.
|
and validation evidence. Their status and paths are historical.
|
||||||
- [Changelog](../CHANGELOG.md) owns chronological change history.
|
- [Changelog](../CHANGELOG.md) owns chronological change history.
|
||||||
|
- [Release notes](releases/) retain reusable, tag-scoped English source text
|
||||||
|
for public GitHub and Forgejo releases.
|
||||||
|
|
||||||
## Ownership rule
|
## Ownership rule
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -264,7 +264,8 @@ directory. The shell implements semantic Header/Body/Footer landmarks,
|
||||||
keyboard-visible focus, responsive tile scaffolding and reduced-motion rules.
|
keyboard-visible focus, responsive tile scaffolding and reduced-motion rules.
|
||||||
Absent user/session/zone facts remain visibly unavailable. The bounded grid
|
Absent user/session/zone facts remain visibly unavailable. The bounded grid
|
||||||
engine uses `react-grid-layout` 2.2.4 behind a Trainlog-owned model, adapter and
|
engine uses `react-grid-layout` 2.2.4 behind a Trainlog-owned model, adapter and
|
||||||
validator; ECharts remains deferred until a real visualization exists.
|
validator. The implemented Progression visualization loads modular ECharts
|
||||||
|
6.1.0 lazily; the BODY ZONES visualization is an original code-native SVG.
|
||||||
|
|
||||||
The Dashboard is a canonical 12-column grid containing exactly seven V1 tiles:
|
The Dashboard is a canonical 12-column grid containing exactly seven V1 tiles:
|
||||||
|
|
||||||
|
|
@ -278,12 +279,10 @@ The Dashboard is a canonical 12-column grid containing exactly seven V1 tiles:
|
||||||
|
|
||||||
`WEB_DASHBOARD_GRID_V1=PASS/FROZEN` supports drag and drop, horizontal and
|
`WEB_DASHBOARD_GRID_V1=PASS/FROZEN` supports drag and drop, horizontal and
|
||||||
vertical resizing, tile-specific minimum/maximum sizes, automatic
|
vertical resizing, tile-specific minimum/maximum sizes, automatic
|
||||||
reorganization, responsive projection, persistence in the next tranche, and
|
reorganization, responsive projection, versioned private layout persistence,
|
||||||
restoration of the Trainlog default. Dragging and resizing are enabled only by
|
and restoration of the Trainlog default. Dragging and resizing are enabled only by
|
||||||
the explicit `Modifier l'agencement` mode. A larger tile may reveal more
|
the explicit `Modifier l'agencement` mode. A larger tile may reveal more
|
||||||
information, but tile size never changes a metric's business definition. Until
|
information, but tile size never changes a metric's business definition.
|
||||||
`WEB_DASHBOARD_LAYOUT_V1`, saving accepts a valid draft only in current React
|
|
||||||
memory and reload restores the default.
|
|
||||||
|
|
||||||
The single persisted source layout is the canonical desktop 12-column layout:
|
The single persisted source layout is the canonical desktop 12-column layout:
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -53,6 +53,10 @@ Prefer small composable functions over long functions mixing unrelated responsib
|
||||||
|
|
||||||
## 5. Comments
|
## 5. Comments
|
||||||
|
|
||||||
|
New or modified source comments are written in English. Exact external text,
|
||||||
|
protocol literals, UI strings, user data, and historical quotations retain
|
||||||
|
their required language.
|
||||||
|
|
||||||
Comments are required for:
|
Comments are required for:
|
||||||
|
|
||||||
- public interfaces;
|
- public interfaces;
|
||||||
|
|
|
||||||
|
|
@ -12,9 +12,9 @@ Android is the field companion: it captures training and body data, preserves
|
||||||
the active draft, receives AI proposals, triggers synchronization, and shows
|
the active draft, receives AI proposals, triggers synchronization, and shows
|
||||||
quick summaries. The C17/Notcurses TUI is the administration, inspection,
|
quick summaries. The C17/Notcurses TUI is the administration, inspection,
|
||||||
maintenance, import/export, and technical-tooling surface. The local Web
|
maintenance, import/export, and technical-tooling surface. The local Web
|
||||||
sibling now provides its embedded application shell; its future business
|
sibling now provides its embedded application shell and implemented Dashboard;
|
||||||
surfaces will own analysis, visualization, and program/session preparation
|
its future business surfaces will own broader analysis, program/session
|
||||||
through Trainlog Core.
|
preparation, and exercise workflows through Trainlog Core.
|
||||||
|
|
||||||
Trainlog Core owns business truth. The desktop SQLite database remains the
|
Trainlog Core owns business truth. The desktop SQLite database remains the
|
||||||
canonical local source of truth and long-term history; no interface owns a
|
canonical local source of truth and long-term history; no interface owns a
|
||||||
|
|
@ -157,12 +157,15 @@ the result. The Web aggregate now exposes the distinct factual snapshot through
|
||||||
`TRAINLOG_WEB_V1` architecture, API independence, local-network boundary,
|
`TRAINLOG_WEB_V1` architecture, API independence, local-network boundary,
|
||||||
browser shell, Dashboard, layout ownership, build/runtime separation, and
|
browser shell, Dashboard, layout ownership, build/runtime separation, and
|
||||||
security invariants are canonical. The CLI/local HTTP infrastructure and
|
security invariants are canonical. The CLI/local HTTP infrastructure and
|
||||||
embedded frontend shell are implemented: `-w`/`--web`, optional `--port`, exact
|
embedded frontend are implemented: `-w`/`--web`, optional `--port`, exact IPv4
|
||||||
IPv4 loopback binding, `/api/v1/health`, React navigation and the persistent
|
loopback binding, `/api/v1/health`, React navigation, and the persistent
|
||||||
Header/Body/Footer shell. Production assets are generated from the npm lockfile
|
Header/Body/Footer shell. Production assets are generated from the npm lockfile
|
||||||
and linked into the binary. The read-only Dashboard business snapshot and
|
and linked into the binary. The read-only Dashboard uses one typed Core
|
||||||
factual Footer integration exist; no grid engine, business mutation, automatic
|
snapshot, a seven-tile responsive grid, factual size-adaptive tiles, an ECharts
|
||||||
browser launch or layout persistence exists yet.
|
progression series, an original BODY ZONES SVG, and private versioned layout
|
||||||
|
persistence with optimistic conflict and CSRF/Origin protection. It provides no
|
||||||
|
business mutation or automatic browser launch. Analyse, Programmes, Sessions,
|
||||||
|
and Exercises remain explicit placeholders.
|
||||||
|
|
||||||
## Data semantics
|
## Data semantics
|
||||||
|
|
||||||
|
|
@ -182,13 +185,18 @@ browser launch or layout persistence exists yet.
|
||||||
|
|
||||||
## Validation status
|
## Validation status
|
||||||
|
|
||||||
The durable commands are owned by [tests.md](tests.md). On 2026-09-17 isolated
|
The durable commands are owned by [tests.md](tests.md). At commit
|
||||||
validation passed desktop compilation, **75/75 normal Meson tests** and
|
`14b863eb0f159d46891f4ad5cf076b3aa0a11bba` on 2026-09-17, isolated validation
|
||||||
|
passed desktop compilation, **75/75 normal Meson tests** and
|
||||||
**75/75 ASan/UBSan Meson tests**, Android debug assembly and **203 Android
|
**75/75 ASan/UBSan Meson tests**, Android debug assembly and **203 Android
|
||||||
tests (199 passed, 4 skipped, 0 failed)**, the JSON validator, and the
|
tests (199 passed, 4 skipped, 0 failed)**, the JSON validator, and the
|
||||||
import-contract validator. The source-derived TUI
|
import-contract validator. The source-derived TUI
|
||||||
`TRANSLATABLE_UI=0` check and Android resource parity also passed. Link and
|
`TRANSLATABLE_UI=0` check and Android resource parity also passed. Link and
|
||||||
diff safety checks pass in the final audit evidence.
|
diff safety checks passed in that checkpoint evidence. These are historical
|
||||||
|
results for that commit, not executions performed by later documentation work.
|
||||||
|
The four Android skips were the optional historical v9, v12, v13, and v14
|
||||||
|
database-fixture migration cases. Hardware MTP, real Drive, and Android
|
||||||
|
instrumented tests were not part of that isolated run.
|
||||||
|
|
||||||
The Dashboard Core extraction tranche passes **62/62 normal Meson tests** and
|
The Dashboard Core extraction tranche passes **62/62 normal Meson tests** and
|
||||||
**62/62 ASan/UBSan Meson tests**, including the standalone public-header and
|
**62/62 ASan/UBSan Meson tests**, including the standalone public-header and
|
||||||
|
|
|
||||||
9
docs/releases/README.md
Normal file
9
docs/releases/README.md
Normal file
|
|
@ -0,0 +1,9 @@
|
||||||
|
# Release-note sources
|
||||||
|
|
||||||
|
This directory contains reusable English source text for public release notes.
|
||||||
|
Each file is scoped to the named immutable tag; it must describe that tag rather
|
||||||
|
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.1](v0.1.1.md)
|
||||||
32
docs/releases/v0.1.1.md
Normal file
32
docs/releases/v0.1.1.md
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
Trainlog v0.1.1 is the latest stable release before Web implementation began.
|
||||||
|
|
||||||
|
## Interfaces and languages
|
||||||
|
|
||||||
|
- French is the default interface language on Android and in the TUI, with
|
||||||
|
English selectable and a persistent local preference.
|
||||||
|
- BODY ZONE labels and synchronization states are presented locally without
|
||||||
|
changing business data or exchange formats.
|
||||||
|
- Android workflows for entering, correcting, and reordering active and
|
||||||
|
completed sessions are improved.
|
||||||
|
|
||||||
|
## Reliability
|
||||||
|
|
||||||
|
- Transactional corrections and regression coverage protect corrected and
|
||||||
|
synchronized sessions.
|
||||||
|
- Decimal input accepts `.` or `,`, rejects non-finite values, and preserves
|
||||||
|
intermediate editing states.
|
||||||
|
- The Android APK was built with Trainlog's durable signing identity and
|
||||||
|
verified before publication.
|
||||||
|
|
||||||
|
## Architecture
|
||||||
|
|
||||||
|
- The `TRAINLOG_WEB_V1` contract is frozen: the future Web interface is a local
|
||||||
|
sibling adapter built on typed Trainlog Core services.
|
||||||
|
- No Web server, frontend, or Dashboard is implemented in this release.
|
||||||
|
|
||||||
|
## Assets
|
||||||
|
|
||||||
|
- `trainlog-android-v0.1.1.apk`: signed Android APK.
|
||||||
|
- `trainlog-tui-linux-x86_64-v0.1.1`: dynamically linked Linux x86-64
|
||||||
|
executable.
|
||||||
|
- `SHA256SUMS`: SHA-256 checksums for both artifacts.
|
||||||
|
|
@ -27,7 +27,8 @@ 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
|
||||||
contract, frozen interactive grid, versioned layout persistence and factual
|
contract, frozen interactive grid, versioned layout persistence and factual
|
||||||
tile rendering exist. Advanced visualizations remain a future slice.
|
tile rendering exist. The Dashboard's bounded progression and BODY ZONES
|
||||||
|
visualizations are implemented; the other four Web routes remain placeholders.
|
||||||
|
|
||||||
## Current cursor
|
## Current cursor
|
||||||
|
|
||||||
|
|
@ -46,9 +47,9 @@ and it does not authorize a protocol, schema, endpoint or button change.
|
||||||
|
|
||||||
`WEB_FRONTEND_SHELL_V1=PASS/FROZEN`. `trainlog -w` serves the embedded React,
|
`WEB_FRONTEND_SHELL_V1=PASS/FROZEN`. `trainlog -w` serves the embedded React,
|
||||||
TypeScript and Vite shell with its five client routes, Catppuccin Mocha design
|
TypeScript and Vite shell with its five client routes, Catppuccin Mocha design
|
||||||
system, permanent Header/Footer, empty-data states and health status. The next
|
system, permanent Header/Footer, empty-data states and health status. The
|
||||||
Dashboard tranche is partitioned below; this cursor does not authorize an
|
Dashboard slices below are complete; this does not authorize implementation of
|
||||||
undifferentiated implementation of every Dashboard concern.
|
the remaining route placeholders.
|
||||||
`WEB_DASHBOARD_GRID_V1=PASS/FROZEN` adds the validated 12-column desktop grid,
|
`WEB_DASHBOARD_GRID_V1=PASS/FROZEN` adds the validated 12-column desktop grid,
|
||||||
explicit edit mode, drag/resize, keyboard alternative and derived responsive
|
explicit edit mode, drag/resize, keyboard alternative and derived responsive
|
||||||
projections without persisting layout state.
|
projections without persisting layout state.
|
||||||
|
|
@ -74,7 +75,7 @@ WEB_DASHBOARD_CHARACTERIZATION_V1
|
||||||
-> WEB_TUI_READ_MODEL_ADOPTION_V1 [PASS/FROZEN]
|
-> WEB_TUI_READ_MODEL_ADOPTION_V1 [PASS/FROZEN]
|
||||||
-> WEB_CLI_HTTP_INFRASTRUCTURE_V1 [PASS/FROZEN]
|
-> WEB_CLI_HTTP_INFRASTRUCTURE_V1 [PASS/FROZEN]
|
||||||
-> WEB_FRONTEND_SHELL_V1 [PASS/FROZEN]
|
-> WEB_FRONTEND_SHELL_V1 [PASS/FROZEN]
|
||||||
-> WEB_DASHBOARD_V1
|
-> WEB_DASHBOARD_V1 [PASS/FROZEN]
|
||||||
```
|
```
|
||||||
|
|
||||||
The Web must not start with React. Characterization proves current behavior;
|
The Web must not start with React. Characterization proves current behavior;
|
||||||
|
|
@ -101,9 +102,10 @@ WEB_DASHBOARD_DATA_CONTRACT_V1 [PASS/FROZEN]
|
||||||
-> WEB_DASHBOARD_V1_FINAL_REVIEW [PASS/FROZEN]
|
-> WEB_DASHBOARD_V1_FINAL_REVIEW [PASS/FROZEN]
|
||||||
```
|
```
|
||||||
|
|
||||||
The slice order may be refined by the next contract, but it must preserve the
|
The completed slice order preserves Core ownership, keeps visual layout outside
|
||||||
existing Core ownership, keep visual layout outside business SQLite and frozen
|
business SQLite and frozen formats, and specifies Activity/Progression before
|
||||||
formats, and specify Activité/Progression before implementing those metrics.
|
rendering those metrics. Later Dashboard evolution must preserve those frozen
|
||||||
|
boundaries.
|
||||||
|
|
||||||
`WEB_NEXT_MODULE_SELECTION_V1` remains a future Web documentary cursor. The current
|
`WEB_NEXT_MODULE_SELECTION_V1` remains a future Web documentary cursor. The current
|
||||||
roadmap does not yet establish a contract order between Analyse, Programmes,
|
roadmap does not yet establish a contract order between Analyse, Programmes,
|
||||||
|
|
@ -117,8 +119,9 @@ it does not authorize silently implementing a page.
|
||||||
|
|
||||||
The frozen contract orders future bounded lots as environment/test,
|
The frozen contract orders future bounded lots as environment/test,
|
||||||
characterization, data/lifecycles, causal deletion, generation/consumption/ack,
|
characterization, data/lifecycles, causal deletion, generation/consumption/ack,
|
||||||
orchestrator/report, Web API, then button/refresh. No implementation lot is
|
orchestrator/report, Web API, then button/refresh. The environment/test lot is
|
||||||
started. `WEB_DASHBOARD_V1=PASS/FROZEN` remains closed and unchanged.
|
complete; no production synchronization implementation lot is started.
|
||||||
|
`WEB_DASHBOARD_V1=PASS/FROZEN` remains closed and unchanged.
|
||||||
|
|
||||||
### Gym catalog V1
|
### Gym catalog V1
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -396,7 +396,7 @@ point for the desktop and Android validation needed by synchronization work:
|
||||||
```bash
|
```bash
|
||||||
python3 tools/validate_sync_isolated.py --suite preflight
|
python3 tools/validate_sync_isolated.py --suite preflight
|
||||||
python3 tools/validate_sync_isolated.py --suite smoke
|
python3 tools/validate_sync_isolated.py --suite smoke
|
||||||
python3 tools/validate_sync_isolated.py --suite full
|
python3 tools/validate_sync_isolated.py --suite full --jdk /usr/lib/jvm/java-17-openjdk
|
||||||
```
|
```
|
||||||
|
|
||||||
Use `--jdk /absolute/jdk17/home` when auto-detection is unsuitable and
|
Use `--jdk /absolute/jdk17/home` when auto-detection is unsuitable and
|
||||||
|
|
@ -441,6 +441,13 @@ harness terminates only process groups that it started, waits before forced
|
||||||
termination, never stops a pre-existing Gradle daemon or Trainlog service, and
|
termination, never stops a pre-existing Gradle daemon or Trainlog service, and
|
||||||
refuses cleanup outside its exact root or across a symlink.
|
refuses cleanup outside its exact root or across a symlink.
|
||||||
|
|
||||||
|
At the 2026-09-17 reference checkpoint, the Android total retained four skips
|
||||||
|
because optional historical database fixtures were unavailable: one v9, one
|
||||||
|
v12, one v13, and one v14 migration-fixture case. These are explicit fixture
|
||||||
|
coverage gaps, not passing migration executions. The isolated harness does not
|
||||||
|
run hardware MTP, real Drive, or Android instrumented tests; those remain
|
||||||
|
separate validation classes.
|
||||||
|
|
||||||
Stable-release validation additionally builds the signed release variant and
|
Stable-release validation additionally builds the signed release variant and
|
||||||
checks the packaged product versions and binary linkage:
|
checks the packaged product versions and binary linkage:
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue