diff --git a/AGENTS.md b/AGENTS.md index 57016a4..5777d88 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1036,6 +1036,13 @@ aucune, la décision est une intention, et elle se périmera à la vitesse du co > « l'instrument dont le silence ressemble à un résultat », appliqué cette fois à une commande > **qui achète**. > +> **Et un mécanisme qui ACHÈTE s'arrête dans le doute.** Deux erreurs sont possibles quand un +> signal devient douteux : terminer à tort, ou continuer à tort. Elles ne coûtent pas la même +> chose — terminer à tort **rend la main** (l'utilisateur relance), continuer à tort **achète au +> maximum sur une mesure morte**. Les seuils de confirmation doivent donc être **asymétriques +> par conception** : prompts à conclure la fin, lents à conclure la poursuite. C'est l'inverse du +> réglage qu'on choisirait pour un mode, et c'est parce qu'une dérogation achète. +> > **Corollaire sur le retour** : l'état d'avant se MÉMORISE, il ne se déduit pas. Retomber sur un > défaut à la fin d'une dérogation détruit un réglage en silence — la même famille que le repli > d'échéance qui réécrivait `EcoWithMinCurrent` en `Eco`. diff --git a/docs/DESIGN_DEROGATION.md b/docs/DESIGN_DEROGATION.md index cb77ac2..180618c 100644 --- a/docs/DESIGN_DEROGATION.md +++ b/docs/DESIGN_DEROGATION.md @@ -112,6 +112,54 @@ C'est exactement le raisonnement de `progressMeasurable` : une capacité absente saisie, parce que l'écran de résultat parle trop tard. Une dérogation dont la fin n'est pas observable est une dérogation qui ne finira pas. +### La question qui manquait : que fait-elle ENTRE le figement et l'échéance ? + +La durée arrêtera la dérogation — **au bout**. Entre-temps, elle achète au maximum sur une mesure +morte. Sur un lien qui perd 40 % de ses trames, « au bout » peut vouloir dire des heures. + +**Position retenue : une dérogation dont la cible cesse d'être MESURABLE cesse.** Elle n'attend +pas sa durée. + +C'est `R6` transposée. Là-bas : *servie oui, tenue jamais* — on ne conclut pas « tenue » sur un +avancement qu'on ne mesure pas. Ici : **active oui, vérifiable non, donc on s'arrête.** Une +dérogation est une commande qui **achète** ; la maintenir sans pouvoir dire où elle en est, c'est +acheter à l'aveugle. + +**Et l'instrument existe déjà** : `measurement.source` et le régime de `LM-1009`. Quand le régime +d'une charge en dérogation cesse d'être mesuré, la condition de fin est perdue — et cela se sait +au cycle même, pas au bout de la durée. + +### QUATRE fins, et le motif dit laquelle a mordu + +| fin | ce qu'elle dit à l'utilisateur | geste | +|---|---|---| +| `targetReached` | la cible en énergie est atteinte | aucun — c'est le succès | +| `unplugged` | le véhicule est parti | aucun | +| **`measurementLost`** | on ne sait plus où en est la charge | **regarder le lien / le compteur** | +| `durationElapsed` | le temps imparti est écoulé | relancer si besoin | + +Les quatre appellent des gestes différents, et une dérogation qui se terminerait sans dire +laquelle a mordu laisserait l'utilisateur relancer un boost que le lien empêchera encore. + +### L'asymétrie, et la règle qu'elle donne + +Le débranchement peut **clignoter** sur cette borne. Le plugin V2C a déjà la parade — +`k_absencesPourClore` polls consécutifs avant de clore une session — et elle porte une propriété +qu'il faut reprendre : **seuls les polls RÉUSSIS font avancer le compteur.** Une coupure réseau +le **gèle**, elle ne le fait pas progresser. Un lien mort ne peut donc pas fabriquer un faux +débranchement. + +Cette confirmation vaut pour la dérogation aussi. Mais les deux erreurs ne coûtent pas la même +chose : + +> **Terminer à tort** rend la main : la charge repasse à son mode mémorisé, et l'utilisateur +> relance s'il veut. +> **Continuer à tort** achète au maximum sur une mesure morte. + +D'où la règle : **dans le doute, une dérogation s'arrête.** Les seuils de confirmation sont donc +asymétriques par conception — prompts à conclure la fin, lents à conclure la poursuite. C'est +l'inverse du réglage qu'on choisirait pour un mode, et c'est parce qu'une dérogation achète. + ### Corollaire — la DURÉE est un filet, pas une option Toute dérogation porte une durée maximale, **même quand elle a une meilleure condition de fin**. @@ -121,7 +169,12 @@ cible de charge qui ne remonte plus, une sonde qui tombe, un compteur qui se fig dérogation ne se termine jamais, en tirant le maximum. C'est « l'instrument dont le silence ressemble à un résultat », appliqué à une commande qui achète. -**Donc : jamais « jusqu'à annulation ».** Trois fins, et la durée est toujours l'une d'elles. +**Donc : jamais « jusqu'à annulation ».** Quatre fins, et la durée est toujours l'une d'elles. + +La durée est désormais **le filet du filet** : la perte de mesure attrape le cas où l'instrument +se tait ET se signale ; la durée attrape le cas où **même le régime ne se signale pas**. Deux +filets parce que le premier repose lui-même sur un instrument. + Cela rejoint ce que la maquette batterie demande pour son propre boost. ## 6. Ce que ça publie