204 lines
9.2 KiB
Markdown
204 lines
9.2 KiB
Markdown
# Roadmap
|
|
|
|
This document owns future work. The implemented baseline is summarized in
|
|
[current_state.md](current_state.md); completed narratives and evidence belong
|
|
in [reviews](reviews/) and [CHANGELOG.md](../CHANGELOG.md).
|
|
|
|
## Product boundary
|
|
|
|
```text
|
|
Trainlog Core owns business truth and canonical desktop persistence.
|
|
The TUI administers, inspects, maintains, and imports/exports.
|
|
The local Web analyzes, visualizes, and prepares programs/sessions.
|
|
Android executes in the field, captures actual work/feedback, and returns data.
|
|
```
|
|
|
|
Future work must preserve the frozen Trainlog JSON V1 contract, stable
|
|
identities, actual-versus-planned separation, direct MTP transport, and the
|
|
distinction between measured values and estimates.
|
|
|
|
## Current baseline
|
|
|
|
Desktop schema v19, Android schema v18, Notcurses, direct
|
|
`Documents/Trainlog` storage, mobile export V3, Training Knowledge V1, Body
|
|
Zones V1, Training Feedback V1/V2, STATS V1, and Session Generator V1 are
|
|
implemented. Session Generator V1 is hidden pending V2. AI session-draft
|
|
exchange and APP_SHELL_V1 retain their explicit manual validation/review gates.
|
|
`TRAINLOG_WEB_V1=CONTRACT_FROZEN / IMPLEMENTATION_STARTED`; its local-only
|
|
CLI/HTTP infrastructure, embedded frontend shell and the frozen Dashboard data
|
|
contract, frozen interactive grid, versioned layout persistence and factual
|
|
tile rendering exist. The Dashboard's bounded progression and BODY ZONES
|
|
visualizations are implemented; the other four Web routes remain placeholders.
|
|
|
|
## Current cursor
|
|
|
|
```text
|
|
CURRENT_OPERATIONAL_CURSOR=TRAINLOG_SYNC_CAUSAL_DELETE_V1
|
|
```
|
|
|
|
`TRAINLOG_SYNC_GAP_CONTRACT_V1=CONTRACT_FROZEN / IMPLEMENTATION_NOT_STARTED`
|
|
defines the complete-sync target and its bounded dependency order.
|
|
`TRAINLOG_SYNC_TEST_ENV_V1=PASS/FROZEN` supplies the reproducible isolated
|
|
desktop/Android validation entry point, JDK 17 gate and private JVM/XDG paths.
|
|
`TRAINLOG_SYNC_CHARACTERIZATION_V1=PASS/FROZEN` reuses and completes the
|
|
current-behavior evidence for cross-implementation V3 exchange, identities,
|
|
ordering, replay, partial publication, request/receipt processing and the real
|
|
lock. The next cursor is only `TRAINLOG_SYNC_DATA_LIFECYCLE_V1`; it is not
|
|
started and does not yet authorize a protocol, schema, endpoint or button
|
|
change.
|
|
[Contract details](design/sync_gap_contract_v1.md).
|
|
|
|
`WEB_FRONTEND_SHELL_V1=PASS/FROZEN`. `trainlog -w` serves the embedded React,
|
|
TypeScript and Vite shell with its five client routes, Catppuccin Mocha design
|
|
system, permanent Header/Footer, empty-data states and health status. The
|
|
Dashboard slices below are complete; this does not authorize implementation of
|
|
the remaining route placeholders.
|
|
`WEB_DASHBOARD_GRID_V1=PASS/FROZEN` adds the validated 12-column desktop grid,
|
|
explicit edit mode, drag/resize, keyboard alternative and derived responsive
|
|
projections without persisting layout state.
|
|
`WEB_DASHBOARD_LAYOUT_V1=PASS/FROZEN` persists only that canonical desktop
|
|
layout with atomic XDG storage, optimistic revisions and protected HTTP
|
|
mutations; responsive projections remain derived.
|
|
`WEB_DASHBOARD_TILES_V1=PASS/FROZEN` replaces every shell placeholder with a
|
|
size-adaptive component consuming only the frozen Dashboard snapshot.
|
|
`WEB_DASHBOARD_VISUALIZATIONS_V1=PASS/FROZEN` adds a factual time-series chart
|
|
for the Core-selected performance identity and an original accessible BODY
|
|
ZONES silhouette, without changing either domain's semantics.
|
|
`WEB_DASHBOARD_V1=PASS/FROZEN` closes the complete Dashboard after its final
|
|
functional, visual, responsive, accessibility, persistence and performance
|
|
review.
|
|
|
|
## TRAINLOG_WEB_V1 implementation gate
|
|
|
|
Implementation order is fixed as:
|
|
|
|
```text
|
|
WEB_DASHBOARD_CHARACTERIZATION_V1
|
|
-> WEB_DASHBOARD_CORE_READ_MODEL_V1 [PASS/FROZEN]
|
|
-> WEB_TUI_READ_MODEL_ADOPTION_V1 [PASS/FROZEN]
|
|
-> WEB_CLI_HTTP_INFRASTRUCTURE_V1 [PASS/FROZEN]
|
|
-> WEB_FRONTEND_SHELL_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_V1 [PASS/FROZEN]
|
|
```
|
|
|
|
The Web must not start with React. Characterization proves current behavior;
|
|
Core extraction establishes one business implementation; TUI adoption proves
|
|
reuse; only then may `trainlog -w`, the loopback HTTP adapter, embedded assets,
|
|
and browser UI be introduced. Initial API delivery is read-only. Later program
|
|
and session writes require explicit transactional Core command services.
|
|
|
|
`TRAINLOG_WEB_V1` preserves `/api/v1/` as an independently versioned boundary,
|
|
the `127.0.0.1:8080` default, explicit `--port`, no silent port fallback, a
|
|
single serialized Core/SQLite owner, build-only Node/npm, and no change to
|
|
business SQLite or frozen exchange formats. Dashboard Activité and Progression
|
|
semantics are now frozen by `WEB_DASHBOARD_DATA_CONTRACT_V1`; future rendering
|
|
must consume them without reconstructing or redefining their mathematics.
|
|
|
|
`WEB_DASHBOARD_V1` advances through independently reviewable slices:
|
|
|
|
```text
|
|
WEB_DASHBOARD_DATA_CONTRACT_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_GRID_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_LAYOUT_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_TILES_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_VISUALIZATIONS_V1 [PASS/FROZEN]
|
|
-> WEB_DASHBOARD_V1_FINAL_REVIEW [PASS/FROZEN]
|
|
```
|
|
|
|
The completed slice order preserves Core ownership, keeps visual layout outside
|
|
business SQLite and frozen formats, and specifies Activity/Progression before
|
|
rendering those metrics. Later Dashboard evolution must preserve those frozen
|
|
boundaries.
|
|
|
|
`WEB_NEXT_MODULE_SELECTION_V1` remains a future Web documentary cursor. The current
|
|
roadmap does not yet establish a contract order between Analyse, Programmes,
|
|
Séances and Exercices. This cursor must inventory their existing Core services,
|
|
read/write boundaries and dependencies, then select one bounded module contract;
|
|
it does not authorize silently implementing a page.
|
|
|
|
## Next
|
|
|
|
### Complete synchronization implementation
|
|
|
|
The frozen contract orders future bounded lots as environment/test,
|
|
characterization, data/lifecycles, causal deletion, generation/consumption/ack,
|
|
orchestrator/report, Web API, then button/refresh. The environment/test and
|
|
characterization and data/lifecycle lots are complete. Enriched V4 history and
|
|
the separate execution-draft codec are implemented behind explicit entry
|
|
points, while active transport remains V3. Causal deletion,
|
|
generation/consumption acknowledgement, orchestration/reporting and Web sync
|
|
remain unimplemented.
|
|
`WEB_DASHBOARD_V1=PASS/FROZEN` remains closed and unchanged.
|
|
|
|
### Gym catalog V1
|
|
|
|
Build an inventory from the equipment actually available in the user's gym.
|
|
Keep physical equipment, exercises, movement patterns, muscles, and BODY ZONES
|
|
distinct. One photographed machine may support several exercises. Record model
|
|
or manufacturer only when evidence identifies it.
|
|
|
|
### Exercise metadata V1
|
|
|
|
After the gym inventory is normalized, design any remaining structured metadata
|
|
such as movement family and laterality. Reuse existing equipment and BODY ZONES
|
|
identities; do not encode semantics in display names or notes.
|
|
|
|
### Session Generator V2
|
|
|
|
Replace the hidden V1 product surface with duration-aware construction that can
|
|
represent warm-up, ramp-up, main work, cool-down, transitions, setup time, and
|
|
candidate scarcity without claiming unsupported physiological precision.
|
|
|
|
### Session templates V1
|
|
|
|
Offer editable conveniences built on the real catalogue and planning model.
|
|
Templates are not rigid prescriptions and never become performed work before
|
|
normal capture.
|
|
|
|
## Later
|
|
|
|
- evolve training analytics only where sufficient real history supports the
|
|
metric, without aggregating incomparable loads;
|
|
- add body baseline and trend comparisons while keeping direct measurements
|
|
distinct from estimates;
|
|
- add conservative, editable progression suggestions with correct external-load
|
|
and assistance interpretation;
|
|
- support explicit user objectives without mandatory gamification;
|
|
- add user-controlled dated backup and complete/period-limited exports.
|
|
|
|
## Canonical order
|
|
|
|
```text
|
|
WEB_DASHBOARD_CHARACTERIZATION_V1
|
|
-> WEB_DASHBOARD_CORE_READ_MODEL_V1
|
|
-> WEB_TUI_READ_MODEL_ADOPTION_V1
|
|
-> TRAINLOG_WEB_V1
|
|
-> REAL_DATA_BASELINE_V1
|
|
-> GYM_CATALOG_V1
|
|
-> EXERCISE_METADATA_V1
|
|
-> SESSION_GENERATOR_V2
|
|
-> SESSION_TEMPLATES_V1
|
|
-> ANALYTICS_EVOLUTION
|
|
-> BODY_ANALYTICS_V2
|
|
-> PROGRESSION_ASSIST_V1
|
|
-> OBJECTIVES_V1
|
|
-> BACKUP_EXPORT_V1
|
|
```
|
|
|
|
## Outstanding validation gates
|
|
|
|
- `APP_SHELL_V1=IMPLEMENTED_AWAITING_VISUAL_REVIEW_2`: complete the recorded
|
|
human visual/accessibility matrix without redefining product semantics.
|
|
- `TRAINLOG_AI_SESSION_DRAFT_V1=VALIDATION_PENDING`: complete one real Drive
|
|
plus Android-triggered bidirectional synchronization smoke test.
|
|
|
|
## Permanent constraints
|
|
|
|
Do not regress to SQLite-file synchronization, a mandatory mounted Android
|
|
filesystem, exercise-name identity heuristics, fake sets for continuous work,
|
|
synthetic uniform actuals, ordinary training promoted to measured MAX,
|
|
assistance interpreted as external load, or estimates presented as direct
|
|
measurements. Incompatible exchange semantics require a new version.
|
|
Web UI configuration remains outside training data, scientific/AI exports,
|
|
session synchronization, and business SQLite. Browser, React, TUI, and Android
|
|
must not query desktop tables or duplicate Core calculations.
|