Fixes A/B/C/D incident rebond EDF nuit 07-08/08 + GRAFCET doc
- A: état collant night_recovery_done_idle + bande cible−2 (anti-rebond takeover) - B: snapshot relit night_session_start_soc/at (fin des réécritures 30s) - C: hystérésis grid — turn_off_vehicle_unplugged (coupure immédiate, bypass min_on) - D: evcs_status_raw==3 (charged) = fin de charge immédiate - golden 19→23 scénarios (2 attendus mis à jour, 4 nouveaux) - MANUEL_COMPLET §11.6 GRAFCET cycle nuit, HANDOFF §17, vision-notes incident
This commit is contained in:
69
HANDOFF.md
69
HANDOFF.md
@@ -732,3 +732,72 @@ haiku-4.5 ~9€/mois plein temps). Implémentation ~30 min, tests advisor inchan
|
||||
→ Alors premier câblage réel LIMITÉ : night_target_soc uniquement, derrière un
|
||||
nouveau toggle `advisor_apply_night_target`, le reste inchangé.
|
||||
|
||||
|
||||
## 17. Session du 08/08/2026 — Incident rebond EDF nuit 07-08/08 : fixes A/B/C/D
|
||||
|
||||
### Incident (captures HA analysées, faits dans docs/vision-notes.md)
|
||||
P7 a chargé la VW dès 01:24 ✓ (session 1h32m). Ensuite :
|
||||
1. Fin de charge détectée très tardivement (~04:15 au lieu de ~02:56) ;
|
||||
2. Rebond EDF ON/OFF période ~10 min autour de SOC=35 (= cible matin) + flapping
|
||||
ACM Charging/passthru 2-4 s (03:58→04:16) ;
|
||||
3. Débranchement VW (04:17) → takeover bien relâché mais EDF maintenu
|
||||
(hold_on_min_runtime 25 min) → arrêt manuel utilisateur 04:25 (stopped_user).
|
||||
|
||||
### Root causes
|
||||
- **A — point dégénéré SOC==cible** (WINDOWS_SOURCEV2) : engage takeover
|
||||
`soc <= cible`, release `soc > cible`, recovery ACM `soc < cible` (strict),
|
||||
et l'ACM recharge PILE à la cible → aucune position stable, oscillation.
|
||||
- **B — snapshot incomplet** : `evcs_night_session_start_soc/_at` jamais relus
|
||||
(absents du template) → `nightSessionNeedsCapture` vrai à CHAQUE cycle →
|
||||
"Night Session Start At" réécrit toutes les 30 s toute la nuit (visible logs),
|
||||
budget décharge nuit faussé (start SOC glissant).
|
||||
- **C — hystérésis grid** : pas de coupure anticipée au débranchement
|
||||
(min_on 25 min s'applique même véhicule parti et SOC ≥ seuil OFF).
|
||||
- **D — détection fin de charge fragile** : VDF armé uniquement session
|
||||
pleinement active ; stop par garde (ex battery_current_hard_stop) → filtre
|
||||
désarmé → 'vehicle_full_or_paused' inatteignable pendant longtemps.
|
||||
|
||||
### Fixes déployés (production 08/08 ~14:00, golden 23/23)
|
||||
- **Fix A** (WINDOWS_SOURCEV2 + BCL passthrough + DECISION) : nouvel état
|
||||
auto-entretenu **`night_recovery_done_idle`** émis quand
|
||||
vehicleChargeCompleted && SOC ≥ cible. Takeover relâché DÉFINITIVEMENT ;
|
||||
ré-engagement uniquement si SOC ≤ cible − 2 (bande NIGHT_RECOVERY_REARM_BAND_PCT).
|
||||
⚠ Le nom ne matche aucun pattern no-demand de l'hystérésis (comme done_idle).
|
||||
Structure takeover : completed ? !nightRecoveryDone : (trigger || urgent || latch).
|
||||
- **Fix B** (HA_SNAPSHOT_TEMPLATE) : +`evcs_night_session_start_soc`,
|
||||
+`evcs_night_session_start_at` (helpers input_text existants, vérifiés via MCP).
|
||||
- **Fix C** (workflow hystérésis 7iIlu7LLTW7TZA8o, patch
|
||||
tools/patch-20260808-c-unplug-cut.mjs rejouable) : nouvel état
|
||||
**`turn_off_vehicle_unplugged`** = véhicule débranché (es=vehicle_not_connected)
|
||||
+ latch ON + grid ON + pas d'override + SOC ≥ seuil OFF → coupure immédiate
|
||||
(bypass min_on) + notification. Dry-run 4 cas validé (incident/SOC bas/
|
||||
takeover ON/recovery_done) AVANT push. Le fichier local du workflow est
|
||||
désormais suivi : workflows/victron-grid-hysteresis-v1.json.
|
||||
- **Fix D** (WINDOWS_SOURCEV2) : `evcs_status_raw == 3` (Victron "charged")
|
||||
vaut fin de charge immédiate, sans attendre le VDF.
|
||||
|
||||
### Golden : 19 → 23 scénarios
|
||||
- 2 attendus mis à jour (transition/auto-entretien : SOC ≥ cible → état
|
||||
`night_recovery_done_idle` désormais) ;
|
||||
- 4 nouveaux : `night-recovery-atteinte-soc-cible` (LE cas du rebond),
|
||||
`night-recovery-done-bande-collante` (34 % dans la bande),
|
||||
`night-recovery-rearm-sous-bande` (32 % → ré-engagement),
|
||||
`night-vw-statut-charged` (Fix D).
|
||||
- Piège outillage : `tests/golden/run.mjs` exécute le JSON BUILDÉ
|
||||
(workflows/*.json), pas src/ → toujours `node tools/n8n-build.mjs` avant un
|
||||
run golden manuel (n8n-push le fait automatiquement).
|
||||
|
||||
### Documentation
|
||||
- MANUEL_COMPLET.md §11.6 : GRAFCET complet du cycle nuit (G1 EVCS / G2
|
||||
hystérésis) + états surplus fin de nuit + résumé incident.
|
||||
- docs/vision-notes.md : OCR/faits des 9 captures de l'incident.
|
||||
|
||||
### À surveiller (prochaine nuit HC, VW branchée)
|
||||
1. Fin de charge : passage à vehicle_full_or_paused OU night_recovery_done_idle
|
||||
rapide (Fix D si la VW publie le statut 3) ;
|
||||
2. SOC à la cible → UNE coupure EDF, puis plus aucun ON/OFF (sauf SOC ≤ cible−2) ;
|
||||
3. "Night Session Start At" écrit UNE fois en début de session (Fix B) ;
|
||||
4. Débranchement → EDF OFF ≤ 1 min (turn_off_vehicle_unplugged, Fix C).
|
||||
|
||||
---
|
||||
*Document mis à jour le : 08/08/2026 (~14:15) — fixes A/B/C/D déployés, golden 23/23*
|
||||
|
||||
Reference in New Issue
Block a user