IntervalEngine : le commentaire sur les pauses disait l'inverse d'Apple
L'en-tête affirmait que `HKLiveWorkoutBuilder.elapsedTime` « exclut déjà les pauses », et en tirait que le moteur n'avait rien à savoir de la pause ni de l'auto-pause. La doc Apple dit le contraire, vérifié à la source le 2026-08-20 : « The elapsed time for the workout based on the builder's current contents, including pauses. » Conséquence si on câblait le moteur dessus telle quelle : une pause de 5 min ferait avancer le déroulé de 5 min d'effort — un fractionné mis en pause pour traverser une route se déroulerait à l'arrêt. La propriété qui exclut réellement les pauses est `HKWorkoutBuilder.elapsedTime(at:)` : « The duration of a workout doesn't include intervals between pause and resume events. » Les deux textes d'Apple se contredisent frontalement ; le choix de la source de temps reste à faire avant le câblage. Le moteur lui-même reste correct : il n'intègre que ce qu'on lui pousse. Aucun comportement modifié, 57 tests Swift toujours verts. COWORK gagne l'analyse complète du câblage (3 couches, le serveur sait déjà produire les étapes via _blocks_from_session) pour reprise à froid. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -15,9 +15,32 @@ import Foundation
|
||||
*
|
||||
* - il se teste intégralement sur Linux (cf. `tests-linux/`), là où
|
||||
* `WorkoutManager` ne le peut pas ;
|
||||
* - le temps de référence est `HKLiveWorkoutBuilder.elapsedTime`, qui
|
||||
* **exclut déjà les pauses** : le moteur n'a donc rien à savoir de la
|
||||
* pause, ni de l'auto-pause de la montre ;
|
||||
* - le temps de référence est poussé par l'appelant ;
|
||||
*
|
||||
* ⚠️ **CE COMMENTAIRE AFFIRMAIT LE CONTRAIRE DE SA SOURCE** (relevé le
|
||||
* 2026-08-20, avant tout câblage). Il disait que
|
||||
* `HKLiveWorkoutBuilder.elapsedTime` « exclut déjà les pauses », donc que
|
||||
* le moteur n'avait rien à savoir de la pause. La doc Apple dit
|
||||
* l'inverse, mot pour mot : « The elapsed time for the workout based on
|
||||
* the builder's current contents, **including pauses**. »
|
||||
* (developer.apple.com/documentation/healthkit/hkliveworkoutbuilder/elapsedtime)
|
||||
*
|
||||
* Conséquence si on câble le moteur sur cette propriété telle quelle :
|
||||
* une pause de 5 min ferait avancer le déroulé de 5 min d'effort. Un
|
||||
* fractionné mis en pause pour traverser une route se déroulerait tout
|
||||
* seul, à l'arrêt.
|
||||
*
|
||||
* La propriété qui exclut réellement les pauses est
|
||||
* `HKWorkoutBuilder.elapsedTime(at:)` — « The duration of a workout
|
||||
* doesn't include intervals between pause and resume events. » Ce n'est
|
||||
* PAS la même API, et les deux textes d'Apple se contredisent
|
||||
* frontalement sur ce point : à trancher avant le câblage.
|
||||
*
|
||||
* Le moteur, lui, reste correct : il ne fait qu'intégrer ce qu'on lui
|
||||
* pousse. C'est l'appelant qui devra fournir un temps réellement actif ;
|
||||
*
|
||||
* - il ignore donc l'auto-pause de la montre, à condition que la source de
|
||||
* temps ci-dessus soit correcte ;
|
||||
* - il est rejouable : réinjecter la même suite de ticks redonne le même
|
||||
* déroulé, ce qui rend la reprise après crash triviale
|
||||
* (`handleActiveWorkoutRecovery`).
|
||||
|
||||
Reference in New Issue
Block a user