R1: déduplication du moteur nuit — WINDOWS_SOURCEV2 unique calculateur
- Le moteur nuit (161 lignes) était calculé 2x (WINDOWS + BCL), chaque patch nuit devait être appliqué 2x (P2, 04/08, P7) -> risque de divergence. - WINDOWS calcule tout (+ startMs, needsCapture strict, recoveryAllowedNow, targetReached) et exporte nightEvcsPreview étendu. - BCL consomme prev.nightEvcsPreview avec fallbacks sûrs (preview absent -> 'blocked'). Export nightEvcs inchangé pour DECISION/HA_SERVICE. - A/B git HEAD vs patché : 7 scénarios + 2 cas limites, sorties strictement identiques. Déployé en production, exécutions vérifiées success.
This commit is contained in:
44
HANDOFF.md
44
HANDOFF.md
@@ -476,3 +476,47 @@ const nightGridHcPreferred =
|
||||
|
||||
---
|
||||
*Document mis à jour le : 07/08/2026 (~15:50) — P7 charge HC nuit auto + tools n8n-pull/n8n-push*
|
||||
|
||||
## 12. Session du 07/08/2026 (soir) — R1 : Déduplication du moteur nuit
|
||||
|
||||
### Contexte
|
||||
Refactor n°1 du plan de maintenabilité (conseil validé avec l'utilisateur) :
|
||||
le moteur nuit complet (~161 lignes : nightSessionActive, batteryAssistAllowed,
|
||||
nightGridTakeoverNeeded, nightPreferredSourceMode, cibles/triggers, latch...)
|
||||
était calculé DEUX FOIS, dans WINDOWS_SOURCEV2 ET BATTERY_CLOUD_LOCKS.
|
||||
Chaque patch nuit devait être appliqué 2× (P2, fix 04/08, P7) → risque de
|
||||
divergence silencieuse entre sourceMode (WINDOWS) et conditions (BCL).
|
||||
|
||||
### Fix R1 (déployé 07/08 ~19:03, A/B validé)
|
||||
- **WINDOWS_SOURCEV2 = unique calculateur.** Reprend les 4 éléments que seul BCL
|
||||
calculait : `nightSessionStartMs`, `nightSessionNeedsCapture` version stricte
|
||||
(critère startMs inclus), `batteryRecoveryAllowedNow`, `batteryTargetReached`.
|
||||
Export `nightEvcsPreview` étendu (+ `nightTakeoverLatched`, `nightGridHcPreferred`).
|
||||
- **BATTERY_CLOUD_LOCKS consomme** `prev.nightEvcsPreview` (bloc de 161 lignes
|
||||
remplacé par ~50 lignes de lecture avec fallbacks sûrs : preview absent
|
||||
→ session inactive / 'blocked'). −1,7K chars.
|
||||
- Le shape de l'export `nightEvcs` de BCL (consommé par DECISION_ENGINEV2 et
|
||||
HA_SERVICE_CALLS_OUTPUT) est strictement inchangé.
|
||||
- **RÈGLE DÉSORMAIS : toute évolution de la logique nuit se fait UNIQUEMENT
|
||||
dans WINDOWS_SOURCEV2.** BCL ne contient plus aucune logique nuit.
|
||||
|
||||
### Validation A/B (tools/ab-20260807-r1.mjs)
|
||||
- Pipeline complet WINDOWS→BCL exécuté avant (git HEAD) / après (patché) sur les
|
||||
7 scénarios golden + 2 cas limites (capture session history vide, clear résiduel).
|
||||
- Sorties BCL **strictement identiques** (nightEvcs, conditions, safeguards, context).
|
||||
- Fallback preview absent : pas de crash, retombe en 'blocked'.
|
||||
- Piège rencontré : Date.now() dans le harnais → faux diffs de quelques ms ;
|
||||
corrigé en construisant le snapshot une fois puis clone JSON par exécution.
|
||||
|
||||
### Outillage ajouté
|
||||
- `tools/patch-20260807-r1-dedup-night.mjs` : le refactor (rejouable).
|
||||
- `tools/ab-20260807-r1.mjs` : harnais A/B git HEAD vs working tree — réutilisable
|
||||
pour tout futur refactor (modèle pour R3, la suite de tests golden).
|
||||
|
||||
### Prochaines étapes du plan validé
|
||||
- R3 : suite de tests golden (~15 scénarios, exécutée avant chaque push).
|
||||
- R2 : git source de vérité (src/nodes/*.js + assemblage dans n8n-push.mjs).
|
||||
- Puis agent IA planificateur en mode ombre (jamais dans la boucle 30 s).
|
||||
|
||||
---
|
||||
*Document mis à jour le : 07/08/2026 (~19:10) — R1 déployé, comportement inchangé (A/B), production stable*
|
||||
|
||||
Reference in New Issue
Block a user