docs(banc): lire le journal sans sudo, et ce qu'une absence prouve
Un `sudo journalctl` par ssh ÉCHOUE — pas de TTY pour le mot de passe — et l'échec part sur stderr : stdout est vide, le grep en aval ne trouve rien, la commande rend 0. Un relevé conduit ainsi ne dit rien et en a l'air. C'est arrivé sur mes propres relevés des 28 et 29 : deux recherches « la ligne X apparaît-elle ? » n'avaient RIEN LU. Et l'explication que j'avais donnée à l'absence — « cette ligne est en qCDebug, le niveau n'est pas actif » — était fausse : les lignes `D | NymeaEnergy:` sortent bel et bien sur .75. Une cause plausible avancée pour un silence qu'on n'a pas mesuré, c'est le corollaire LM-104 appliqué à l'instrument de mesure. L'accès qui marche est écrit : `journalctl -u nymead`, SANS sudo, l'utilisateur etm étant dans le groupe adm. Vérifié sur .75. Et la règle qui va avec : une absence ne s'affirme que dans un flux dont on a prouvé qu'il coule — citer une ligne qu'on a LUE dans la même fenêtre, puis dire ce qui n'y est pas. RELEVE_LOTD.md est donné en modèle : il cite la ligne « 0 créée(s), 0 mise(s) à jour, 2 INCHANGÉE(S) » qu'il a lue, PUIS conclut à l'absence d'ECS-413 et de commutation. L'absence y porte parce que la présence l'accompagne. AUDIT DES RELEVÉS. Repris sur ce critère : aucun ne repose sur un journal vide. RELEVE_LOTBbis §267 parle d'un dry-run reprepro, pas du journal. Le seul défaut était dans la PROCÉDURE — TEST_TERRAIN.md prescrivait `sudo journalctl` dans son helper logs(), celui qu'un opérateur lance pendant un essai, alors que sa ligne 51 était déjà juste. Le document se contredisait ; corrigé. Consigné aussi : +etm27 posé sur .75 et ce qui y a été vérifié — avec les deux vérifications qui n'y sont PAS observables et qu'il ne faut pas fabriquer. La config du banc porte les rangs 1-2-3-4, réparée à la main hier soir ; la migration se rencontrera sur une box cliente non migrée. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
This commit is contained in:
parent
b552a1745b
commit
bbe88c9bd6
43
AGENTS.md
43
AGENTS.md
@ -204,6 +204,23 @@ vers un gestionnaire d'énergie complet (EV, ECS, PAC SG-Ready, batterie).
|
||||
> (3 680 W au lieu de 6 000). Suites : simulation 29/29, charging 16/16, loadmodel 18/18,
|
||||
> spotmarket 7/7 — amd64 0 erreur / 0 avertissement.
|
||||
|
||||
**DÉPLOYÉ SUR `.75` — `1.15.2+etm27`, 2026-08-29.** Cross-build arm64 (`build-etm27`), posé par
|
||||
`deploy.sh`, version relue, `nymead` actif. Vérifié sur machine : aller-retour `Get`→`Set`
|
||||
verbatim **neutre** ; `SetLoadConfig` à rangs doublés **refusé** avec sa raison, 4 charges
|
||||
intactes et rangs inchangés ; `rankOrigin: "auto"` fabriqué par un client **refusé** ;
|
||||
`rankOrigin` publié à `""` sur les quatre entrées.
|
||||
|
||||
> **Deux vérifications ne sont PAS observables sur `.75`, et il ne faut pas fabriquer la
|
||||
> condition** (même arbitrage que le `meterThingId`) :
|
||||
> - **La migration d'une config à rangs doublés.** La config du banc porte les rangs 1-2-3-4 :
|
||||
> elle a été réparée à la main le 2026-08-28 au soir. Le cas est éprouvé par
|
||||
> `testRankUniquenessRefusesWriteButNeverDiscards`, qui écrit un vrai JSON à rangs doublés,
|
||||
> recharge et vérifie la survie des deux entrées — le banc n'ajouterait que « le binaire arm64
|
||||
> fait pareil ». **Il se rencontrera sur une box cliente non migrée, et c'est là qu'il
|
||||
> comptera.**
|
||||
> - **`rankOrigin: "auto"`.** Les deux bornes ont été configurées AVANT `+etm27` : aucun
|
||||
> auto-provisionnement ne tournera. La valeur apparaîtra au prochain appairage réel.
|
||||
|
||||
**DÉPLOYÉ SUR `.75` — `1.15.2+etm26`, 2026-08-28.** Cross-build arm64 dans `build-cross-arm64`
|
||||
(bundle git → `/root/build-etm26`), posé par `deploy.sh`, version relue sur la box, `nymead`
|
||||
actif. `measuredW` a bien disparu de la charge utile ; `measurement {source, powerW}` est publié.
|
||||
@ -312,6 +329,32 @@ Ensuite : **passe contrats** (OPTIMIZER_PROTOCOL + README).
|
||||
`[plancher × 0,5 ; plancher[`), `BATTERY_RESERVE` avec un surplus réel sous le seuil, et
|
||||
LM-1204-b avec **deux bornes réelles** — la Terra AC ne répond toujours pas à l'ARP.
|
||||
|
||||
### Lire le journal de la box — et ce qu'une absence prouve
|
||||
|
||||
**`journalctl -u nymead`, SANS `sudo`.** L'utilisateur `etm` est dans le groupe `adm`, qui
|
||||
donne accès au journal. `sudo journalctl` **échoue** — pas de TTY pour saisir le mot de passe —
|
||||
et l'échec part sur **stderr** : `stdout` est vide, le `grep` en aval ne trouve rien, et la
|
||||
commande rend 0. **Un relevé conduit ainsi ne dit rien et en a l'air.**
|
||||
|
||||
> Constaté le 2026-08-29, sur mes propres relevés des deux jours précédents : deux recherches
|
||||
> « la ligne X apparaît-elle ? » n'avaient **rien lu du tout**. Et l'explication que j'avais
|
||||
> donnée à l'absence — « cette ligne est en `qCDebug`, le niveau n'est pas actif » — était
|
||||
> **fausse** : les lignes `D | NymeaEnergy:` sortent bel et bien dans le journal de `.75`.
|
||||
> Une cause plausible avancée pour un silence qu'on n'a pas mesuré, c'est le corollaire LM-104
|
||||
> appliqué à l'instrument : l'hypothèse de prudence devient un masquage de panne.
|
||||
|
||||
**RÈGLE — une absence ne s'affirme que dans un flux dont on a prouvé qu'il coule.** Citer une
|
||||
ligne qu'on a LUE dans la même fenêtre, puis dire ce qui n'y est pas. `docs/RELEVE_LOTD.md`
|
||||
§ (09:14:55) est le modèle : il cite la ligne `0 créée(s), 0 mise(s) à jour, 2 INCHANGÉE(S)`
|
||||
qu'il a lue, **puis** conclut « aucune ligne *construit depuis config*, aucun ECS-413, aucune
|
||||
commutation ». L'absence y porte, parce que la présence l'accompagne.
|
||||
|
||||
> **Audit du 2026-08-29** : les relevés du dépôt ont été repris sur ce critère. **Aucun ne
|
||||
> repose sur un journal vide** — `RELEVE_LOTBbis.md` §267 parle d'un dry-run `reprepro`, pas du
|
||||
> journal. Le seul défaut trouvé était dans la **procédure** : `docs/TEST_TERRAIN.md` prescrivait
|
||||
> `sudo journalctl` dans son helper `logs()`, celui qu'un opérateur lance pendant un essai —
|
||||
> corrigé. Sa ligne 51, elle, était déjà juste : le document se contredisait.
|
||||
|
||||
**Remotes git** :
|
||||
- `origin` (`https://git.etm-powersync.fr/...`) = remote de travail — push normal
|
||||
- `etm-public` (`gitea-lan:...powersync-energy-plugin-etm`) = miroir public GPL → push **MANUEL par Patrick uniquement** (`sync-public.sh`)
|
||||
|
||||
@ -186,7 +186,10 @@ inject(){ curl -s "http://$BOX:$MPORT/setstates?connected=true¤tPowerPhase
|
||||
# Compteur MUET : on cesse d'injecter (>90 s) → watchdog L2 bascule (QTimer 30 s, seuil 90 s).
|
||||
mute(){ echo "NE PLUS injecter pendant >90 s…"; sleep 95; }
|
||||
# Suivre les décisions de l'arbitre.
|
||||
logs(){ ssh etm@$BOX "sudo journalctl -u nymead -f | grep -E 'Arbitre|RelayRouter|EtmVariableLoad|SgReady'"; }
|
||||
# SANS sudo : `etm` est dans le groupe `adm`. Avec sudo, la commande échoue faute de TTY,
|
||||
# l'erreur part sur stderr, stdout est VIDE — et le suivi paraît simplement silencieux.
|
||||
# Un essai conduit sur ce flux ne dit rien et en a l'air (AGENTS.md, « Lire le journal »).
|
||||
logs(){ ssh etm@$BOX "journalctl -u nymead -f | grep -E 'Arbitre|RelayRouter|EtmVariableLoad|SgReady'"; }
|
||||
```
|
||||
|
||||
```bash
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user