From 6c44a4e09110946d59edc525ef70c4bea73672f1 Mon Sep 17 00:00:00 2001 From: Patrick Schurig Date: Sat, 17 Oct 2026 12:12:25 +0200 Subject: [PATCH] =?UTF-8?q?docs(traces):=20INTERFACE.md=20(r=C3=A9glage,?= =?UTF-8?q?=20RPC,=20format,=20fichiers,=20plafond),=20protocole=20annexe?= =?UTF-8?q?=20D=20(brief=204=20T6)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Annexe D : défaut désactivé, nom des fichiers, rotation locale, plafond, appariement requête → réponse (la ligne N attend la réponse à la requête N), no-response, jamais le token ; le rejeu est fait par tools/etm-powersync-trace-replay (et non plus « hems-sim »). Co-Authored-By: Claude Opus 5.5 --- docs/OPTIMIZER_PROTOCOL.md | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) 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