diff --git a/docs/DESIGN_DELESTAGE.md b/docs/DESIGN_DELESTAGE.md index cd0bdcd..c5a8a47 100644 --- a/docs/DESIGN_DELESTAGE.md +++ b/docs/DESIGN_DELESTAGE.md @@ -169,8 +169,14 @@ dépensée. > elle est réversible. > > La levée demande un champ déclaré (masque de phases par charge) — donc config, interface app -> et migration. Cela dépasse ce lot. **Décision attendue** : vivre avec le pessimisme, ou ouvrir -> le champ. +> et migration. Cela dépasse ce lot. +> +> **Tranché le 2026-08-30 : on vit avec le pessimisme**, et c'est le bon arbitrage pour une +> couche de sécurité — il coûte du rendement, jamais de la sécurité. Mais c'est un **report +> daté**, pas une position : la V2C publie `currentL1/L2/L3` depuis le **2026-08-28**, donc +> l'information existe déjà côté matériel pour une borne, et le **§14a distinguera par phase**. +> Le jour venu, `houseDrawMargin()` retiendra la phase de la charge au lieu de la pire — un seul +> appel change, parce que l'étape 2 compare des marges et non des plafonds. **Étape 4 — la protection L4 déleste le waterfall.** `verifyOverloadProtection()` cesse d'être réservée aux bornes ; ordre inverse du rang, `force = true`, verrous bypassés comme le repli L2. diff --git a/specs/spec_loadmodel.md b/specs/spec_loadmodel.md index 0d13f4f..e434e37 100644 --- a/specs/spec_loadmodel.md +++ b/specs/spec_loadmodel.md @@ -880,6 +880,18 @@ plafond et ne borne personne. Il ne mord que sur une triphasée réellement dés coûte alors du **rendement, jamais de la sécurité**. Lever la limite demande un masque de phases déclaré, donc config, interface et migration : hors de ce lot. +> **Report daté, pas position de principe (2026-08-30).** Le masque **finira par s'ouvrir**, et +> l'échéance se rapproche par les deux bouts. Côté matériel, l'information EXISTE déjà pour une +> borne : la V2C publie `currentL1` / `currentL2` / `currentL3` depuis le **2026-08-28**. Côté +> modèle, le **§14a** distinguera par phase — il ne pourra pas se contenter d'un nombre. +> +> Ce qui est décidé ici n'est donc pas « le moteur ignorera toujours les phases », mais « il les +> ignore tant que le champ n'est pas déclaré, et il se comporte alors de la manière la plus +> défensive ». Le jour où le masque arrive, `houseDrawMargin()` cesse de retenir la pire phase +> pour retenir **celle de la charge** — un seul appel change, et le pessimisme disparaît sans +> qu'aucune règle ne bouge. C'est précisément ce que l'étape 2 a préparé en comparant des +> **marges** et non des plafonds. + **LM-1011 — `BELOW_MIN_POWER` prime sur `DRAW_CAP` dès qu'il reste de l'autorisation.** *(Précédence tranchée par Patrick le 2026-08-29, sur une question de l'agent app. Écrite ICI, une fois, pour qu'aucun côté de la frontière ne l'établisse pour son compte.)*