Coaching workflow

Det här dokumentet beskriver hur träningsappen ska användas tillsammans med ChatGPT-projektet Träning. Syftet är att undvika två parallella coacher eller två olika source-of-truth-system.

Roller

Val Town

Val Town är primär strukturerad datakälla och produktionsbackend.

Ansvar:

  • lagra sessions, laps, performance_entries, workout_templates, coach_state och daily_recommendations,
  • driva appens UI/API,
  • ta emot nya genomförda pass från workout mode,
  • visa den rekommendation som redan finns i daily_recommendations.

Val Town ska inte själv anropa en LLM för att coacha eller skapa dagens pass. Den gamla daily.ts-cronen är borttagen.

ChatGPT-projektchatten

Den vanliga projektchatten är den personliga coachen och äger träningsresonemanget.

Efter ett pass kan coachen:

  1. trigga intervals_sync.ts on demand för att hämta färsk Garmin/Intervals-data och därefter läsa senaste Val Town-sessionen,
  2. diskutera känsla, teknik, motivation och belastning med användaren,
  3. komplettera eller korrigera strukturerade data när det behövs,
  4. uppdatera coach_state/current när samtalet ger en bestående ny lärdom,
  5. markera sessionen processed_at först när den faktiskt har hanterats/coachas klart.

Exempel på bestående coach-state:

  • nuvarande träningsprioriteringar,
  • kalibrering av vikter/reps,
  • skills som ska byggas gradvis,
  • återkommande preferenser,
  • relevanta teknik-/belastningsbegränsningar.

Kortlivade kommentarer om ett enskilt pass hör normalt hemma i sessions.notes, inte i coach_state.

ChatGPT Scheduled Task

En extern ChatGPT-task kör dagligen kl. 07:00 Europe/Stockholm.

Den ska:

  1. läsa senaste sessions, oprocessade nya app-sessioner och performance_entries,
  2. läsa hela den aktiva workout_templates-katalogen,
  3. läsa coach_state/current,
  4. väga träningsmix, återhämtning och aktuella prioriteringar,
  5. skriva/upserta en rad för dagens datum i daily_recommendations,
  6. använda model = 'chatgpt-coach',
  7. ange based_on_session_id när en nylig session är central för beslutet.

Tasken får läsa oprocessade sessioner för att göra en bättre morgonrekommendation, men ska inte markera dem processed bara för att de lästs.

ChatGPT Work

Work används för större produkt- och kodförändringar: UI, workout mode, nya progressvyer, FIT-upload, större API-/databasrefaktorer osv.

Work ska innan större ändringar läsa README.md och detta dokument och bevara följande kontrakt:

  • Val Town är primär träningsdatakälla.
  • Projektchatten/ChatGPT äger coachinglogiken.
  • Appen presenterar daily_recommendations; den genererar inte egna konkurrerande rekommendationer.
  • coach_state är bryggan mellan kvalitativa coachdiskussioner och strukturerad data.
  • Google Sheets är legacy/import/backup om inget annat beslutas.

Normalflöde efter ett pass

Workout mode ↓ Val Town session ↓ Användaren diskuterar passet i projektchatten ↓ ChatGPT läser sessionen + eventuell träningsfil ↓ Session notes / performance_entries kompletteras vid behov ↓ Bestående lärdom → coach_state ↓ Nästa morgons Scheduled Task ↓ daily_recommendations ↓ Home i appen

Det är okej om användaren inte kommer till chatten efter varje pass. Morgontasken kan ändå använda den strukturerade sessionen. Coachdiskussionen lägger framför allt till den kvalitativa tolkningen.

coach_state/current

coach_state har ett JSON-fält value_json. Nuvarande konvention är ungefär:

{ "priorities": ["..."], "preferences": ["..."], "calibration": ["..."], "constraints": ["..."], "updated_by": "chatgpt_coach" }

Håll state kort, aktuellt och handlingsbart. Ersätt gamla slutsatser när de inte längre gäller i stället för att bara append:a historik.

daily_recommendations

Varje datum ska ha högst en aktuell rad. Rekommendationen består av:

  • first_choice_json – primärt pass,
  • alternatives_json – två rimliga alternativ,
  • rationale – kort motivering utifrån senaste data,
  • based_on_session_id – senaste relevanta passet när tillämpligt,
  • model – normalt chatgpt-coach,
  • generated_at.

Rekommendationen ska vara konkret nog att användaren kan börja träna direkt från Home-vyn. Undvik generisk coachtext och onödig repetition av rörelsemönster från de senaste passen.

Google Sheets

Tidigare historik och passbibliotek har importerats från Google Sheets. De används som legacy/referens och ska inte skrivas till automatiskt från appen eller Work utan ett nytt uttryckligt beslut.