9.8 KiB
Roadmap
This file is the canonical product roadmap for Trainlog.
Historical implementation detail belongs in Git history and docs/reviews.
The published Trainlog JSON v1 compatibility boundary remains frozen unless a
future feature explicitly introduces a new version.
Completed foundation
GATE_0=PASS
GATE_1=PASS
GATE_2=PASS
TRAINLOG_FORMAT_V1=FROZEN
DESKTOP_SCHEMA_V11=PASS
ANDROID_LOCAL_DATABASE_V10=PASS
ANDROID_LOCAL_DATABASE_V11=PASS
SESSION_GENERATOR_V1=PASS
DIRECT_MTP_TRANSPORT=PASS
BIDIRECTIONAL_SYNC_V1=PASS
VARIABLE_REPETITION_SETS=PASS
MEASURED_MAX_V1=PASS
EXPLICIT_MAX_RESULTS_V1=PASS
MAX_TEST_RESUME_STABLE_ID=PASS
BODY_ANALYTICS_V1=PASS
EXERCISE_EDIT_V1=PASS
ANDROID_BANNER_PARITY_V1=PASS
BODY_ZONES_V1=PASS
BODY_ZONE_SYNC_V1=PASS
BODY_ZONES_ANDROID_DEVICE_VALIDATION=PASS
DESKTOP_TESTS=45/45 PASS (latest validated checkpoint)
TUI_NOTCURSES_V1=PASS
NCURSESW_REMOVED_FROM_ACTIVE_TUI=PASS
NOTCURSES_TRUECOLOR_THEME=PASS
The current product baseline includes:
- SQLite persistence and explicit migrations;
- usable Notcurses desktop TUI;
- native Android capture client;
- exercise catalog;
- canonical hierarchical body zones, primary/secondary relations and filters;
- profile-aware set and continuous activity;
- heterogeneous repetition sets;
- session history and editing;
- body measurements and body history;
- measured-max sessions and measured-max analysis;
- explicit max-weight capture without synthetic sets, with stable-ID continuation;
- desktop body analytics;
- direct USB/MTP transport;
- bidirectional Android/PC synchronization;
- safe V2 exercise-identity reconciliation with richer compatible profiles;
- supplied and custom equipment definitions with occurrence-level links;
- shared synchronization engine and
trainlog-syncd.
BODY_ZONES_V1 is complete infrastructure for session generation: one shared
manifest, desktop v11/Android v10 relations, Android/TUI edit and display,
descendant-aware filters, unclassified history and one explicit-conflict sync
companion. The implemented generator uses this infrastructure; custom zones are
still outside this checkpoint and proposed loads remain editable plans rather
than actual work.
TRAINING_KNOWLEDGE_V1=PASS is read-only infrastructure. Scientific review,
independent temporal review, final engineering review, repair verification, and
final executable validation passed. The temporal contract preserves source text
and exact C/Android chronological pagination; one bounded repair chain closed
the audit's stale-documentation, Android-loader, Meson-input, and role-only C
query findings.
It provides catalog-backed scientific lookup and runtime context composition
without prescriptions, schema changes or catalog seeding. The implemented
separate session generator consumes that boundary; multi-session programming is
still not a roadmap gate. See
Training knowledge system V1.
EXERCISE_EDIT_V1 is a completed capture correction: Android permits
stable-ID renames, protects referenced profiles, and reconciles same-ID display
metadata without duplicates. ANDROID_BANNER_PARITY_V1 is a presentation-only
completed checkpoint: all Android screens share the Notcurses-derived compact
header; it does not reorder the roadmap below.
Product boundary
ANDROID_SESSION_DRAFT_V1 is an implemented P0 capture-reliability correction:
one durable active draft, Home resume, explicit discard and atomic completion.
Host and device validation and the final tranche review pass. This repair
does not introduce planning/templates or reorder the product roadmap below.
The intended split remains:
ANDROID
= fast capture during real use
DESKTOP TUI
= planning
+ catalog management
+ history
+ analytics
+ long-term decision support
Android must not become the main analytics surface unless this boundary is explicitly revised later.
Operational cursor — real data baseline
The immediate priority is not another implementation block.
Trainlog now needs real measurements and real training sessions so later analytics are based on useful data rather than fixtures.
CURRENT_OPERATIONAL_CURSOR=REAL_DATA_BASELINE_V1
Expected baseline:
- first complete real body observation;
- first real training sessions;
- Android used for capture;
- Android -> PC synchronization after training;
- measured max recorded only through explicit
max_testresults; - no fictitious user data in the canonical databases.
Gate:
REAL_DATA_BASELINE_V1=PASS
Next feature — gym catalog v1
NEXT_FEATURE=GYM_CATALOG_V1
The catalog must be based on the equipment actually available in the user's gym rather than on a generic Internet exercise list.
The initial inventory will be built from a complete photo survey of the gym.
For each useful equipment item, record where applicable:
gym zone
equipment family
machine name
manufacturer/model if identifiable
useful duplicate count
supported exercise(s)
Trainlog recording profile
load semantics
primary body zone (BODY_ZONES_V1)
secondary body zones (BODY_ZONES_V1)
Important rule:
one photographed machine != one exercise
A single piece of equipment may support multiple exercises. Equipment and exercise identity must remain distinct concepts. The primary/secondary body-zone dimension is already implemented by Body Zones V1; gym inventory should link stable exercise identities to that model rather than inventing another free-text body-region field.
Gate:
GYM_CATALOG_V1=PASS
Exercise metadata v1
After the real gym inventory is normalized, enrich the exercise catalog with structured metadata needed by planning and analytics.
Remaining candidate metadata:
equipment
movement_family
laterality
The final schema must be designed before implementation. Do not encode these concepts into names or free-form notes as a substitute for a real model. Body-zone metadata is no longer future scope here; its frozen V1 taxonomy and direct relations must be reused.
Gate:
EXERCISE_METADATA_V1=PASS
Session generator v1
SESSION_GENERATOR_V1=PASS.
It provides
a bounded policy-driven generator in both UIs, then hands accepted nonempty
proposals to normal draft/editor flows where actual work is captured separately.
It does not create reusable templates, a planned-session sync product surface,
or a multi-session program. The one deep final audit found repairable gaps;
its bounded repairs, review, and final validation matrix passed.
Session templates v1
Templates are built from the real exercise catalog and planning model.
Candidate examples:
glutes + arms
back + shoulders
chest + arms
legs
full body
cardio
Templates are conveniences, not rigid training prescriptions.
Gate:
SESSION_TEMPLATES_V1=PASS
Training analytics v1
Implement only after enough real sessions exist to make the output meaningful.
Candidate views:
7 days
30 days
90 days
since baseline
Candidate metrics:
- training frequency;
- sets;
- repetitions;
- duration;
- external load;
- assistance;
- measured-max progression;
- useful volume metrics where semantically valid;
- progression by exercise.
Use the existing Body Zones V1 read surface to aggregate by canonical body zone and hierarchy when evaluating training balance. A separate movement-family taxonomy, if ever needed, must be versioned rather than inferred from names.
Gate:
TRAINING_ANALYTICS_V1=PASS
Body analytics v2
Implement after multiple real body observations exist.
Possible additions:
- baseline comparison;
- previous-observation comparison;
- 7/30/90-day trends;
- moving-average weight trend;
- waist trend;
- anthropometric estimate trend;
- left/right asymmetry trend;
- obvious measurement-outlier warnings.
Permanent semantic rule:
DIRECT_MEASUREMENT != ESTIMATE
Derived body-composition values remain explicitly labelled estimates.
Gate:
BODY_ANALYTICS_V2=PASS
Progression assist v1
Use accumulated history to produce conservative training suggestions.
Examples:
external load:
stable completed work
-> suggest a small load increase
assistance:
stable completed work
-> suggest a small assistance decrease
The system proposes. It does not silently change planned training.
Measured max and estimated performance must remain distinct concepts.
Gate:
PROGRESSION_ASSIST_V1=PASS
Objectives v1
Support explicit user-defined objectives such as:
body weight
waist circumference
plank duration
exercise load
repetitions
measured max
weekly training frequency
Display current value, target, remaining difference, and trend where the data supports it.
Avoid mandatory gamification.
Gate:
OBJECTIVES_V1=PASS
Backup and export v1
SQLite remains canonical.
Provide durable user-controlled export and backup:
SQLite
-> dated backup
-> complete JSON export
-> CSV export where useful
-> period-limited export
Gate:
BACKUP_EXPORT_V1=PASS
Canonical implementation order
REAL_DATA_BASELINE_V1
|
v
GYM_CATALOG_V1
|
v
EXERCISE_METADATA_V1
|
v
SESSION_PLANNER_V1
|
v
SESSION_TEMPLATES_V1
|
v
TRAINING_ANALYTICS_V1
|
v
BODY_ANALYTICS_V2
|
v
PROGRESSION_ASSIST_V1
|
v
OBJECTIVES_V1
|
v
BACKUP_EXPORT_V1
This order is canonical until explicitly revised.
Permanent constraints
Do not regress to:
SQLite file synchronization
mandatory mounted Android filesystem
exercise-name identity heuristics
fake performed sets for continuous activity
fake uniform targets for heterogeneous actual sets
ordinary training promoted to measured max
assistance interpreted as external load
body-composition estimates presented as direct measurements
incompatible changes to Trainlog JSON v1 without a new format version