Fix F: mémoire 'charge terminée' prioritaire sur les gardes (rebond rebranchement 09/08)
- DECISION: branche done/recovery_done remontée dans la cascade principale (avant mustStopHard) → le collant se réécrit chaque cycle, survit aux micro-charges de la VW et aux hard stops batterie - branche Fix E interne supprimée (remplacée par la branche haute) - golden 25→26 (night-hard-stop-necrase-pas-done) - HANDOFF §19
This commit is contained in:
@@ -487,6 +487,38 @@ else if (!parsed.evcsDeviceConnected || !parsed.evcsVehicleConnected) {
|
||||
});
|
||||
}
|
||||
|
||||
// =====================================================
|
||||
// Fix F (09/08/2026) : MÉMOIRE "CHARGE TERMINÉE" PRIORITAIRE.
|
||||
// Incident 09/08 06:51→06:56 : la VW pleine relançait des micro-charges
|
||||
// (sur batterie, EDF OFF) → la garde mustStopHard émettait
|
||||
// 'battery_current_hard_stop' qui ÉCRASAIT l'état collant dans le helper
|
||||
// → completed perdu au cycle suivant → re-P7 → EDF rallumé (rebond).
|
||||
// Ici : tant que la session nuit est active et la charge terminée, l'état
|
||||
// collant est réécrit à CHAQUE cycle, AU-DESSUS des gardes. Aucune perte de
|
||||
// protection : ce setOff coupe la charge aussi fermement qu'un hard stop
|
||||
// (chg/perm/latch OFF + mustStop si la borne est encore armée).
|
||||
// =====================================================
|
||||
else if (
|
||||
context.profile === 'night_hc' &&
|
||||
nightEvcs?.vehicleChargeCompleted &&
|
||||
!manualLocalChargeAllowed &&
|
||||
!strategy.forceGridRequested
|
||||
) {
|
||||
setOff({
|
||||
stateName: nightEvcs?.nightRecoveryDone
|
||||
? 'night_recovery_done_idle'
|
||||
: 'night_session_done_idle',
|
||||
decisionName: cloud.sessionObservedActive ? 'stop_vehicle_full_or_paused' : 'hold',
|
||||
reasonText: nightEvcs?.nightRecoveryDone
|
||||
? 'Charge véhicule terminée + batterie à la cible : veille nuit, réseau relâché'
|
||||
: 'Charge véhicule terminée : veille nuit, réseau relâché (recharge batterie si sous cible)',
|
||||
dynamic: false,
|
||||
mustStopFlag: !!cloud.sessionObservedActive,
|
||||
blockReason: 'none',
|
||||
blockedUntilStamp: now.stamp,
|
||||
});
|
||||
}
|
||||
|
||||
else if (safeguards.mustStopHard) {
|
||||
setOff({
|
||||
stateName:
|
||||
@@ -629,43 +661,18 @@ else if (cloud.sessionObservedActive) {
|
||||
const effectiveHoldConditionsOk =
|
||||
holdConditionsOk || manualLocalHoldOverride;
|
||||
|
||||
// =================================================
|
||||
// Fix E (09/08/2026) : CHARGE TERMINÉE PENDANT LA SESSION ACTIVE.
|
||||
// Nuit 08-09/08 : status EVCS 3 "charged" → WINDOWS passe la source à
|
||||
// 'blocked' (Fix D), mais ICI les branches source-lost prenaient la main
|
||||
// (hold_min_run_source_lost 25 min puis stop_source_lost), l'état collant
|
||||
// n'était JAMAIS écrit ; à l'ouverture du relais le statut retombe (3→1),
|
||||
// completed redevenait faux → re-P7 → EDF rallumé → rebond ~30 min.
|
||||
// On latche l'état collant AU PREMIER cycle où la fin de charge est vue,
|
||||
// relais encore fermé, et on termine la session proprement (pas de min ON).
|
||||
// =================================================
|
||||
if (
|
||||
context.profile === 'night_hc' &&
|
||||
nightEvcs?.vehicleChargeCompleted &&
|
||||
!manualLocalChargeAllowed &&
|
||||
!strategy.forceGridRequested
|
||||
) {
|
||||
setOff({
|
||||
stateName: nightEvcs?.nightRecoveryDone
|
||||
? 'night_recovery_done_idle'
|
||||
: 'night_session_done_idle',
|
||||
decisionName: 'stop_vehicle_full_or_paused',
|
||||
reasonText: 'Charge véhicule terminée en session active : arrêt propre, veille nuit collante',
|
||||
dynamic: false,
|
||||
mustStopFlag: false,
|
||||
blockReason: 'none',
|
||||
blockedUntilStamp: now.stamp,
|
||||
});
|
||||
}
|
||||
|
||||
// =================================================
|
||||
// VEHICLE FULL / PAUSED - NUMERIC FILTER DECISION
|
||||
// NB Fix F (09/08/2026) : le cas "charge terminée en session nuit" est
|
||||
// désormais intercepté PLUS HAUT dans la cascade (mémoire prioritaire),
|
||||
// avant les gardes. Ici ne restent que la détection VDF initiale et
|
||||
// les autres sources.
|
||||
// IMPORTANT:
|
||||
// - uniquement en session active
|
||||
// - uniquement si la source est réellement livrable
|
||||
// - sans utiliser le PV comme critère
|
||||
// =================================================
|
||||
else if (
|
||||
if (
|
||||
vehicleDemandFilter.evcsVehicleNoDemandSemantic &&
|
||||
vehicleDemandFilter.sourceDeliverableForNoDemand
|
||||
) {
|
||||
|
||||
Reference in New Issue
Block a user