118 lines
4.2 KiB
Markdown
118 lines
4.2 KiB
Markdown
# Changelog
|
|
|
|
All notable changes to Trainlog are documented here.
|
|
|
|
Detailed implementation chronology remains available in Git history and
|
|
`docs/reviews`. This file summarizes the current unreleased product baseline.
|
|
|
|
## Unreleased
|
|
|
|
### Added
|
|
|
|
- native Kotlin/Compose Android capture client;
|
|
- Android local exercise, session, continuous-activity, and body persistence;
|
|
- C17/ncursesw desktop TUI with direct session entry and durable SQLite history;
|
|
- profile-aware exercise model using recording mode, tracking mode, and
|
|
supplemental fields;
|
|
- continuous activity persistence without synthetic sets;
|
|
- variable repetition-set input including `5x10`, explicit lists, and pyramid
|
|
shorthand such as `4..10..4`;
|
|
- persisted desktop session editing and exercise removal;
|
|
- Android current-session draft exercise removal;
|
|
- body-observation history, editing, graphs, and normalized overlays;
|
|
- exercise performance history;
|
|
- direct physical Android USB/MTP discovery with libudev/libmtp;
|
|
- direct MTP read/write/list/delete support without filesystem mounts;
|
|
- Android full mobile snapshot export;
|
|
- strict idempotent desktop mobile importer;
|
|
- PC canonical exercise-catalog publication to Android;
|
|
- automatic Android snapshot maintenance;
|
|
- Android `Synchroniser maintenant` request flow;
|
|
- shared C bidirectional synchronization engine;
|
|
- `trainlog-syncd` user-session synchronization agent;
|
|
- request/receipt synchronization protocol;
|
|
- stable `sy_<uuid-v4>` synchronization identities;
|
|
- structured synchronization history with selectable TUI list/detail views.
|
|
|
|
### Changed
|
|
|
|
- desktop SQLite schema evolved to v5;
|
|
- schema v5 permits targetless set-session rows for actual-only mobile data;
|
|
- heterogeneous performed sets are preserved without inventing a uniform target;
|
|
- Android/desktop synchronization uses dedicated versioned artifacts instead of
|
|
modifying frozen Trainlog JSON v1;
|
|
- PC and TUI synchronization paths now share one engine;
|
|
- Android PC-created artifact access uses a persistent SAF grant for
|
|
`Download/Trainlog`;
|
|
- the Android data package is no longer accidentally hidden by a broad
|
|
repository `data/` ignore rule;
|
|
- user-facing session history timestamps use `DD/MM/YYYY HH:MM` while canonical
|
|
storage remains RFC3339.
|
|
|
|
### Fixed
|
|
|
|
- stale schema-v4 importer call after desktop schema v5 migration;
|
|
- stale schema-v4 guard in the PC catalog exporter;
|
|
- missing `sy` prefix support in the UUID creator;
|
|
- synchronization failures that previously surfaced only as `error=unknown`;
|
|
- Android folder-selection UX so a wrong SAF folder can be changed without
|
|
clearing application data;
|
|
- libmtp terminal output leaking into ncurses rendering.
|
|
|
|
### Validation
|
|
|
|
Current validated baseline:
|
|
|
|
```text
|
|
TRAINLOG_FORMAT_V1=FROZEN
|
|
|
|
DESKTOP_SCHEMA_V5=PASS
|
|
DESKTOP_TESTS=19/19 PASS
|
|
|
|
ANDROID_BUILD=PASS
|
|
ANDROID_LOCAL_WORKFLOWS=PASS
|
|
|
|
USB_MTP_DETECTION=PASS
|
|
MTP_ROUNDTRIP=PASS
|
|
|
|
ANDROID_TO_PC_MTP=PASS
|
|
PC_TO_ANDROID_MTP_PUBLISH=PASS
|
|
COMMON_SYNC_ENGINE=PASS
|
|
TRAINLOG_SYNCD=PASS
|
|
ANDROID_TRIGGERED_SYNC=PASS
|
|
ANDROID_SYNC_RECEIPT=PASS
|
|
TUI_SYNC_LOG_SHOW=PASS
|
|
BIDIRECTIONAL_SYNC_V1=PASS
|
|
```
|
|
|
|
### Measured max v1
|
|
|
|
Added:
|
|
|
|
- explicit measured-max derivation from `max_test` sessions only;
|
|
- newest successful measured result and same-mode historical record;
|
|
- dedicated TUI measured-max history and graph;
|
|
- external working-load calculations at 60/70/80/90%;
|
|
- selectable 0.5/1/2.5/5.0 kg working-load rounding;
|
|
- direction-aware assistance measured-max semantics;
|
|
- Android `Entraînement` / `Test max` session selection;
|
|
- Android history/detail max-test identification;
|
|
- measured-max regression coverage.
|
|
|
|
No estimated 1RM, schema v6, or frozen Trainlog JSON v1 change was introduced.
|
|
|
|
### Body analytics v1
|
|
|
|
Added:
|
|
|
|
- desktop-only body analytics view;
|
|
- local height/formula estimation profile;
|
|
- circumference-based body-fat estimate;
|
|
- estimated fat and lean mass when real weight is available;
|
|
- waist/hip, shoulder/waist, and chest/waist ratios;
|
|
- arm, forearm, thigh, and calf left/right asymmetry percentages;
|
|
- weight, waist, and estimated-body-fat trend deltas;
|
|
- body analytics regression test.
|
|
|
|
Estimated analytics remain derived display values and are never persisted as
|
|
direct measurements. Android remains capture-only for this feature.
|