feat(tools): l'optimiseur de référence s'annonce powersync-optimizer (correctifs brief 4, point 1)
Décision du 2026-10-17 : l'exemple GPL annonce `powersync-optimizer` dans le `name` du handshake ; `etm-optimizer` reste le nom de l'optimiseur ETM, propriétaire, hors de ce dépôt. Le fichier et son répertoire gardent le préfixe des artefacts (`tools/etm-powersync-ref-optimizer/`). README de l'outil, annexe E et tools/README.md le disent en une phrase ; refoptimizer vérifie le `name` publié par GetOptimizerStatus (1.1 et 1.0). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
parent
fb017f87a7
commit
8c0645d371
@ -602,6 +602,9 @@ plan à un créneau qui reproduit le waterfall rule-based. Usages : test de bout
|
||||
`SocketScheduler` (suite `etm-powersync-refoptimizer`) ; point de comparaison du banc ; exemple
|
||||
communautaire. Mode d'emploi et modes d'injection de défauts : son `README.md`.
|
||||
|
||||
Il s'annonce **`powersync-optimizer`** au handshake (`name`). `powersync-optimizer` = exemple de référence GPL (ce dépôt) ; `etm-optimizer` = optimiseur ETM (propriétaire, hors de ce dépôt).
|
||||
Le nom n'est pas contrôlé par le moteur (§3) : il n'est qu'affiché.
|
||||
|
||||
- Il ne lit **que** le contexte `GetPlan` (aucune connexion sortante, aucun fichier hors le token).
|
||||
- Il reproduit la **passe confort** : tri (rang, identifiant), surplus net signé, recrédit de la
|
||||
consommation courante, réserve de stockage, plancher, plafond, verrous, mapping SG-Ready avec
|
||||
|
||||
@ -597,6 +597,8 @@ void TestRefOptimizer::testNormalReproducesTheRules()
|
||||
.arg(i).arg(surplus.at(i - 1)).arg(cleEtat(b.at(i))).arg(i - 1).arg(cleEtat(a.at(i - 1)));
|
||||
}
|
||||
QVERIFY2(ecarts.isEmpty(), qUtf8Printable(ecarts.join('\n')));
|
||||
// L'exemple GPL s'annonce `powersync-optimizer` ; `etm-optimizer` est l'optimiseur propriétaire.
|
||||
QCOMPARE(rpc("GetOptimizerStatus").value("name").toString(), QString("powersync-optimizer"));
|
||||
// Régime stable : à la fin de chaque palier, les deux runs coïncident aussi SANS décalage.
|
||||
for (int i = 3; i < surplus.count(); i += 4) {
|
||||
QCOMPARE(cleEtat(a.at(i)), cleEtat(a.at(i - 1)));
|
||||
@ -742,6 +744,7 @@ void TestRefOptimizer::testAProtocol10OptimizerIsAccepted()
|
||||
QVERIFY(m_arb->socketScheduler()->optimiseurAuDernierCycle());
|
||||
const QVariantMap st = rpc("GetOptimizerStatus");
|
||||
QCOMPARE(st.value("optimizerAlive").toBool(), true);
|
||||
QCOMPARE(st.value("name").toString(), QString("powersync-optimizer"));
|
||||
QCOMPARE(st.value("protocolVersion").toString(), QString("1.0"));
|
||||
QVERIFY(!st.contains("capabilities"));
|
||||
QCOMPARE(cleEtat(etatApplique()), cleEtat(QVariantMap{{"var1", 2000.0}, {"var2", 3000.0}, {"pac", 3}}));
|
||||
|
||||
@ -5,6 +5,9 @@ Outils de développement et d'exploitation du plugin. Ce fichier ne décrit que
|
||||
(`etm-powersync-ref-optimizer/README.md`), les autres scripts portent leur mode d'emploi en
|
||||
en-tête.
|
||||
|
||||
Noms d'optimiseur : `powersync-optimizer` = exemple de référence GPL (ce dépôt) ; `etm-optimizer` = optimiseur ETM (propriétaire, hors de ce dépôt). L'optimiseur de
|
||||
référence s'annonce `powersync-optimizer` au handshake ; son fichier garde le préfixe des artefacts.
|
||||
|
||||
## `etm-powersync-trace-replay` — rejouer des traces de décision
|
||||
|
||||
Python 3, bibliothèque standard seule, GPL-3.0 comme le dépôt.
|
||||
|
||||
@ -6,6 +6,10 @@ confort : même ordre, même budget, mêmes écrêtages) en ne lisant **que** le
|
||||
accès réseau sortant, aucun fichier hors le token. Usages : test de bout en bout du moteur, point de
|
||||
comparaison d'un banc, exemple pour qui écrit son propre optimiseur.
|
||||
|
||||
**Nom annoncé au handshake : `powersync-optimizer`** (c'est le `name` que `GetOptimizerStatus`
|
||||
publie). `powersync-optimizer` = exemple de référence GPL (ce dépôt) ; `etm-optimizer` = optimiseur ETM (propriétaire, hors de ce dépôt). Le fichier et son
|
||||
répertoire gardent le préfixe des artefacts du dépôt, `etm-powersync-ref-optimizer`.
|
||||
|
||||
Ce qu'il ne reproduit pas (le contexte 1.1 ne le porte pas) : passe éco, dérogations, plafond de
|
||||
soutirage, paliers d'un `relay-router` (il envoie une consigne continue que le routeur arrondit),
|
||||
refus de commande, proxy VE. L'en-tête du script le détaille.
|
||||
|
||||
@ -48,6 +48,9 @@ Le token se lit dans un FICHIER (--token-file), relu à chaque handshake, jamais
|
||||
se verrait dans `ps`) et jamais affiché. S'il est configuré, un handshake sans lui, ou avec un
|
||||
autre, reçoit une erreur JSON-RPC -32001 puis la connexion est fermée.
|
||||
|
||||
Au handshake, il s'annonce `powersync-optimizer` (exemple de référence GPL) ; `etm-optimizer` est
|
||||
l'optimiseur ETM, propriétaire, hors de ce dépôt.
|
||||
|
||||
Sur la sortie standard, une seule ligne : `ÉCOUTE <endpoint>` quand le serveur écoute (le port
|
||||
réel d'un `tcp://…:0`). Le journal va sur la sortie d'erreur.
|
||||
"""
|
||||
@ -68,6 +71,9 @@ from datetime import datetime, timedelta
|
||||
ENDPOINT_DEFAUT = 'unix:///run/powersync/optimizer.sock'
|
||||
VERSION = '1.1'
|
||||
NOM = 'etm-powersync-ref-optimizer'
|
||||
# Nom annoncé au handshake : `powersync-optimizer`, l'exemple GPL de référence. `etm-optimizer`
|
||||
# est le nom de l'optimiseur ETM, propriétaire, hors de ce dépôt.
|
||||
NOM_ANNONCE = 'powersync-optimizer'
|
||||
LIGNE_MAX = 1024 * 1024 # E-T2-1 : une ligne de plus de 1 Mio est écartée
|
||||
CODE_TOKEN_REFUSE = -32001 # E-T2-6
|
||||
|
||||
@ -413,7 +419,7 @@ class Connexion(socketserver.StreamRequestHandler):
|
||||
return
|
||||
token = attendu
|
||||
pret = True
|
||||
reponse = {'protocolVersion': VERSION, 'name': NOM, 'planning': False,
|
||||
reponse = {'protocolVersion': VERSION, 'name': NOM_ANNONCE, 'planning': False,
|
||||
'capabilities': {'resolutionS': cfg.horizon_s, 'kinds': ['setpoint', 'state'],
|
||||
'usesForecast': [], 'reasonCodes': True}}
|
||||
if mode == 'wrong-major':
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user