longevity: grafico nel tempo per ogni test #14
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
COSA: grafico dell'andamento nel tempo per ogni singolo test (valore per data, punti uniti da linea), visibile al trainer e al cliente.
PERCHÉ: Nicola (call 27/09, min 13-18 e 56): «loro vedono la linea che va su e sono felici»; riferimento: grafici di VALD. Priorità ai test di forza, poi equilibrio e mobilità. Anche l'andamento degli assi (es. Recupero & Sistema Nervoso) nel tempo. Nessun confronto con altri clienti (percentili esclusi, #4).
OGGI: lib/longevity/progressione.ts e pages/longevity/progressione.astro mostrano solo assi, macro e Fitness Age congelati per sessione, non i valori dei test.
DIPENDE DA: modulo check-up sulla Scheda Rapida (test per lato e test alternativi). Quando il test cambia (es. rematore → trazioni) il grafico lo segna e non unisce valori non confrontabili.
FATTO QUANDO: per ogni test con almeno una misura il cliente vede il suo grafico; cambio test segnato; test su serie con buchi e cambio test.
FONTE: call Adriano–Nicola 27/09/2026, trascrizione in wasabi:adp-work/AI-OS/projects/azienda/clienti/Insanity_Lab/Longevity_Project/docs/2026-09-27_call/
🔵 daitarn — preso in carico 2026-09-28T06:30:23Z
ramo:
lavoro/daitarn· capacità: build-windows, gpuANALISI (passo 1, Opus) — gitea:Adriano/InsanityLab-web#14
RAMO: lavoro/daitarn a
680224e(= origin/main, #13 e #15 in produzione). Cartella: apps/platforms.OGGI: src/lib/longevity/progressione.ts + src/components/longevity/Progressione.tsx (recharts, già dipendenza) mostrano assi, macro e Fitness Age congelati per sessione su /longevity/progressione, solo con ≥2 sessioni. L'andamento degli assi chiesto da Nicola quindi c'è già: questa issue aggiunge i VALORI DEI TEST.
DECISIONI (nostre, da confermare con Nicola in gitea:Adriano/InsanityLab-web#18)
a. Un grafico per TEST (non per capacità): unità diverse (kg, ripetizioni, secondi) non stanno sullo stesso asse. I grafici stanno sotto la sezione della capacità (Presa, Spinta, …). Quando il cliente cambia test nella stessa sezione, la sezione lo scrive: «Dal 12/03/2027: Trazioni (prima: Rematore 5RM)». Così valori non confrontabili non sono mai uniti da una linea.
b. Destro e sinistro: due linee nello stesso grafico (handgrip, back scratch, flamingo aperti, flamingo chiusi).
c. Test 5RM: si disegna il carico; le ripetizioni vanno nel tooltip.
d. Asse X temporale vero (date proporzionali): un buco fra due check-up si vede come distanza, la linea unisce i punti presenti.
e. Solo misure valide: fuori range non confermati esclusi (stessa regola di misureValideAlla in motore/index.ts:165).
f. Il cliente vede i test della scheda; il trainer vede in più FC a riposo, dettaglio MUTT (FC max, 1', 2', FC per step) e i vecchi test dismessi. Il cliente vede anche i dismessi (sono sua storia): handgrip unico, back scratch unico, flamingo unico come test a sé nella loro sezione. f_hrr_1min_bpm solo trainer.
g. Il cliente vede i grafici dei test da 1 misura in su (un punto solo è un grafico valido); la condizione «≥2 sessioni» resta solo per il grafico degli assi.
CATALOGO (in un modulo nuovo, NON in gestionale.ts, perché le pagine cliente non devono importare moduli del gestionale):
Pre-test: peso [f_peso_kg]; FC riposo [f_fc_riposo_bpm] solo trainer.
Mobilità: back scratch [f_back_scratch_dx_cm «destro», f_back_scratch_sx_cm «sinistro»]; back scratch (storico) [f_back_scratch_cm]; sit and reach [f_sit_reach_cm].
Equilibrio: flamingo occhi aperti [oa_dx, oa_sx]; flamingo occhi chiusi [oc_dx, oc_sx]; flamingo (storico) [f_flamingo_cadute].
Presa: handgrip [dx, sx]; handgrip (storico) [f_handgrip_kg].
Core: plank ginocchia [f_plank_ginocchia_sec]; plank [f_plank_sec].
Spinta: panca manubri [f_panca_man_carico_kg, tooltip f_panca_man_rip]; push-up [f_pushup_rip]; panca bilanciere [f_panca_bil_carico_kg, tooltip f_panca_bil_rip].
Trazione: rematore [f_row_carico_kg, tooltip f_row_rip]; trazioni [f_trazioni_rip].
Arti inferiori: sit-to-stand [f_sit_to_stand_rip]; squat [f_squat_carico_kg, tooltip f_squat_rip].
Aerobico: 6MWT [f_6mwt_m]; Queen's [f_step_hr_recovery]; 2 km [f_walk2km_min, tooltip f_walk2km_fc_bpm]; MUTT [f_mutt_vam]; MUTT FC solo trainer [f_mutt_fc_max_bpm, f_mutt_fc_1min_bpm, f_mutt_fc_2min_bpm] e FC per step solo trainer (8 linee in un grafico o elenco: scelta dell'agente); MILFIT [f_milfit_watt]; VO2max misurato [f_vo2max]; recupero cardiaco storico [f_hrr_1min_bpm] solo trainer.
Strumenti: massa grassa, massa muscolare, WHR, HRV, spalla outreach/buckling (una linea ciascuno o outreach+buckling insieme), pressione sist/diast (insieme), SpO2.
Etichette ed unità dal registro (registro_test), non ripetute nel catalogo.
UNITÀ A — dati (un agente)
andamentoTest(db, clientCode, { trainer: boolean })→ sezioni in ordine, ciascuna con i grafici che hanno ≥1 misura valida: { titolo, unita, linee: [{ test_id, etichetta, punti: [{ data, sessioneId, valore, extra? }] }] } piùcambi: [{ data, da, a }] calcolati per sezione dall'ordine cronologico del primo test usato in ogni sessione (un cambio c'è quando la sessione successiva con misure della sezione usa un grafico diverso dalla precedente). Un test_id f_* con misure ma assente dal catalogo finisce in una sezione «Altre misure», mai perso. Punti in ordine data ASC, id sessione ASC; più misure dello stesso test nella stessa sessione → la riga con id più alto (stesso spareggio del motore).TEST A (tests/longevity/andamento.test.ts, DB in memoria come gli altri): serie con buchi; dx/sx due linee; tooltip rip del 5RM; cambio rematore→trazioni segnalato una volta con la data giusta, e ritorno trazioni→rematore segnalato di nuovo; fuori range non confermato escluso, confermato incluso; cliente non vede i soloTrainer, trainer sì; test fuori catalogo in «Altre misure»; cliente senza misure → nessuna sezione.
UNITÀ B — interfaccia (secondo agente, dopo A)
2. Nuovo src/components/longevity/AndamentoTest.tsx (recharts, stile di Progressione.tsx): per sezione il titolo, le righe di cambio test, e un piccolo LineChart per grafico (asse X temporale con date in formato italiano, tooltip con valore, unità ed extra). Leggibile su telefono e tablet.
3. src/pages/longevity/progressione.astro (cliente): sezione «I tuoi test» con andamentoTest(..., { trainer: false }), visibile anche con meno di 2 sessioni; il grafico degli assi resta com'è.
4. Nuova pagina src/pages/longevity/gestionale/cliente/[code]/andamento.astro (trainer): andamentoTest(..., { trainer: true }) + il grafico degli assi (progressioneDi) se ≥2 punti; link «Andamento» nella scheda cliente [code].astro accanto a «Nuovo check-up».
Test B: le pagine cliente non importano gestionale.ts, giornale.ts, consulenza.ts (i test esistenti lo coprono, aggiungere andamento se serve il contrario: la pagina cliente DEVE usare andamento.ts con trainer:false — test sul testo del file); pagine.test.ts aggiornato per la pagina nuova del gestionale.
NON TOCCARE: motore, registro, score e progressione degli assi (progressione.ts resta com'è), modulo check-up, anagrafica/identity (tests/longevity/anagrafica.test.ts: niente parole identity e longevity insieme nei file nuovi), niente (referto.test.ts). PROVA: in apps/platforms npx vitest run (baseline Windows: 336 verdi, 4 rossi di piattaforma — campus-lib resolveAsset; anagrafica.test.ts separatori \; EPERM in gestionale.test.ts e questionario-pagina.test.ts; nessun rosso nuovo), npx tsc --noEmit, npm run build. DEPLOY: nessuna modifica allo schema.
ESITO: fermato (pausa di Adriano, PC spento ~1 h)
RIF: gitea:Adriano/InsanityLab-web#14
COSA: unità A interrotta in fase di lettura, nessun codice scritto né committato. Ramo lavoro/daitarn fermo a
680224e.PROSSIMO: alla ripresa rilanciare l'unità A dall'analisi (commento ANALISI), poi unità B.
🔵 daitarn — rilasciata 2026-09-28T06:32:48Z
ESITO: richiesta — passaggio a goldrake (Adriano, 28/09/2026: «glielo puoi dare alla vps?»)
RIF: gitea:Adriano/InsanityLab-web#14
COSA: eseguire l'analisi del commento ANALISI di questa issue (unità A dati, poi unità B interfaccia), coi tre passi Opus→Sonnet→Opus. Niente codice scritto finora: il ramo lavoro/daitarn è fermo a
680224e= origin/main.DOVE: python3 automations/rete/ramo.py apri --repo gitea:Adriano/InsanityLab-web → ~/lavoro/InsanityLab-web, ramo lavoro/goldrake da origin/main. App in apps/platforms (npm ci se manca node_modules).
PROVA: in apps/platforms npx vitest run (su Linux la baseline è tutta verde: 340 test, nessun rosso ammesso), npx tsc --noEmit, npm run build.
NON FARE: merge su main, deploy, docker compose, backup: il deploy lo autorizza Adriano. Non toccare /opt/docker/insanitylab-apps.
FINE: push di lavoro/goldrake, commento di controllo finale con i commit e le prove; lasciare l'issue APERTA con etichetta attesa:adriano (manca il suo via per merge e deploy). Avviso su Telegram ad Adriano con esito e commit.
🤖 goldrake — preso in carico 2026-09-28T06:33:14Z
ramo:
lavoro/goldrake· capacità: docker, pubblica, sempre-accesa, systemdESITO: fatto (codice) — in attesa del via di Adriano per merge e deploy
RIF: gitea:Adriano/InsanityLab-web#14, ramo lavoro/goldrake (pushato), worktree goldrake ~/lavoro/InsanityLab-web
COMMIT:
67ad970unità A dati ·a883a60cambi solo fra alternative ·1eb69e0unità B interfaccia ·cbaac91linea unisce i punti presenti (base680224e= origin/main)FILE: apps/platforms/src/lib/longevity/andamento.ts (nuovo: catalogo + andamentoTest) · src/components/longevity/AndamentoTest.tsx (nuovo) · src/pages/longevity/progressione.astro («I tuoi test», trainer:false, da 1 misura) · src/pages/longevity/gestionale/cliente/[code]/andamento.astro (nuovo, trainer:true + assi se ≥2) · [code].astro (link «Andamento») · styles/longevity.css · tests/longevity/andamento.test.ts, pagine.test.ts
CONTROLLO OPUS (passo 3), due correzioni fatte fare a Sonnet:
SCELTE DELL'AGENTE (aperte nell'analisi): MUTT FC per step = un grafico a 8 linee; outreach+buckling e sistolica+diastolica = un grafico ciascuno a 2 linee; «Altre misure» visibile anche al cliente; tooltip extra con etichetta/unità dal registro (LineaAndamento.extra); tick asse gg/mm/aa, cambi e tooltip gg/mm/aaaa.
PROVA (goldrake, apps/platforms): npx vitest run → 357 passed (baseline 340, +17) · npx tsc --noEmit → pulito · npm run build → Complete.
NON FATTO: merge su main, deploy (nessuna modifica allo schema). Nessuna verifica visiva nel browser.
PROSSIMO: Adriano guarda e dà il via → merge lavoro/goldrake su main + deploy dell'app.
🤖 goldrake — rilasciata 2026-09-28T07:00:09Z
Soluzione
ESITO: spostata
RIF: gitea:Adriano/InsanityLab-platforms#3
COSA: le piattaforme hanno un repo proprio dal 29/09/2026 (InsanityLab-web#20). Issue ricreata là con corpo, commenti ed etichette; il lavoro prosegue su InsanityLab-platforms#3. ⚠️ i riferimenti #N nel testo copiato puntano ancora a InsanityLab-web.