14 Commits

Author SHA1 Message Date
Patrick Schurig
f9f2e1e5c5 decisions : référence régénérée (verdict de l'écart commande/mesure)
Contre la référence d'etm75, 29 fonctions changent, toutes par le
verdict de l'écart commande/mesure ou ce qui en découle :
- 21 par `command.divergent` seul (marches suivies et premières
  commandes qui ne divergent plus ; mesures remises à la main par le
  harnais qui divergent) ;
- `run` : `expectedW` de la borne commandée par le proxy (mémoire de
  commande tous émetteurs) et 46 cycles de gel sous arrêt verrouillé ;
- 7 où la garde de refus mord enfin : datée à l'horloge murale, elle
  était inerte dans toute la suite de simulation.
Plus les 6 fonctions de test nouvelles. Détail dans le rapport du lot.

run-decisions.sh check : IDENTIQUE (24 415 lignes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 19:52:02 +01:00
Patrick Schurig
21b71a691a decisions : référence régénérée (identifiants anonymisés, horloge fixe)
Elle remplace celle de e775f66, qui portait des ThingId bruts dans
shedding.open et des dates murales dans un test : le `check` n'y était pas
reproductible. Deux enregistrements successifs sont identiques (cmp).
Contre 76bf482 : les 85 fonctions communes sont identiques, sauf 12 lignes
dans 3 fonctions, où seuls le motif et le journal changent ; leurs actions
sont identiques.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:29:48 +01:00
Patrick Schurig
e775f66e58 decisions : référence étendue au lot délestage visible
Hors épisodes de protection, IDENTIQUE à 76bf482 : les 85 fonctions
communes sont identiques octet pour octet, sauf trois. Celles-là gardent
leurs actions (things, proxy) identiques ; seuls le motif des bornes tenues
(OVERLOAD_THROTTLED, sans niveaux) et le bloc shedding changent :
testL4ShedsAPacAndSaysItForcedTheLock (1 ligne),
testBlockedDischargeShowsAtTheMeterAndL4Decides (2),
testOffPeakFullPowerYieldsToThePhaseLimit (9). Quatre fonctions nouvelles.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 11:08:10 +01:00
Patrick Schurig
76bf482b21 decisions : référence étendue au lot e2, suite (somme éco + confort dans le plafond)
Sans tarif à heures creuses, IDENTIQUE à b1c0ade : 81 fonctions, octet
pour octet, `run` compris. En heures creuses :
- testOffPeakFullPowerStaysUnderTheLimitOnABlindMeter : 7 → 13 lignes
  (variante au total aveugle ajoutée) ;
- testOffPeakFullPowerSwitchesToThreePhases : le recrédit de 1 380 W,
  refusé sous le plancher triphasé, est servi en confort dans le plafond ;
  achat 11 040 → 9 660 W, consigne totale inchangée (11 040 W) ;
- deux fonctions nouvelles : testOffPeakFullPowerAtDawnStaysInTheCeiling
  (13 lignes), testOffPeakFullPowerGivesNothingBackWhileSwitchingPhases (2).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 09:47:40 +01:00
Patrick Schurig
b1c0adec00 decisions : référence étendue au lot e2, suite (consigne posée près de la limite de phase)
Sans tarif à heures creuses : 79 fonctions, 24 056 lignes identiques
octet pour octet à d62365f. En heures creuses, deux fonctions changent
(testBlockedDischargeShowsAtTheMeterAndL4Decides, 2 cycles ;
testOffPeakFullPowerYieldsToThePhaseLimit, réécrit), plus les deux
nouvelles. check et ETM_DECISIONS_TRACES=1 check : IDENTIQUE
(24 168 lignes ; 22 254 lignes de trace).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-25 07:27:13 +01:00
Patrick Schurig
d62365fe3d decisions : référence étendue au lot e2 (pleine puissance en heures creuses)
72 fonctions sans borne en heures creuses : 23 812 lignes identiques octet
pour octet à la référence de b144c09. Changent, en heures creuses : les six
fonctions du lot e1 qui ont une borne (ECO_FLOOR_GRID 1 380 W →
EV_OFF_PEAK_FULL_POWER 3 680 W, et leur compteur d'entrée, qui inclut
désormais ce que la borne tire) ; s'ajoutent les trois fonctions du lot e2.
check et ETM_DECISIONS_TRACES=1 check : IDENTIQUE (24 068 lignes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 22:32:16 +02:00
Patrick Schurig
1813fe80cf decisions : référence étendue à la fonction des écritures refusées (lot e1, suite)
Les 77 fonctions existantes donnent 23 950 lignes identiques octet pour
octet à la référence de 2cde57c (cmp, lignes de la nouvelle fonction
retirées). La référence s'étend des 96 lignes de
testRefusedWritesAreSpacedAndNeverDelayTheRelease ; check : IDENTIQUE
(24 046 lignes).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 11:25:05 +02:00
Patrick Schurig
2cde57ccf5 decisions : référence étendue aux six fonctions du lot e1
Sans elles, l'enregistrement est identique octet pour octet à la référence de
c5c3203 (23 799 lignes, cmp). Les 151 lignes ajoutées sont celles des six
scénarios d'heures creuses (testOffPeakDemoDay, …EndsAtSixAndOnDstDays,
testWithoutOffPeakTheEngineIsEtm74, testABatteryWithoutControlIsReadAsBefore,
testBlockedDischargeShowsAtTheMeterAndL4Decides,
testAMeterSilenceHandsTheBatteryBack). Deux enregistrements successifs
identiques.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-24 09:21:28 +02:00
Patrick Schurig
b793e07787 test(decisions) : référence étendue aux deux nouvelles fonctions de simulation
Les 69 fonctions existantes rendent un enregistrement identique, octet pour
octet, à la référence précédente (inchangée depuis fae7101). Les seules
lignes ajoutées sont celles de testSetLoadConfigRefusalIsPublished et de
testAutoProvisionedLabelIsCutNeverRefused. Après régénération : check
IDENTIQUE (71 fonctions, 23 728 cycles), traces activées comprises.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-22 20:47:16 +02:00
Patrick Schurig
3ddf88efac test(decisions): référence régénérée après ECO_FLOOR_BELOW_STAGE
Moteur de cd7cd1a contre l'ancienne référence (61db6cf), comparateur
--sous-palier, lignes du nouveau test retirées : IDENTIQUE HORS MOTIFS ET HORS
MOTIF ÉCO SOUS PALIER — 23 792 lignes, 23 784 identiques à l'octet, 8 qui ne
diffèrent que par ECO_FLOOR_GRID → ECO_FLOOR_BELOW_STAGE (niveau éco, et
decision quand l'éco est en tête). purchasedWh identique, sans --achat.
Aucune consigne ne change. S'y ajoutent les 4 lignes de
testEcoBelowTheFirstStageBuysNothing : 69 fonctions, 23 796 lignes.
check : IDENTIQUE, 0 rejeu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-19 08:57:52 +02:00
Patrick Schurig
1f6c7ec27a refactor(plan): le plan rule-based porte strategy « rules », comme activeStrategy (brief 4 T6)
Décision de Patrick du 2026-10-17 : un seul vocabulaire. Plan::strategy du rule-based,
GetPlan.strategy et la doc passent de « rule-based » à « rules » (INTERFACE.md, protocole §6).
Les libellés de journal (« repli rule-based ») ne sont pas des valeurs et restent.

Référence decisions régénérée. Preuve AVANT régénération, moteur de e592618 + ce seul
renommage, contre l'ancienne référence : comparateur --strategie (nouvelle option, qui ne tolère
que plan.strategy rule-based → rules) IDENTIQUE HORS STRATÉGIE — 23 792 lignes, 23 728
identiques à l'octet, 64 qui ne diffèrent que par .plan.strategy (décompte indépendant des
chemins JSON : 64 × .plan.strategy "rule-based" → "rules", rien d'autre). 0 rejeu. Le même
build, relu contre la nouvelle référence : IDENTIQUE ; 6 suites vertes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 11:46:36 +02:00
Patrick Schurig
696cb001f1 test(decisions): référence régénérée après le correctif c (etm71)
Moteur de 6481515 avec les scénarios de ff7c801, contre l'ancienne référence :
IDENTIQUE HORS MOTIFS ET HORS ACHAT (comparateur --achat) — 23 772 lignes, 23 765 identiques à
l'octet, 7 qui ne diffèrent que par progress.purchasedWh, toutes « 0 → absent » (régime
unmeasurable). Aucune consigne ne change. S'y ajoutent les 20 lignes du nouveau
testPurchasedIsCountedOnTheMeasuredEnergy : 68 fonctions, 23 792 lignes. check : IDENTIQUE, 0 rejeu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-17 01:55:14 +02:00
Patrick Schurig
f2f65980b3 test(decisions): référence régénérée après les correctifs a et b (etm70)
Changement VOULU, encadré avant régénération :
1. Moteur e6bc32d + tests de a280820, comparés à l'ancienne référence par
   etm-powersync-compare-hors-motifs.py : IDENTIQUE HORS MOTIFS, 23 739
   lignes, 23 724 identiques à l'octet, 15 qui ne diffèrent que par le
   motif publié (toutes des plans directs du scheduler : SURPLUS_INSUFFICIENT
   → ECO_FLOOR_GRID, et → ECO_FLOOR_MISSED au cycle de clôture). Aucune
   consigne, powerW, état, commutation, budget ni soutirage ne change.
2. Moteur et tests de HEAD : identiques à 1. ligne pour ligne hors des deux
   fonctions touchées ; testEcoFloorMissedSaysWhatWasLostAndWhy garde ses
   7 cycles en préfixe et en ajoute 13, testTheDecisionDescribesTheMergedAction
   ajoute 19 cycles. 67 fonctions, 23 705 cycles.
3. check sur la nouvelle référence : IDENTIQUE (23 772 lignes), 0 rejeu.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 20:53:05 +02:00
Patrick Schurig
d4b7d4dced test(décisions): référence au bit près des scénarios de simulation (brief 4 T0.5)
Preuve « sans endpoint = identique au bit près », posée AVANT tout refactoring.

`nymea-energy-decisions` est la suite `simulation` compilée à l'identique, plus un
enregistreur branché à l'édition de liens (`--wrap`) : aucune ligne de la suite ni du
moteur n'est modifiée. Chaque cycle (`simulationCallUpdate`) écrit une ligne NDJSON :
télémétrie de l'arbitre (actions du créneau dans l'ordre, motifs, niveaux, budget, soutirage,
consigne posée), actions laissées au proxy, état des Things. Les scénarios qui interrogent
un `RuleBasedScheduler` local voient leur `Plan` sérialisé champ par champ.

Exclus : `command.since` et les compteurs `totalEnergy*` du mock (horloge murale), les
ThingId (alias par rang dans le créneau, à chaque ligne : deux bornes identiques
reçoivent leur rang provisionné dans l'ordre d'un QHash). `planId` n'est pas lu.

Référence générée sur 83483cc (1.15.2+etm69) : 66 fonctions, 23 673 cycles + 36 plans
directs, deux exécutions identiques à l'octet. Chaque processus a un /tmp privé : libnymea
range l'état de test sous /tmp/nymea-test, partagé et cumulatif (348 bornes orphelines
trouvées dans energy-load-configuration.json).

  tests/auto/decisions/run-decisions.sh <build> check

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 07:24:00 +02:00