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.
Val Town är primär strukturerad datakälla och produktionsbackend.
Ansvar:
sessions, laps, performance_entries, workout_templates, coach_state och daily_recommendations,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.
Den vanliga projektchatten är den personliga coachen och äger träningsresonemanget.
Efter ett pass kan coachen:
intervals_sync.ts on demand för att hämta färsk Garmin/Intervals-data och därefter läsa senaste Val Town-sessionen,coach_state/current när samtalet ger en bestående ny lärdom,processed_at först när den faktiskt har hanterats/coachas klart.Exempel på bestående coach-state:
Kortlivade kommentarer om ett enskilt pass hör normalt hemma i sessions.notes, inte i coach_state.
En extern ChatGPT-task kör dagligen kl. 07:00 Europe/Stockholm.
Den ska:
sessions, oprocessade nya app-sessioner och performance_entries,workout_templates-katalogen,coach_state/current,daily_recommendations,model = 'chatgpt-coach',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.
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:
daily_recommendations; den genererar inte egna konkurrerande rekommendationer.coach_state är bryggan mellan kvalitativa coachdiskussioner och strukturerad data.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 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.
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.
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.