Align documentation with current TUI state
This commit is contained in:
parent
3d99be00f5
commit
2d47805431
4 changed files with 83 additions and 42 deletions
|
|
@ -3,9 +3,12 @@
|
||||||
## 1. Status
|
## 1. Status
|
||||||
|
|
||||||
```text
|
```text
|
||||||
GATE_2_REVIEW_01=IMPLEMENTED
|
|
||||||
GATE_2=IN_PROGRESS
|
GATE_2=IN_PROGRESS
|
||||||
DATABASE_SCHEMA_V1=DRAFT
|
DATABASE_SCHEMA_V2=IMPLEMENTED
|
||||||
|
SESSION_TYPE_PERSISTENCE=IMPLEMENTED
|
||||||
|
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
|
||||||
|
BODY_OBSERVATION_EDIT=IMPLEMENTED
|
||||||
|
TRAINLOG_FORMAT_V1=FROZEN
|
||||||
```
|
```
|
||||||
|
|
||||||
Gate 2 review #1 establishes the persistence foundation.
|
Gate 2 review #1 establishes the persistence foundation.
|
||||||
|
|
@ -26,17 +29,29 @@ Trainlog database schema version uses SQLite:
|
||||||
PRAGMA user_version;
|
PRAGMA user_version;
|
||||||
```
|
```
|
||||||
|
|
||||||
Initial schema:
|
Current schema:
|
||||||
|
|
||||||
```text
|
```text
|
||||||
DATABASE_SCHEMA_V1=1
|
DATABASE_SCHEMA_V2=2
|
||||||
```
|
```
|
||||||
|
|
||||||
A new database starts with `user_version = 0` and is initialized atomically to version 1.
|
A new database starts with `user_version = 0` and is initialized atomically to
|
||||||
|
the current schema.
|
||||||
|
|
||||||
|
The implemented historical path is:
|
||||||
|
|
||||||
|
```text
|
||||||
|
0 -> 2 fresh initialization
|
||||||
|
1 -> 2 transactional migration
|
||||||
|
```
|
||||||
|
|
||||||
|
Schema v2 adds local session classification while leaving the frozen Trainlog
|
||||||
|
JSON v1 exchange contract unchanged.
|
||||||
|
|
||||||
A database newer than the running binary understands is rejected.
|
A database newer than the running binary understands is rejected.
|
||||||
|
|
||||||
Historical migrations are not invented. They must be explicitly implemented and tested when a schema version 2 is introduced.
|
Every future schema change requires an explicit migration and dedicated
|
||||||
|
coverage; metadata-only version rewriting is not an accepted migration.
|
||||||
|
|
||||||
## 4. Connection rules
|
## 4. Connection rules
|
||||||
|
|
||||||
|
|
@ -83,9 +98,14 @@ id
|
||||||
session_id UNIQUE
|
session_id UNIQUE
|
||||||
started_at
|
started_at
|
||||||
ended_at nullable
|
ended_at nullable
|
||||||
|
session_type training | max_test
|
||||||
notes nullable
|
notes nullable
|
||||||
```
|
```
|
||||||
|
|
||||||
|
`session_type` is a local SQLite concern in schema v2. Existing schema-v1 rows
|
||||||
|
migrate to `training`; no historical workout is retroactively inferred to be a
|
||||||
|
max test.
|
||||||
|
|
||||||
Body data is stored separately so standalone body observations can use the same representation.
|
Body data is stored separately so standalone body observations can use the same representation.
|
||||||
|
|
||||||
### 5.3 `session_exercises`
|
### 5.3 `session_exercises`
|
||||||
|
|
@ -195,7 +215,15 @@ ROLLBACK
|
||||||
|
|
||||||
primitives.
|
primitives.
|
||||||
|
|
||||||
The future JSON import service must perform catalog reconciliation and all session inserts inside one transaction.
|
The JSON import service must perform catalog reconciliation and all session inserts inside one transaction.
|
||||||
|
|
||||||
|
Persisted session correction also uses an explicit transaction. Editing a
|
||||||
|
session replaces only its `session_exercises` / `performed_sets` children and
|
||||||
|
preserves the parent session row, stable `session_id`, timestamps,
|
||||||
|
`session_type`, session notes, and any linked body observation.
|
||||||
|
|
||||||
|
Body-observation correction preserves observation identity, timestamp, and
|
||||||
|
optional session link.
|
||||||
|
|
||||||
A hard conflict or validation failure leaves the database unchanged.
|
A hard conflict or validation failure leaves the database unchanged.
|
||||||
|
|
||||||
|
|
@ -207,20 +235,24 @@ Canonical persistent units remain:
|
||||||
- body circumference: centimeters;
|
- body circumference: centimeters;
|
||||||
- duration/rest: seconds.
|
- duration/rest: seconds.
|
||||||
|
|
||||||
## 9. Gate 2 review #1 boundary
|
## 9. Current Gate 2 persistence boundary
|
||||||
|
|
||||||
Review #1 intentionally does not implement:
|
Implemented persistence includes:
|
||||||
|
|
||||||
- JSON parsing;
|
- SQLite schema v2;
|
||||||
- Unicode exercise-name normalization;
|
- transactional schema migration v1 -> v2;
|
||||||
- local catalog reconciliation;
|
- Unicode-aware canonical exercise catalog support;
|
||||||
- full session insert APIs;
|
- complete session insertion;
|
||||||
- body-observation CRUD;
|
- session detail loading;
|
||||||
- ncurses.
|
- exact bounded editable-session loading;
|
||||||
|
- transactional replacement of session exercise/set children;
|
||||||
|
- body-observation creation, listing, exact lookup, and update;
|
||||||
|
- stable local identifiers for exercises, sessions, and body observations.
|
||||||
|
|
||||||
Those belong to subsequent Gate 2 work.
|
The database remains independent from ncurses rendering.
|
||||||
|
|
||||||
This split keeps the first compiled C change small enough to review thoroughly.
|
The frozen Trainlog JSON v1 format remains a separate compatibility boundary
|
||||||
|
and is not version-coupled to SQLite schema v2.
|
||||||
|
|
||||||
## 10. Validation
|
## 10. Validation
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -4,7 +4,7 @@
|
||||||
|
|
||||||
```text
|
```text
|
||||||
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
|
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
|
||||||
SESSION_EDIT_TUI=NEXT
|
SESSION_EDIT_TUI=IMPLEMENTED
|
||||||
TRAINLOG_FORMAT_V1=FROZEN
|
TRAINLOG_FORMAT_V1=FROZEN
|
||||||
DATABASE_SCHEMA_V2=UNCHANGED
|
DATABASE_SCHEMA_V2=UNCHANGED
|
||||||
```
|
```
|
||||||
|
|
@ -31,3 +31,13 @@ exercise/set values in bounded caller-owned buffers. It refuses insufficient
|
||||||
capacity instead of silently truncating editable data.
|
capacity instead of silently truncating editable data.
|
||||||
|
|
||||||
No schema migration and no JSON v1 change are required.
|
No schema migration and no JSON v1 change are required.
|
||||||
|
|
||||||
|
## TUI integration
|
||||||
|
|
||||||
|
The persistence foundation is now used by the ncurses editor.
|
||||||
|
|
||||||
|
A persisted workout can be reopened from history or session detail, corrected,
|
||||||
|
and saved without deleting/recreating the parent `sessions` row.
|
||||||
|
|
||||||
|
Draft editing and persisted editing share the same bounded exercise/set model.
|
||||||
|
Cancelling with Escape leaves the stored workout unchanged.
|
||||||
|
|
|
||||||
|
|
@ -35,11 +35,11 @@ Current TUI capabilities:
|
||||||
|
|
||||||
Current remaining Gate 2 direction:
|
Current remaining Gate 2 direction:
|
||||||
|
|
||||||
1. finish the current visual/navigation checkpoint;
|
1. detect Android over USB/ADB;
|
||||||
2. validate persisted editing on the real database;
|
2. build the minimal Android recorder;
|
||||||
3. detect Android over USB/ADB;
|
3. transfer/export one frozen Trainlog JSON v1 document over USB;
|
||||||
4. build the minimal Android recorder;
|
4. import it transactionally into the canonical SQLite store;
|
||||||
5. exercise frozen JSON v1 import/export end to end.
|
5. validate the complete Android -> JSON -> TUI -> SQLite path.
|
||||||
|
|
||||||
Measured-max semantics remain a later independent analytics contract.
|
Measured-max semantics remain a later independent analytics contract.
|
||||||
|
|
||||||
|
|
@ -122,8 +122,10 @@ DASHBOARD_12_MONTHS=IMPLEMENTED
|
||||||
|
|
||||||
```text
|
```text
|
||||||
TUI_EXERCISE_PERFORMANCE=IMPLEMENTED
|
TUI_EXERCISE_PERFORMANCE=IMPLEMENTED
|
||||||
MEASURED_MAX_TRACKING=NEXT
|
TUI_SESSION_EDIT=IMPLEMENTED
|
||||||
PREVIOUS_SESSION_DEFAULTS=AFTER
|
TUI_BODY_OBSERVATION_EDIT=IMPLEMENTED
|
||||||
|
ANDROID_USB_DETECTION=NEXT
|
||||||
|
MEASURED_MAX_TRACKING=LATER
|
||||||
```
|
```
|
||||||
|
|
||||||
## Session type / measured max foundation
|
## Session type / measured max foundation
|
||||||
|
|
@ -149,14 +151,17 @@ classified as a max test.
|
||||||
|
|
||||||
```text
|
```text
|
||||||
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
|
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
|
||||||
SESSION_EDIT_TUI=NEXT
|
SESSION_EDIT_TUI=IMPLEMENTED
|
||||||
BODY_OBSERVATION_EDIT=AFTER
|
BODY_OBSERVATION_EDIT=IMPLEMENTED
|
||||||
USB_PHONE_DETECTION=AFTER_EDITING
|
USB_PHONE_DETECTION=NEXT
|
||||||
```
|
```
|
||||||
|
|
||||||
Recorded session exercise/set correction uses atomic replacement of child rows
|
Recorded session exercise/set correction uses atomic replacement of child rows
|
||||||
while preserving the parent session row and linked body observations.
|
while preserving the parent session row and linked body observations.
|
||||||
|
|
||||||
|
The TUI exposes correction both while reviewing an in-progress draft and after
|
||||||
|
persistence. Escape cancels without committing partial edits.
|
||||||
|
|
||||||
## Body observation record workflow
|
## Body observation record workflow
|
||||||
|
|
||||||
```text
|
```text
|
||||||
|
|
|
||||||
22
docs/tui.md
22
docs/tui.md
|
|
@ -392,8 +392,8 @@ are not required for the Android transport milestone.
|
||||||
<!-- TRAINLOG_GLOBAL_BODY_GRAPH_NEXT -->
|
<!-- TRAINLOG_GLOBAL_BODY_GRAPH_NEXT -->
|
||||||
## 21. Global body evolution graph — implemented
|
## 21. Global body evolution graph — implemented
|
||||||
|
|
||||||
`F4 Corps` keeps its current per-metric graph and gains a global normalized
|
`F4 Corps` provides a record-oriented observation history plus a global
|
||||||
overlay view.
|
normalized overlay view.
|
||||||
|
|
||||||
The global graph must not overlay raw kilograms and centimeters directly.
|
The global graph must not overlay raw kilograms and centimeters directly.
|
||||||
|
|
||||||
|
|
@ -429,20 +429,14 @@ recorded value for each available metric.
|
||||||
|
|
||||||
## 22. Dashboard graph v2 — implemented
|
## 22. Dashboard graph v2 — implemented
|
||||||
|
|
||||||
The dashboard body-weight graph becomes a richer summary.
|
The dashboard body graph is implemented as a compact rolling 12-month
|
||||||
|
multi-metric summary.
|
||||||
|
|
||||||
It will show:
|
It shows available body metrics normalized to their first visible value in the
|
||||||
- current body weight;
|
window, while the legend preserves each latest raw value and percentage change.
|
||||||
- change from first recorded weight;
|
|
||||||
- change from previous recorded weight;
|
|
||||||
- minimum recorded weight;
|
|
||||||
- maximum recorded weight;
|
|
||||||
- recent weight graph;
|
|
||||||
- latest waist measurement when available;
|
|
||||||
- latest left/right asymmetry alert when meaningful.
|
|
||||||
|
|
||||||
The dashboard remains intentionally compact.
|
The dashboard remains intentionally compact. Detailed absolute observation
|
||||||
The complete multi-metric overlay belongs to `F4 Corps`.
|
history and the complete normalized overlay belong to `F4 Corps`.
|
||||||
|
|
||||||
## 23. Current implementation cursor
|
## 23. Current implementation cursor
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue