trainlog/docs/roadmap.md

5 KiB

Roadmap

Gate 0 — Project contract

Status: PASS

Gate 1 — Exchange format v1 freeze

Status: PASS

TRAINLOG_FORMAT_V1=FROZEN

Gate 2 — Persistence + usable TUI

Status: IN PROGRESS

FIRST_USABLE_TUI=PASS
TUI_V0_2_POLISH=IMPLEMENTED
GATE_2=IN_PROGRESS

Current TUI capabilities:

  • direct workout entry;
  • exercise catalog;
  • body tracking;
  • weight graph;
  • colored dashboard;
  • arrow/F-key navigation;
  • navigable history;
  • Unicode anti-duplicate exercise names.

Current remaining Gate 2 direction:

  1. detect Android over USB/ADB;
  2. build the minimal Android recorder;
  3. transfer/export one frozen Trainlog JSON v1 document over USB;
  4. import it transactionally into the canonical SQLite store;
  5. validate the complete Android -> JSON -> TUI -> SQLite path.

Measured-max semantics remain a later independent analytics contract.

TUI v0.2 checkpoint

Current state:

FIRST_USABLE_TUI=PASS
TUI_V0_2_POLISH=IMPLEMENTED
TUI_SESSION_DETAILS=IMPLEMENTED
TUI_DURATION_HUMAN_INPUT=IMPLEMENTED
TUI_BODY_METRIC_GRAPHS=IMPLEMENTED
GATE_2=IN_PROGRESS
TRAINLOG_FORMAT_V1=FROZEN

Completed before this checkpoint:

  • C17/Meson persistence core;
  • SQLite schema v1 foundation;
  • UUIDv4 generation;
  • Unicode catalog normalization;
  • direct workout recording;
  • direct body observation recording;
  • colored ncursesw dashboard;
  • keyboard navigation;
  • body-weight graph;
  • flat-series graph rendering;
  • navigable workout history;
  • full read-only session detail.

Next implementation slice:

  1. shared duration parser accepting seconds and minute-oriented syntax;
  2. shared human duration formatter;
  3. generic body-metric history query;
  4. F4 metric selector;
  5. graphs for weight and every body measurement;
  6. left/right asymmetry presentation.

No incompatible change to frozen Trainlog JSON v1 is required.

Next TUI visualization slice

Canonical state after the current checkpoint:

FIRST_USABLE_TUI=PASS
TUI_V0_2_POLISH=IMPLEMENTED
TUI_SESSION_DETAILS=IMPLEMENTED
TUI_DURATION_HUMAN_INPUT=IMPLEMENTED
TUI_BODY_METRIC_GRAPHS=IMPLEMENTED
TUI_GLOBAL_BODY_OVERLAY=IMPLEMENTED
DASHBOARD_GRAPH_ONLY=IMPLEMENTED
GATE_2=IN_PROGRESS
TRAINLOG_FORMAT_V1=FROZEN

Next deliverables:

  1. normalized global body graph in F4;
  2. color + symbol identity for every overlaid metric;
  3. global percent-change summary;
  4. richer home weight graph;
  5. previous-measurement delta on dashboard;
  6. dashboard min/max weight;
  7. latest waist summary when available;
  8. compact asymmetry warning when relevant.

No database schema migration is expected. No Trainlog JSON v1 change is expected.

DASHBOARD_12_MONTHS=IMPLEMENTED
TUI_EXERCISE_PERFORMANCE=IMPLEMENTED
TUI_SESSION_EDIT=IMPLEMENTED
TUI_BODY_OBSERVATION_EDIT=IMPLEMENTED
ANDROID_USB_DETECTION=NEXT
MEASURED_MAX_TRACKING=LATER

Session type / measured max foundation

DATABASE_SCHEMA_V2=IMPLEMENTED
SESSION_TYPE_PERSISTENCE=IMPLEMENTED
SESSION_TYPE_TUI=IMPLEMENTED
TUI_SESSION_EDIT=IMPLEMENTED
TUI_BODY_OBSERVATION_EDIT=IMPLEMENTED
TUI_PRIMARY_NAVIGATION=IMPLEMENTED
TUI_SECONDARY_VIEW_POLISH=IMPLEMENTED
ANDROID_USB_DETECTION=NEXT
MEASURED_MAX_TRACKING=LATER
TRAINLOG_FORMAT_V1=FROZEN

SQLite schema v2 adds sessions.session_type with training and max_test. Existing v1 rows migrate to training. No existing session is retroactively classified as a max test.

Editable session data

SESSION_EDIT_PERSISTENCE=IMPLEMENTED
SESSION_EDIT_TUI=IMPLEMENTED
BODY_OBSERVATION_EDIT=IMPLEMENTED
USB_PHONE_DETECTION=NEXT

Recorded session exercise/set correction uses atomic replacement of child rows 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_HISTORY_UI=IMPLEMENTED
BODY_OBSERVATION_EDIT=IMPLEMENTED
BODY_OBSERVATION_SCROLLBAR=IMPLEMENTED
USB_PHONE_DETECTION=NEXT

F4 Corps now uses newest-first observation records with detail/edit views instead of making individual metrics the primary navigation model.

Editability/navigation checkpoint

Completed:

  • local schema v2 migration with training / max_test;
  • session-type selection and persistence;
  • persisted session editing with stable parent identity;
  • body-observation history, detail, and editing;
  • Escape-safe prompt cancellation;
  • framed ASCII-banner primary and secondary views;
  • top Accueil / Séance / Historique / Exercices / Corps navigation;
  • Tab focus with yellow border-only focus indication;
  • direct exercise creation while building a session;
  • 12-month dashboard axis kept inside its frame.

Next implementation cursor:

ANDROID_USB_DETECTION=NEXT
ANDROID_MINIMAL_RECORDER=AFTER
JSON_V1_USB_IMPORT_EXPORT=AFTER