spec: cosa ha scoperto la costruzione del motore
This commit is contained in:
@@ -384,6 +384,60 @@ capita.
|
|||||||
confermata. L'HRV entra nel motore come passthrough, quindi senza quel canale
|
confermata. L'HRV entra nel motore come passthrough, quindi senza quel canale
|
||||||
va inserito a mano.
|
va inserito a mano.
|
||||||
|
|
||||||
|
## 12-bis. Cosa ha scoperto la costruzione del motore (22/08)
|
||||||
|
|
||||||
|
Il motore è stato costruito il 22/08 (ramo `feat/longevity`, 6 task, 308 test). Il porting
|
||||||
|
è fedele: eseguendo la funzione dimostrativa del cliente sui due motori, i sette assi, i tre
|
||||||
|
macro-score e la Fitness Age **combaciano numero per numero**.
|
||||||
|
|
||||||
|
### Due divergenze deliberate dall'oracolo, entrambe volute
|
||||||
|
|
||||||
|
1. **Un punteggio insufficiente non espone un valore.** Nell'originale la funzione di
|
||||||
|
aggregazione restituisce il numero anche quando dichiara l'elemento insufficiente; qui il
|
||||||
|
tipo non ha proprio il campo. È ciò che rende impossibile mostrare un numero dove i dati
|
||||||
|
non bastano.
|
||||||
|
2. **La Fitness Age esclude gli assi insufficienti**, mentre l'oracolo li include comunque.
|
||||||
|
⚠️ **Cambia il numero, e parecchio**: sullo stesso profilo parziale, 25,0 contro 34,8 —
|
||||||
|
quasi dieci anni. Chi confrontasse il nostro referto con il Python del cliente su un
|
||||||
|
profilo incompleto concluderebbe che il porting è rotto. **Da dire a Nicola.**
|
||||||
|
|
||||||
|
### ⚠️ Le curve dei test fisici non sono collegate, e agganciarle non sarà «solo dati»
|
||||||
|
|
||||||
|
Le venti curve dei test misurati sono portate e verificate, ma **irraggiungibili dal
|
||||||
|
motore**: il vocabolario delle curve del registro non ha nomi per loro, e la funzione che
|
||||||
|
applica una curva non può ricevere età e sesso, che quasi tutte richiedono.
|
||||||
|
|
||||||
|
📌 Questo contraddice la §5, dove il registro è presentato come dato che si estende senza
|
||||||
|
toccare il codice. **È vero per il questionario, non per i test fisici**: agganciarli
|
||||||
|
richiede di estendere il vocabolario e la firma. Il piano degli import deve saperlo, perché
|
||||||
|
oggi crede di trovare la presa già montata.
|
||||||
|
|
||||||
|
### Il confine dove la barriera finisce
|
||||||
|
|
||||||
|
Il tipo protegge il codice; la tabella `score` ha ora anche un vincolo che rifiuta un valore
|
||||||
|
scritto sotto uno stato che lo nega. ⚠️ Ma quel vincolo entra solo nei database **creati da
|
||||||
|
qui in avanti**: lo schema gira con `CREATE TABLE IF NOT EXISTS`, che su un file esistente
|
||||||
|
non fa nulla. Oggi nessun database esiste ancora — diventa un problema il giorno del primo
|
||||||
|
deploy, ed è quello il momento di ricordarsene.
|
||||||
|
|
||||||
|
### La storia dei punteggi si tiene
|
||||||
|
|
||||||
|
Un ricalcolo **aggiunge** righe invece di sovrascriverle, coerentemente col congelamento del
|
||||||
|
§6: sovrascrivere cancellerebbe proprio ciò che il congelamento protegge. La lettura passa da
|
||||||
|
una funzione tipata che restituisce l'ultimo calcolo per sessione — la dashboard non deve
|
||||||
|
inventarsi una query sua.
|
||||||
|
|
||||||
|
### 🔲 Una domanda per Nicola, sulla voce più pesante del modello
|
||||||
|
|
||||||
|
`hrv` pesa **0,50 su due assi** — *Recupero* ed *Energia* — ed è la singola voce più pesante
|
||||||
|
di tutto il modello. Nel motore è un dato solo, condiviso. Ma nella funzione dimostrativa
|
||||||
|
dell'oracolo i due assi ricevono **numeri diversi sotto lo stesso nome** (68 e 65).
|
||||||
|
O è la stessa misura riusata su due assi — come il plank, che Nicola ha già confermato — e i
|
||||||
|
due numeri sono illustrativi; oppure sono due metriche distinte, e allora le stiamo fondendo
|
||||||
|
per sbaglio. Diventa concreto appena si collega Stress Index, che è la sorgente di quel dato.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## 12. Cosa l'implementazione ha scoperto — da chiudere prima del motore
|
## 12. Cosa l'implementazione ha scoperto — da chiudere prima del motore
|
||||||
|
|
||||||
Lo strato dati è stato costruito il 21/08 (ramo `feat/longevity`, 19 commit, 241 test).
|
Lo strato dati è stato costruito il 21/08 (ramo `feat/longevity`, 19 commit, 241 test).
|
||||||
|
|||||||
Reference in New Issue
Block a user