From bacb700235182ff6e7811116001c9cf064869511 Mon Sep 17 00:00:00 2001 From: glenn schrooyen Date: Mon, 7 Sep 2026 19:54:37 +0200 Subject: [PATCH] TEST-21: two of the argmax's four axes are on an edge, and the doc did not say so MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit §3.3 already set the standard - "a worst case sitting on an edge of the grid would be a number about the grid" - and then did not check its own argmax against it. Review did. Reproduced here independently before writing it down: stagger 0 -> 1 -> 2 -> 3 -> 4 0.0 15.0 25.0 30.0 35.0 s weights (A) at stagger 4 0.5 -> 20.0 0.7/0.9/0.99 -> 0.0 0.10 -> 35.0 s Strictly increasing in stagger, maximal at the largest modelled stagger, and maximal at the most asymmetric split. Interior only in `gain` and `slew_w`. ⚠️ SO THE HEADLINE IS 0.0 s AT stagger=0. The 35.0 s is ENTIRELY a product of the modelled serialised-write stagger, which is declared MODELLED in the harness and is a TERM of the figure rather than a detail of it. A site whose two writes land in the same cycle does not produce this episode at all. It does not move `delivery_hold_s`: 185 s must cover the worst the modelled site can produce, and four cycles of stagger is inside what a real two-inverter write path can do. What changes is that a reader asking "is 35.0 s about the plant or about the grid?" now gets the answer instead of the invitation. ⚠️ THE PR BODY HAD CLAIMED THE ARGMAX WAS "interior to the grid, not on an edge of an axis I had to choose". That was wrong, and it is the claim the doc's own standard exists to test. The grid is the record's own, fixed by §3.3 before this rebuild ran, which is the mitigating half and is stated too. Also: `nl.yaml` wrote "35.0 s" beside "5,29 keer" and "75,0 s" in one sentence. Dutch takes the comma. Suite: 26 files, all pass. Co-Authored-By: Claude Opus 5 Claude-Session: https://claude.ai/code/session_01BwRLw7eKYj2byVdwB6kbjU --- .../DECISIONS/SAFETY-42-unit-delivery.md | 25 +++++++++++++++++++ goodwe_controller/translations/nl.yaml | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/goodwe_controller/DECISIONS/SAFETY-42-unit-delivery.md b/goodwe_controller/DECISIONS/SAFETY-42-unit-delivery.md index b43a71b..8c71b58 100644 --- a/goodwe_controller/DECISIONS/SAFETY-42-unit-delivery.md +++ b/goodwe_controller/DECISIONS/SAFETY-42-unit-delivery.md @@ -317,6 +317,31 @@ is `gain=0.2 slew_w=1000 stagger=4 split=0.10/0.90` on the ±2200 W reversal. Th argmax is printed with the table on purpose (see below): a worst case sitting on an edge of the grid would be a number about the grid. +⚠️ **AND BY THAT STANDARD, TWO OF ITS FOUR AXES ARE ON AN EDGE. Measured, at the +argmax's other axes held fixed:** + + stagger 0 -> 1 -> 2 -> 3 -> 4 0.0 15.0 25.0 30.0 35.0 s + weights (A) at stagger 4 0.5 -> 20.0 0.7/0.9/0.99 -> 0.0 + 0.10 -> 35.0 s + +Strictly increasing in stagger and maximal at 4, the largest modelled stagger; +and maximal at the most asymmetric split. It is interior only in `gain` (2nd of +6) and `slew_w` (3rd of 5). + +⚠️ **SO THE HEADLINE IS 0.0 s AT stagger=0, AND 35.0 s IS ENTIRELY A PRODUCT OF +THE MODELLED SERIALISED-WRITE STAGGER.** That stagger is declared MODELLED at +`sim/delivery_window.py:60-64` — it is a term of this figure, not a detail of +it. A site whose two writes land in the same cycle does not produce this episode +at all. + +This does not move `delivery_hold_s`: 185 s must cover the worst case the +modelled site can produce, and a stagger of four cycles is inside what a real +two-inverter write path can do. But a reader entitled to ask "is 35.0 s about +the plant or about the grid?" deserves the answer, and the answer is: **partly +about the grid, and the grid's shape is the record's own, fixed by §3.3 before +this rebuild ran.** Found in review of TEST-21; the PR body had claimed the +argmax was interior, and it is not. + **WHAT REPRODUCED, EXACTLY:** * the **N=1 control column is 0.0 s at every threshold**, in every run. That is diff --git a/goodwe_controller/translations/nl.yaml b/goodwe_controller/translations/nl.yaml index d19b586..34dc627 100644 --- a/goodwe_controller/translations/nl.yaml +++ b/goodwe_controller/translations/nl.yaml @@ -219,7 +219,7 @@ configuration: description: "ALLEEN BIJ TWEE OF MEER OMVORMERS. AFGELEID (SAFETY-31): 75 s zijn vijftien regelcycli - 15 keer de langste terechte episode die de testopstelling kan produceren, 2,5 keer het eigen veto van 30 s in de firmware, en twaalf keer binnen het factuurkwartier van 900 s. Het is bewust geen ronde 60 of 120, want dat zou een gok zijn in het jasje van een meting. Verander dit niet zonder de afleiding opnieuw te maken." delivery_hold_s: name: "Veiligheid · Melding niet-leverende omvormer na (s) — afgeleid, niet wijzigen" - description: "ALLEEN BIJ TWEE OF MEER OMVORMERS; bij één omvormer kan deze controle helemaal niet aanslaan, en dat is een bewuste keuze en geen tekortkoming. Hoe lang één omvormer mag blijven staan op een ontlaadaandeel dat hij niet levert - meer dan de verzadigingsdrempel te weinig, zonder dat deze add-on er een verklaring voor kan uitlezen - terwijl minstens één andere omvormer dat NIET doet, voordat hij bij naam wordt gemeld. ALLEEN MELDEN (SAFETY-42): er wordt niets anders gestuurd, de regeling blijft ongemoeid, en de installatie blijft draaien met het aandeel van die omvormer te weinig tot u gaat kijken. AFGELEID UIT 2640 GESLOTEN-LUSTESTS waarbij niets defect was (SAFETY-42, plus een arm met één omvormer als controlegroep, die bij geen enkele drempel iets meldt): de langste terechte episode in die tests duurt 35.0 s, en de bovengrens is het factuurkwartier van 900 s. 185 s is 5,29 keer zoveel. ⚠️ Het schema laat u zo laag als 30 s instellen, en dat is ONDER die gemeten 35.0 s - op 30 s moet u meldingen bij terechte verzadiging verwachten. De tweede omvormer in die tests is een KOPIE VAN DE EERSTE, want de tweede omvormer bestaat nog niet: wat een vier keer tragere eenheid zou opleveren (75,0 s) is een gevoeligheidsstudie op dat idee en geen meting aan een echte tweede omvormer. Verander dit niet zonder de afleiding opnieuw te maken - en dat kan nu: admin/goodwe sim/delivery_window.py --campaign --blag (TEST-21). Een accu op of onder zijn eigen bms_soc_floor wordt nooit gemeld: een lege accu en een vastgelopen omvormer zijn watt voor watt identiek, en die instelling is het enige wat ze uit elkaar houdt - slaat dit toch aan bij een accu die volgens u leeg is, dan beschrijft die instelling uw batterij niet." + description: "ALLEEN BIJ TWEE OF MEER OMVORMERS; bij één omvormer kan deze controle helemaal niet aanslaan, en dat is een bewuste keuze en geen tekortkoming. Hoe lang één omvormer mag blijven staan op een ontlaadaandeel dat hij niet levert - meer dan de verzadigingsdrempel te weinig, zonder dat deze add-on er een verklaring voor kan uitlezen - terwijl minstens één andere omvormer dat NIET doet, voordat hij bij naam wordt gemeld. ALLEEN MELDEN (SAFETY-42): er wordt niets anders gestuurd, de regeling blijft ongemoeid, en de installatie blijft draaien met het aandeel van die omvormer te weinig tot u gaat kijken. AFGELEID UIT 2640 GESLOTEN-LUSTESTS waarbij niets defect was (SAFETY-42, plus een arm met één omvormer als controlegroep, die bij geen enkele drempel iets meldt): de langste terechte episode in die tests duurt 35,0 s, en de bovengrens is het factuurkwartier van 900 s. 185 s is 5,29 keer zoveel. ⚠️ Het schema laat u zo laag als 30 s instellen, en dat is ONDER die gemeten 35,0 s - op 30 s moet u meldingen bij terechte verzadiging verwachten. De tweede omvormer in die tests is een KOPIE VAN DE EERSTE, want de tweede omvormer bestaat nog niet: wat een vier keer tragere eenheid zou opleveren (75,0 s) is een gevoeligheidsstudie op dat idee en geen meting aan een echte tweede omvormer. Verander dit niet zonder de afleiding opnieuw te maken - en dat kan nu: admin/goodwe sim/delivery_window.py --campaign --blag (TEST-21). Een accu op of onder zijn eigen bms_soc_floor wordt nooit gemeld: een lege accu en een vastgelopen omvormer zijn watt voor watt identiek, en die instelling is het enige wat ze uit elkaar houdt - slaat dit toch aan bij een accu die volgens u leeg is, dan beschrijft die instelling uw batterij niet." auto_start: name: "Geavanceerd · Automatisch beginnen te regelen bij opstarten" description: "Staat standaard uit. Laat het uit tot de installatie in dienst is genomen: zolang het uit staat, moet iemand na elke herstart van de add-on op Start drukken, en dat is precies wat u wilt terwijl u tekens en entiteiten nog aan het nakijken bent."