docs: la route de push réelle, et ce qui distingue ce qui tient de ce qui s'érode

CARTOGRAPHIE DES REMOTES CORRIGÉE, et elle était fausse sur deux points dont un
bloquait tout push. `gitea-lan` = 192.168.1.113 est la SEULE route SSH — le port
22 de git.etm-powersync.fr est filtré — et le même Gitea sert les deux noms :
origin (HTTPS, qui n'authentifie pas) et origin-ssh désignent LE MÊME dépôt.

Surtout : « gitea-lan = miroir public GPL, ne jamais y pousser » était faux. Le
remote etm-public pointe sur powersync-energy-plugin-etm.git — sans le préfixe
etm- — et ce dépôt N'EXISTE PAS : Gitea répond « Cannot find repository ». Un
push y aurait échoué, pas publié. La prudence était donc fondée sur une
cartographie inexacte, et elle interdisait la seule route disponible.

Reste vrai : la publication du miroir public est un geste manuel de Patrick. Et
la vérification d'ascendance avant push est consignée comme obligatoire — c'est
ce qui distingue une avance rapide d'un écrasement.

61 commits poussés vers origin-ssh, ascendance vérifiée avant et relecture après :
plus rien en local seulement.

ET LA LEÇON DE LA SEMAINE, en section propre : la différence entre ce qui tient
et ce qui s'érode n'a jamais été la qualité de l'argument, c'est de savoir s'il
existe une machine qui le rejoue. Six cas de la semaine en regard — la table
d'état qui déclarait absents trois mécanismes testés, la table de traçabilité qui
nommait huit tests inexistants, la promesse de recréation jamais exercée,
ECS-111 décrit et jamais corrigé, l'absence de draw.authorisedW défendue en prose
à trois endroits — contre ce qu'un générateur, un test ou un refus RPC a tenu.

Avec son corollaire, éprouvé lui aussi : un garde-fou qu'on n'a jamais vu échouer
ne protège rien. Tous les tests d'invariant de la semaine ont été vérifiés
échouant avant d'être déclarés prêts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015F7G5VeaPVSMeVNjiGj36p
This commit is contained in:
Patrick Schurig 2026-08-30 09:30:17 +02:00
parent 970a7de531
commit c58ab9663a

View File

@ -476,10 +476,31 @@ commutation ». L'absence y porte, parce que la présence l'accompagne.
> `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`)
- `etm-pro` = reliquat historique — ne pas utiliser, cartographie à clarifier
**Remotes git — cartographie VÉRIFIÉE le 2026-08-30** (la précédente était fausse sur deux
points, et l'un d'eux aurait fait échouer tout push) :
| Remote | URL | État |
|---|---|---|
| `origin` | `https://git.etm-powersync.fr/ETM-Schurig/etm-powersync-energy-plugin-etm.git` | dépôt de travail, mais **l'HTTPS n'authentifie pas** |
| **`origin-ssh`** | `gitea-lan:ETM-Schurig/etm-powersync-energy-plugin-etm.git` | **LE MÊME dépôt, par SSH — c'est la route qui marche** |
| `etm-public` | `gitea-lan:ETM-Schurig/powersync-energy-plugin-etm.git` | ⚠️ **le dépôt N'EXISTE PAS** — `Cannot find repository` |
| `etm-pro` | `gitea-lan:...-etmpro.git` | reliquat historique — ne pas utiliser |
**Pousser : `git push origin-ssh feature/beta-rulebased`.**
> **`gitea-lan` = `192.168.1.113`**, et c'est la **seule route SSH qui fonctionne** : le port 22
> de `git.etm-powersync.fr` est filtré. Le même Gitea sert les deux noms — d'où le fait qu'un
> `origin` en HTTPS et un `origin-ssh` en SSH désignent **le même dépôt**, pas deux.
>
> **Ce qui était faux avant** : « `gitea-lan` = miroir public GPL, ne jamais pousser
> directement ». Le chemin `powersync-energy-plugin-etm.git` (sans le préfixe `etm-`) ne
> correspond à **aucun dépôt** — un push y aurait échoué, pas publié. La prudence était donc
> fondée sur une cartographie inexacte, et elle bloquait la seule route disponible.
>
> **Ce qui reste vrai** : la publication du miroir public GPL est un geste **manuel de
> Patrick** (`sync-public.sh`). Vérifier l'ascendance avant tout push
> (`git merge-base --is-ancestor <distant> HEAD`) : c'est ce qui distingue une avance rapide
> d'un écrasement.
---
@ -792,6 +813,31 @@ Règles absolues :
absent = aucun cycle ; `budget` absent = planification suspendue. Un zéro publié se lirait
« exécuté, rien à faire ».
## CE QUI TIENT ET CE QUI S'ÉRODE
**La différence n'a jamais été la qualité de l'argument — c'est de savoir s'il existe une machine
qui le rejoue.**
Une semaine d'août 2026 l'a montré six fois, et toujours dans le même sens : les décisions bien
raisonnées **et non exécutables** ont dérivé sans bruit, celles qu'un programme rejouait ont tenu.
| Ce qui a dérivé | Ce qui a tenu |
|---|---|
| la table d'état de `spec_ecs.md` §1 — écrite à la main, déclarait ECS-410/411/412 « absents » alors qu'ils étaient testés | l'index des règles, **généré**, qui casse sur un orphelin |
| la table §9 « Traçabilité » — nommait **huit tests qui n'ont jamais existé** | `ci-quality.sh`, qui régénère et refuse |
| « l'entrée supprimée sera recréée » — écrit au brief, **faux**, jamais exercé | `testDeletedEvChargerConfigComesBack`, vérifié échouant |
| `ECS-111` — défaut connu, décrit dans la spec, **jamais corrigé pendant des mois** | le test qui fige la charge, vérifié échouant |
| l'absence de `draw.authorisedW` — défendue en prose à **trois** endroits | `testLoadTelemetryRpc`, qui casse si on ajoute le champ |
| `rankOrigin` « auto » et la précédence des motifs, laissés à déduire de chaque côté | la règle écrite **une fois**, côté moteur, et le refus RPC qui l'applique |
**La règle pratique qui en sort** : quand une décision est prise, demander *quelle machine la
rejouera* — un test, un garde-fou de générateur, un refus à la frontière RPC. S'il n'y en a
aucune, la décision est une intention, et elle se périmera à la vitesse du code qu'elle décrit.
> **Corollaire, éprouvé lui aussi** : un garde-fou qu'on n'a **jamais vu échouer** ne protège
> rien. Chaque test d'invariant de cette semaine a été **vérifié échouant** avant d'être déclaré
> prêt — c'est la seule façon de savoir qu'il regarde ce qu'on croit.
## RÉPONSES FIGÉES (ne plus poser ces questions)
- Plages HC/HP et tarifs : **configuration JSON**, jamais hardcodé. Prévoir Tempo