|
1 | | -## Roadmap |
| 1 | +## Endurance Coach – Roadmap |
2 | 2 |
|
3 | | -### Bugs |
| 3 | +This roadmap is organized to make **coaching correctness and judgment** the spine of the system, with tooling and UI serving that goal—not competing with it. |
4 | 4 |
|
5 | | -- Fix incorrect training start dates. The Athlete part of the yaml has a eventDate but no trainingStartDate, check what is determining the training start date and fix it. |
| 5 | +--- |
| 6 | + |
| 7 | +## Phase 0: Coaching Correctness (Foundation) |
| 8 | + |
| 9 | +### Bugs / Invariants |
| 10 | + |
| 11 | +- **Fix incorrect training start dates** |
| 12 | + - Current issue: `Athlete` YAML contains `eventDate` but no explicit `trainingStartDate`. |
| 13 | + - Investigate and document what currently determines the training start date. |
| 14 | + - Make the inference rule explicit and deterministic. |
| 15 | + - Add regression tests covering: |
| 16 | + - Event-based plans |
| 17 | + - Non-event-based plans |
| 18 | + - Edge cases (late config edits, timezone boundaries) |
| 19 | + |
| 20 | +--- |
| 21 | + |
| 22 | +## Phase 1: Workout Template System (Expression Layer) |
6 | 23 |
|
7 | 24 | ### Epic: Workout Template Enhancements |
8 | 25 |
|
9 | | -- The CLI expander should throw an error if an unknown workout template name is used, and suggest that the agent can create a custom workout template or use a known template. |
10 | | -- Custom workout templates go in ~/.endurance-coach/workout-templates/ the render function should look there for templates first before looking in the built-in templates. |
11 | | -- The CLI expander should have a --list-templates option to list all known workout templates, both built-in and custom. |
12 | | -- The CLI expander should have a --show-template TEMPLATE_NAME option to display the contents of a specific workout template, whether built-in or custom. |
13 | | -- There are still certain template variables that are not being used in the Viewer project. |
| 26 | +Goal: Treat workout templates as **first-class, inspectable, and safe-to-extend artifacts**. |
| 27 | + |
| 28 | +- **Fail fast on unknown templates** |
| 29 | + - CLI expander throws a clear error if an unknown template name is used. |
| 30 | + - Error message should: |
| 31 | + - List closest matching known templates |
| 32 | + - Suggest creating a custom template if needed |
| 33 | + |
| 34 | +- **Custom template precedence & discovery** |
| 35 | + - Custom templates live in: |
| 36 | + - `~/.endurance-coach/workout-templates/` |
| 37 | + |
| 38 | + - Template resolution order: |
| 39 | + 1. User templates |
| 40 | + 2. Built-in templates |
| 41 | + |
| 42 | +- **Template inspectability & ergonomics** |
| 43 | + - Improve `templates` CLI command to clearly explain: |
| 44 | + - Template `id` |
| 45 | + - Template source (built-in vs user) |
| 46 | + |
| 47 | + - Add: |
| 48 | + - `templates list` |
| 49 | + - `templates show <template-id>` |
| 50 | + |
| 51 | +- **Template validation** |
| 52 | + - Add command: |
| 53 | + - `templates validate --template <template-id>` |
| 54 | + |
| 55 | + - Validation behavior: |
| 56 | + - Checks user templates first, then built-ins |
| 57 | + - Validates schema, required variables, and unsupported fields |
| 58 | + |
| 59 | +- **Template variable hygiene** |
| 60 | + - Audit all template variables |
| 61 | + - Identify variables not consumed by the Viewer project |
| 62 | + - Either: |
| 63 | + - Wire them through properly, or |
| 64 | + - Deprecate them explicitly |
| 65 | + |
| 66 | +--- |
| 67 | + |
| 68 | +## Phase 2: Reflection as Data (Core Coaching Differentiator) |
14 | 69 |
|
15 | 70 | ### Epic: Post-Workout Interview with Agent |
16 | 71 |
|
17 | | -- Skill enhancement: User can ask the agent to conduct a post-workout interview, agent starts by syncing workout (if strava enabled), else asks naturally for workout details. |
18 | | -- Agent asks a series of questions about the workout, including: |
| 72 | +Goal: Turn subjective athlete feedback into **structured coaching signal**, not just notes. |
| 73 | + |
| 74 | +- **Post-workout interview entry point** |
| 75 | + - User can explicitly ask the agent to conduct a post-workout interview |
| 76 | + - Agent behavior: |
| 77 | + - Sync workout automatically if Strava is enabled |
| 78 | + - Otherwise, naturally prompt for workout details |
| 79 | + |
| 80 | +- **Interview flow (baseline questions)** |
19 | 81 | - How did the workout feel overall? |
20 | | - - Were there any specific challenges or highlights during the workout? |
21 | | - - Did you stick to the planned workout structure? |
22 | | - - How was your energy and hydration levels? |
23 | | - - Any areas for improvement or adjustments for future workouts? |
24 | | -- If something is inferrable from the workout data (e.g., pace, heart rate), the agent should incorporate that into the questions or feedback. |
25 | | -- After the interview, the agent summarizes the key points, and saves them to the coach.db ~/.endurance-coach/coach.db associated with that workout. |
26 | | -- ^ this actually requires a db schema update to the coach.db, we should handle it with db increments for backwards compatibility. |
27 | | -- Store interview data in a separate table with a foreign key to the workout id, enabling support for multiple interviews per workout. |
28 | | -- Optionally, the web UI can remind the user to do a post-workout interview when they mark a workout as completed. |
29 | | -- **Stretch Goal**: Enable in-app interview chat within the web UI by having the CLI launch a local web server for the interview session, allowing the user to conduct the interview using the same agent framework they're configured with. This could potentially spin off into a separate epic to avoid scope creep. |
| 82 | + - What were the key challenges or highlights? |
| 83 | + - Did you stick to the planned structure? |
| 84 | + - How were energy, hydration, and mental focus? |
| 85 | + - What would you change or improve next time? |
| 86 | + |
| 87 | +- **Data-aware questioning** |
| 88 | + - Agent incorporates inferred signals from workout data: |
| 89 | + - Pace vs plan |
| 90 | + - Heart rate trends |
| 91 | + - Duration and completion fidelity |
| 92 | + |
| 93 | + - Questions and follow-ups should adapt based on these signals |
| 94 | + |
| 95 | +- **Coaching judgment (not just summarization)** |
| 96 | + - Persist two distinct outputs: |
| 97 | + 1. **Athlete Reflection Summary** (what the user said) |
| 98 | + 2. **Coach Notes** (agent’s opinionated assessment) |
| 99 | + |
| 100 | + - Coach Notes may: |
| 101 | + - Challenge perceived effort vs objective data |
| 102 | + - Flag fatigue, overreaching, or execution issues |
| 103 | + |
| 104 | +- **Persistence & schema evolution** |
| 105 | + - Store interviews in a dedicated table |
| 106 | + - Foreign key → workout ID |
| 107 | + - Support multiple interviews per workout |
| 108 | + |
| 109 | + - Introduce explicit DB schema versioning |
| 110 | + - Forward-only, idempotent migrations |
| 111 | + - Backwards compatibility guaranteed |
| 112 | + |
| 113 | +- **Optional UX support** |
| 114 | + - Web UI reminder when a workout is marked complete |
| 115 | + - Reminder should be non-blocking and skippable |
| 116 | + |
| 117 | +- **Stretch Goal (intentionally scoped)** |
| 118 | + - In-app interview chat via local web server |
| 119 | + - CLI launches a temporary local UI for the interview |
| 120 | + - Uses the same agent framework and configuration |
| 121 | + - If complexity grows, split into a separate epic |
| 122 | + |
| 123 | +--- |
| 124 | + |
| 125 | +## Phase 3: Intelligence Compounding (Future-Facing) |
| 126 | + |
| 127 | +_(Not implementation-heavy yet, but directionally important)_ |
| 128 | + |
| 129 | +- Cross-workout pattern detection: |
| 130 | + - Repeated perception vs data mismatches |
| 131 | + - Accumulating fatigue signals |
| 132 | + |
| 133 | +- Agent-generated flags: |
| 134 | + - “Effort trending higher than expected” |
| 135 | + - “Execution consistency improving / degrading” |
| 136 | + |
| 137 | +- Use interview insights to influence future workout recommendations |
| 138 | + |
| 139 | +--- |
| 140 | + |
| 141 | +## Phase 4: Web UI Enhancements (Amplify Insight, Not Distract) |
30 | 142 |
|
31 | 143 | ### Epic: Web UI Enhancements |
32 | 144 |
|
33 | | -- When user opens a workout card, show floating arrow buttons to the left and right of the card to navigate to previous/next workout without going back to the calendar view. |
34 | | -- Expanded Side bar to view the side bar content without needing to scroll. |
| 145 | +Goal: Reduce friction **only where it surfaces coaching insight**. |
| 146 | + |
| 147 | +- **Workout navigation ergonomics** |
| 148 | + - Floating left/right arrows on workout card |
| 149 | + - Navigate to previous/next workout without returning to calendar |
| 150 | + |
| 151 | +- **Sidebar usability** |
| 152 | + - Expand sidebar to view full content without scrolling |
| 153 | + |
| 154 | +> UI work should not precede coaching intelligence. It should surface and reinforce it. |
| 155 | +
|
| 156 | +--- |
| 157 | + |
| 158 | +## Guiding Principles |
| 159 | + |
| 160 | +- Correctness before cleverness |
| 161 | +- Judgment before conversation |
| 162 | +- Data + perception > either alone |
| 163 | +- UI exists to amplify insight, not replace it |
0 commit comments