trainlog/docs/reviews/session_edit_persistence.md

43 lines
1.3 KiB
Markdown

# Transaction-safe session editing
## Status
```text
SESSION_EDIT_PERSISTENCE=IMPLEMENTED
SESSION_EDIT_TUI=IMPLEMENTED
TRAINLOG_FORMAT_V1=FROZEN
DATABASE_SCHEMA_V2=UNCHANGED
```
This slice adds the persistence foundation required to correct a recorded
workout without deleting the session itself.
`trainlog_database_replace_session_exercises(...)` replaces the
`session_exercises` and `performed_sets` children inside one explicit
transaction.
The parent `sessions` row is never deleted. Therefore these remain stable:
- `session_id`;
- start/end timestamps;
- `session_type`;
- session notes;
- any `body_observations.session_row_id` link.
On any lookup, constraint or insertion error, the whole replacement rolls back.
`trainlog_database_load_session_editable(...)` exposes the exact persisted
exercise/set values in bounded caller-owned buffers. It refuses insufficient
capacity instead of silently truncating editable data.
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.