diff --git a/docs/OPTIMIZER_PROTOCOL.md b/docs/OPTIMIZER_PROTOCOL.md index be5088d..230d98c 100644 --- a/docs/OPTIMIZER_PROTOCOL.md +++ b/docs/OPTIMIZER_PROTOCOL.md @@ -568,10 +568,14 @@ Pas de poids, pas de pourcentages : un ordre, des besoins, des exceptions expliq But : comparer des optimiseurs **sur les mêmes entrées** et rejouer un incident. -- Option plugin `optimizerTrace` (défaut : désactivée en production, activée sur banc). -- Fichiers NDJSON locaux, rotation par jour, rétention configurable (défaut 14 jours), sous - le répertoire de stockage du moteur (`NymeaSettings::storagePath()`). -- Une ligne par cycle : +- Option plugin `optimizerTrace` (défaut : **désactivée** ; à activer sur banc), réglée par + `NymeaEnergy.SetOptimizerTrace` (`INTERFACE.md`, « Traces de décision »). +- Fichiers NDJSON locaux `etm-powersync-optimizer-trace-AAAA-MM-JJ.ndjson`, rotation à minuit + heure locale, rétention configurable (défaut 14 jours), plafond par fichier journalier + (défaut 64 Mio), sous le répertoire de stockage du moteur (`NymeaSettings::storagePath()`). + Écriture asynchrone : une trace en échec ne bloque rien et ne change aucune décision. +- Une ligne par cycle, **y compris sous le rule-based** (sa réponse est alors le plan du + rule-based, `strategy: "rules"`) et en mode dégradé L2 (`strategy: "none"`, sans requête) : ```json {"t":"2026-10-12T13:42:00+02:00","request":{ "...GetPlan params..." }, @@ -579,8 +583,15 @@ But : comparer des optimiseurs **sur les mêmes entrées** et rejouer un inciden "powerW":1200,"clamped":false}],"strategy":"optimizer","latencyMs":12} ``` -- **Rejeu** : hems-sim relit `request`, l'envoie à un optimiseur candidat, compare - `response` + `diagnostics`. +- `request` : les params `GetPlan` envoyés (ou qui l'auraient été) ; `response` : ce qui a + répondu à **cette** requête — `result` brut, ou `error.code` (`no-response` si elle a été + remplacée sans réponse) ; `executed` : actions appliquées au cycle ; `latencyMs` : optimiseur + seulement. La réponse à la requête N sert au cycle N+1 : la ligne N l'attend. +- Jamais le token (il ne voyage que dans le handshake ; recopié par une réponse, il est masqué). +- **Rejeu** : `tools/etm-powersync-trace-replay` relit `request`, l'envoie à un optimiseur + candidat (`unix://` par défaut, `tcp://` accepté), écrit les réponses à côté de la trace et + résume : taux d'abstention, `computeMs` médian et max, cycles dont les actions du créneau + courant diffèrent du plan enregistré. - Les traces restent sur le site. Export manuel par l'installateur uniquement. ## Annexe E — Optimiseur de référence